语义搜索服务

Raggy是一个基于RAG(检索增强生成)技术的MCP服务器,通过BERT嵌入实现文本文件的语义搜索。

  • by RCasatta
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 RCasatta/raggy

使用说明

Raggy

RAG(检索增强生成)MCP服务器,使用BERT嵌入对文本文件提供语义搜索。

{
  "mcpServers": {
    "raggy": {
      "command": "raggy",
      "args": [
        "mcp",
        "--model-dir",
        "/home/user/models/all-MiniLM-L6-v2",
        "--dir",
        "/home/user/knowledge-base",
        "--query-tool-description",
        "Search my local notes and docs using semantic similarity."
      ]
    }
  }
}

模型

该系统需要一个嵌入式BERT模型来运行。

测试需要 all-MiniLM-L6-v2 BERT模型待下载。 运行提供的脚本下载模型文件:

./download_model.sh

这将把模型下载到 models/all-MiniLM-L6-v2/ (约90MB)。

运行测试

cargo test --release # release mode suggested because computing embedding is expensive 

运行MCP

cargo run --release -- mcp --model-dir <path> --dir <path>

# or with nix
nix run -- mcp --model-dir <path> --dir <path>

必需参数:

  • --model-dir:包含以下内容的模型目录的路径 model.safetensors, tokenizer.json,以及 config.json
  • --dir:用于语义搜索的索引目录

可选参数:

  • --extensions:索引的逗号分隔文件扩展名(默认:“.txt,.md”)
  • --chunk_size:文本块的大小(默认值:512)
  • --chunk_overlap:块之间的重叠(默认值:50)

壳牌友好命令

虽然其主要目的是通过MCP协议使用它,但它可以通过几个shell命令进行完全测试

构建/更新索引并退出:

cargo run --release -- index --model-dir ./models/all-MiniLM-L6-v2 --dir .

使用现有索引运行一个一次性查询,并将JSON打印到stdout:

cargo run --release -- query --model-dir ./models/all-MiniLM-L6-v2 --dir . --question "how do I run the project with nix?" --top-k 5

如果所选内容不存在索引 model-dir + dir, raggy query 失败并要求您先索引。