使用说明
多代理RAG MCP
多代理RAG MCP是一种 本地第一代理+RAG堆栈 围绕:
- 奥拉玛 用于在本地运行LLM
- Qdrant 作为用于检索的矢量数据库
- 一个轻量级的API/UI层,用于测试、迭代和发布代理驱动的检索(而不仅仅是“提示之上的UI”)
此回购侧重于 代理驱动的检索,动态路由上下文 并使系统保持足够的模块化,以便在不重写整个应用程序的情况下交换模型、嵌入、分块和检索策略。
这个项目做什么
- 将文档摄取到 向量索引 (Qdrant)
- 跑动 语义搜索+检索 对于用户提示
- 构建a 固定上下文块 (RAG背景)
- 将提示+检索到的上下文发送到 Ollama托管模型
- 返回一个偏向的答案 忠诚 (从检索到的来源回答)
高层体系结构
User/UI
|
v
API (chat endpoint)
|
+--> Retriever (Qdrant) ----> Top-k chunks
|
+--> Prompt builder --------> Grounded context prompt
|
+--> LLM runtime (Ollama) --> Final response
关键组件
1) Qdrant(矢量数据库)
Qdrant商店:
- 嵌入
- 大块文本
- 元数据(来源、文档名称、页面/部分、时间戳、标签)
用于:
- Top-k最近邻检索
- 按元数据过滤/路由(启用时)
2) Ollama(LLM运行时)
Ollama提供:
- 本地模型服务
- 可预测的延迟和成本
- 跨模型的简单实验(例如,llama3.x、mistral等)
3) RAG格式化工具
有一个小的格式化层来构建模型使用的一致的“检索上下文”块。
检索是如何建立的
该系统的设计使模型:
- 答案 首先从检索到的块中
- 避免在缺少上下文时发明细节
- 在适当的时候可以明确地说“在检索到的上下文中找不到”
这就是“RAG作为UI功能”与 检索作为一级系统行为.
在本地运行
先决条件
- Docker+Docker组合
- Ollama已安装(或在容器中运行)
- Python 3.10+(如果在Docker之外本地运行服务)
启动Qdrant
如果使用Docker:
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
启动Ollama
如果在本地运行:
ollama serve
拉一个模型:
ollama pull llama3.1
运行应用程序
根据您的repo的连接方式,其中之一将适用:
python app.py
或者(如果是FastAPI/Uvicorn):
uvicorn app:app --reload --host 0.0.0.0 --port 8000
环境变量
创建一个 .env 本地配置文件。典型变量:
# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1
# Qdrant
QDRANT_URL=http://localhost:6333
QDRANT_COLLECTION=Multi Agent RAG MCP
# Retrieval
TOP_K=8
MIN_SCORE=0.2
# Chunking / Embeddings (if applicable)
EMBEDDING_MODEL=...
CHUNK_SIZE=...
CHUNK_OVERLAP=...
将秘密和本地路径从git中删除。使用
.gitignore为了.env.
摄入管道(典型流量)
- 从PDF/docs中提取文本
- 分成语义单位
- 嵌入每个块
- 使用元数据插入Qdrant
Qdrant有效载荷中存储的示例结构:
{
"text": "chunk content...",
"doc_id": "medical_ai.pdf",
"source": "local",
"page": 12,
"section": "intro",
"created_at": "2025-12-23T10:00:00Z"
}
查询管道(典型流程)
- 用户提示到达
/chat - 计算提示的嵌入(或使用Ollama嵌入模型(如果已配置))
- 查询问题:
top_k - 构建RAG上下文块
- 呼叫Ollama
/api/chat - 返回响应+可选检索源
是什么让这个“代理”(不仅仅是RAG)
- 检索不是一个固定的步骤,它可以被路由:
- 每个意图的不同收藏
- 每种查询类型的不同top-k
- 当用户指定域时,元数据会进行筛选
- “代理人”可以决定:
- 何时检索vs直接回答
- 何时要求跟进(如果缺少上下文)
- 如何支持索赔与对冲
项目目标
- 本地优先,成本可控的RAG堆栈
- 模块化组件(交换模型、嵌入、分块器、检索器)
- 接地输出,幻觉风险低
- 准备稍后扩展到多代理路由+评估循环
故障排除
Ollama港口已在使用中
如果你看到:
bind: address already in use
检查端口的使用情况:
lsof -i :11434
停止进程或更改端口。
Qdrant连接问题
确认Qdrant可用:
curl http://localhost:6333/collections
下一步改进(实用路线图)
- 添加基于元数据的路由(按文档/类型筛选)
- 在回复中添加引用(源块ID)
- 添加块级重新分级
- 添加eval工具(忠诚度+相关性)
- 添加Ollama的流媒体响应
- 为每个域添加多集合索引
