RAG+MCP(Ollama)——交通政策演示
此仓库显示了如何连接 本地RAG(检索增强生成)服务 在...之上 奥拉玛 到a MCP服务器 这暴露了单个工具, getTransportPolicy,到启用MCP的客户端(例如Claude Desktop)。
知识库是一份真正的政策文件: 巴基斯坦交通政策 (PDF)。目标是演示如何将本地PDF转换为可查询的工具,回答基于该策略的自然语言问题。
______________________________________________________________________
这个项目做什么(以及为什么)
- 想法/动机\
使其易于实验 _本地_, _政策意识_ 助理,其中:
- 数据永远不会离开你的机器。 - 该模型被迫根据特定来源(此处为巴基斯坦交通政策PDF)进行回答。
- 它实际上做了什么
- 加载 巴基斯坦交通政策 PDF。 - 将文本分块并嵌入到内存中的向量存储中。 - 使用Ollama托管的模型来回答具有相关政策背景的问题。 - 将此RAG管道包裹在MCP工具后面, getTransportPolicy,因此任何MCP客户端都可以调用它。
- 它是如何工作的(高级)
1. MCP客户端呼叫 getTransportPolicy 带着一个 query 弦。 1. MCP服务器将查询转发到本地RAG HTTP服务。 1. RAG服务从以下位置检索相关块 巴基斯坦交通政策 并将它们发送到LLM。 1. 答案以人类可读的形式返回给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 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服务器。
- 启动Ollama (如果需要):
ollama serve
ollama pull qwen2.5:1.5b
ollama pull nomic-embed-text- 启动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.
- 启动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集成的示例提供的。根据您的用例需要调整许可证文本。
