检索增强生成工具

一个基于Python实现的RAG MCP服务器,通过检索本地研究论文库中的相关内容片段来增强生成模型的能力。

  • by astro-informatics
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 astro-informatics/mcp-rag

使用说明

RAG MCP工具

这个仓库包含一个用Python实现的最小化检索增强生成(RAG)MCP服务器示例。服务器提供了一个名为(此处应接具体工具名,但原文未给出)的单一MCP工具 retrieve 它会从本地研究论文语料库中查找简短且直接相关的片段(该 papers/ 使用嵌入(embeddings)和向量存储(vector store)来创建目录。

它是如何工作的

rag.py 包含服务器的核心代码。它首先加载位于(此处假设原文未完整,根据上下文补充)指定目录下的Markdown文件 papers/,将其分割成块,然后使用HuggingFace嵌入模型(默认 all-MiniLM-L6-v2),并将嵌入向量存储在一个包含搜索功能的Chroma向量存储中。服务器提供了一个MCP工具 retrieve(prompt: str) 该功能返回与关键词/主题提示最相关的前k个文本片段。

检索到的文本片段随后可以由另一个大型语言模型(例如VSCode Copilot中的GPT-5)进行处理。另一种选择是使用一个额外的大型语言模型首先处理/总结这些片段,然后将总结结果传递给协调器代理(例如Copilot),但我担心这样做会损失过多信息。上述工作流程使协调器能够直接访问检索到的片段。

使用该工具(VSCode)

对于VSCode,在(相应位置)下创建一个文件 .vscode/mcp.json (与)内容一起

{
    "servers": {
        "rag": {
            "type": "stdio",
            "command": "python",
            "args": [
                "rag.py"
            ]
        }
    }
}

然后,我们可以要求Copilot调用工具,例如在代理模式下,“使用RAG MCP工具来概述基于模拟的推理”。如果在启动服务器时遇到任何问题(服务器应该会自动启动,可能需要重启VSCode),请尝试访问https://code.visualstudio.com/docs/copilot/customization/mcp-servers。

我发现不断要求Copilot调用MCP工具非常繁琐。一个更有效的方法是设置一个提示文件(https://code.visualstudio.com/docs/copilot/customization/prompt-files)。我在(此处)放了一个示例 .github/prompts/rag.prompt.md,它告诉编排器(无论你在Copilot中选择了哪个LLM)如何使用MCP工具,例如在向量搜索之前将用户查询翻译成一组关键词。然后你可以提示Copilot执行诸如 /rag write an introduction to simulation-based inference in intro.txt, including references.

Cursor/Claude 等工具的设置过程应与上述过程非常相似,我认为主要区别在于 JSON 文件的语法。

备注

依赖项/自定义项:

  • langchain 并且 langchain_community 用于文档加载和文本拆分。
    • 分块记忆法(或称为“分组记忆法”) CharacterTextSplitter 被配置为 chunk_size=500 并且 chunk_overlap=100。
  • HuggingFaceEmbeddings 来自 langchain_huggingface.embeddings (模型: all-MiniLM-L6-v2) 用于生成密集嵌入。可以替换这个,也可以使用 OllamaEmbeddings。
  • Chroma 向量存储及通过(某种方式)搜索 langchain_community.vectorstores。
    • 目前,该索引是一个内存中的Chroma实例,但我们需要想办法设置一个持久化的索引——想象一下,只需要更改Chroma的配置即可。
    • 请求: k=10 默认显示顶级比赛;更改 search_kwargs 调整检索到的片段数量。
  • mcp.server.fastmcp.FastMCP 暴露一个简单的MCP服务器接口。