本地RAG服务与MCP集成

该项目展示了如何在Ollama上部署本地RAG(检索增强生成)服务,并将其与MCP服务器集成,以提供基于巴基斯坦交通政策PDF的问答功能。

  • by hassaanarif
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 hassaanarif/mcp_rag_langchain_ollama

使用说明

RAG+MCP(Ollama)——交通政策演示

此仓库显示了如何连接 本地RAG(检索增强生成)服务 在...之上 奥拉玛 到a MCP服务器 这暴露了单个工具, getTransportPolicy,到启用MCP的客户端(例如Claude Desktop)。

知识库是一份真正的政策文件: 巴基斯坦交通政策 (PDF)。目标是演示如何将本地PDF转换为可查询的工具,回答基于该策略的自然语言问题。


这个项目做什么(以及为什么)

  • 想法/动机
    使其易于实验 本地, 政策意识 助理,其中:

    • 数据永远不会离开你的机器。
    • 该模型被迫根据特定来源(此处为巴基斯坦交通政策PDF)进行回答。
  • 它实际上做了什么

    • 加载 巴基斯坦交通政策 PDF。
    • 将文本分块并嵌入到内存中的向量存储中。
    • 使用Ollama托管的模型来回答具有相关政策背景的问题。
    • 将此RAG管道包裹在MCP工具后面, getTransportPolicy,因此任何MCP客户端都可以调用它。
  • 它是如何工作的(高级)

    1. MCP客户端呼叫 getTransportPolicy 带着一个 query 弦。
    2. MCP服务器将查询转发到本地RAG HTTP服务。
    3. RAG服务从以下位置检索相关块 巴基斯坦交通政策 并将它们发送到LLM。
    4. 答案以人类可读的形式返回给MCP客户端 content 结构化 { answer: string }.

建筑

  • RAG服务(rag-service/)

    • Node.js+Express HTTP API。
    • LangChain+Ollama用于:
      • PDF加载和分块。
      • 嵌入件(nomic-embed-text)+内存中的矢量存储。
      • 通过问答 qwen2.5:1.5b.
    • 暴露 POST /query 上 http://localhost:3001/query 返回 { answer: string }.
  • MCP服务器(mcp-server/)

    • 内置于 @modelcontextprotocol/sdk.
    • 寄存器 getTransportPolicy.
    • 每次通话:
      • 发送 query 到RAG服务。
      • 返回两个显示器 content 和 structuredContent: { answer }.
  • MCP客户端(如克劳德桌面)

    • 通过stdio连接到MCP服务器。
    • 暴露 getTransportPolicy 工具,以便您可以提出以下问题 巴基斯坦交通政策 直接从聊天UI。

工具

  • getTransportPolicy
    • 输入:
      • query (string)--您的运输政策问题。
    • 输出(structuredContent):
      • answer (string)--答案基于巴基斯坦交通政策PDF。
    • 行为:
      • 前进 query 到 http://localhost:3001/query.
      • RAG服务对PDF进行检索,并使用LLM生成答案。

先决条件

  • 将军

    • Node.js 18+ 和npm
    • Git(可选)
  • 奥拉玛

    • 安装:https://ollama.com
    • 确保Ollama守护进程正在运行(ollama serve).
  • 模型使用

ollama pull qwen2.5:1.5b
ollama pull nomic-embed-text

项目布局

  • rag-service/ –RAG HTTP API公开 /query.
  • mcp-server/ –MCP服务器暴露 getTransportPolicy.
  • rag-service/assets/transport_policy.pdf – 巴基斯坦交通政策 PDF用作唯一的知识来源。

设置

从项目根:

git clone <your-repo-url> rag-mcp-ollama
cd rag-mcp-ollama
  • RAG服务
cd rag-service
npm install
  • MCP服务器
cd ../mcp-server
npm install
npm run build

在本地运行

你需要 二 进程:RAG HTTP服务和MCP服务器。

  1. 启动Ollama (如果需要):
ollama serve
ollama pull qwen2.5:1.5b
ollama pull nomic-embed-text
  1. 启动RAG服务:
cd rag-mcp-ollama/rag-service
npm start

这将:

  • 负载 assets/transport_policy.pdf (巴基斯坦交通政策)。
  • 分块文本并构建一个 MemoryVectorStore 随着 nomic-embed-text 嵌入。
  • 初始化 qwen2.5:1.5b.
  • 在以下位置启动Express服务器 http://localhost:3001 随着 POST /query.
  1. 启动MCP服务器:
cd rag-mcp-ollama/mcp-server
npm run build   # if not built yet
node build/index.js

服务器日志 Transport MCP Server running on stdio 并暴露 getTransportPolicy.


与Claude Desktop一起使用(示例)

配置运行节点进程的MCP服务器条目,例如:

{
  "transport-mcp": {
    "command": "node",
    "args": ["/absolute/path/to/rag-mcp-ollama/mcp-server/build/index.js"],
    "env": {}
  }
}

启用后,您应该看到 transport-mcp 服务器与 getTransportPolicy 工具。问以下问题:

  • “巴基斯坦交通政策的主要目标是什么?”
  • “该政策如何解决道路安全问题?”

答案将由当地RAG管道通过巴基斯坦交通政策PDF生成。


故障排除

  • RAG服务没有响应

    • 确保 npm start 正在磨合 rag-service/ 在端口3001上。
    • 确认Ollama正在运行,并且两个型号都已拔出。
  • MCP客户端架构/验证错误

    • 确保您正在运行构建的服务器(node build/index.js).
  • 模型错误或响应缓慢

    • 检查 ollama serve 健康,您的系统有足够的资源。

许可证

该项目是作为与Ollama构建本地PDF接地RAG+MCP集成的示例提供的。根据您的用例需要调整许可证文本。