🧠 多智能体问答系统
高级理念(一句话)
一个有监督的多智能体问答系统,可以智能地将用户查询路由到 SQL推理管道 或一个 文档(RAG)推理管道,在整个过程中加强安全、记忆和引用。
______________________________________________________________________
概述
该项目实现了 生产级代理问答架构 使用 LangGraph 作为控制平面和 MCP(模型上下文协议) 作为执行层。
该系统能够回答以下问题:
- 结构化数据 (Northwind SQL数据库)
- 非结构化文档 (PubMed/临床PDF)
中央 监督代理 决定如何处理每个查询,同时加强护栏、内存和可解释性。
______________________________________________________________________
关键能力
- 🧠 使用LangGraph进行多代理编排
- 🛡️ 安全和范围控制护栏
- 🔀 智能路由(SQL vs RAG vs Clarify)
- 📚 文档的引用支持答案
- 🧮 确定性SQL推理
- 🧠 后续问题的对话记忆
- 🔍 易于观察、可调试的步骤
______________________________________________________________________
端到端工作流
User Question
↓
Context Resolution
↓
Guardrail Check
↓
Supervisor Agent (Decision Maker)
↓
┌────────────────┬────────────────────┐
│ SQL Agent │ RAG Agent │
│ (Structured) │ (Unstructured) │
└────────────────┴────────────────────┘
↓
Answer Synthesis + Citations
↓
Conversation Memory Update
↓
Final Answer to User______________________________________________________________________
🧠 系统架构(LangGraph+MCP)
flowchart TD
%% UI
U[User
Streamlit Chat UI]
%% Pre-processing
CR[Context Resolver
(Resolve follow-ups)]
GR[Guardrail Agent
(ALLOW / REJECT)]
SUP[Supervisor Agent
(Route Decision)]
%% Routing
SQLA[SQL Agent]
RAGA[RAG Agent]
CLARIFY[Clarify Response]
REJECT[Reject Response]
%% MCP Layer
MCP[MCP Client]
SQLDB[(Northwind Database)]
DOCS[(PubMed / Clinical PDFs)]
%% Answer
SYN[Answer Synthesizer
(Grounded Answer)]
MEM[Conversation Memory]
OUT[Final Answer
+ Sources]
%% Flow
U --> CR
CR --> GR
GR -->|REJECT| REJECT
GR -->|ALLOW| SUP
SUP -->|SQL| SQLA
SUP -->|RAG| RAGA
SUP -->|CLARIFY| CLARIFY
SUP -->|REJECT| REJECT
%% SQL Path
SQLA --> MCP
MCP --> SQLDB
SQLDB --> MCP
MCP --> SYN
%% RAG Path
RAGA --> MCP
MCP --> DOCS
DOCS --> MCP
MCP --> SYN
%% Finalization
SYN --> OUT
OUT --> MEM
MEM --> CR______________________________________________________________________
代理人职责
🛡️ 护栏代理
- 阻止范围外或不安全的问题
- 及早预防幻觉
🧠 监督代理
- 在SQL、RAG、澄清或拒绝之间做出决定
- 确保只运行一条执行路径
🧮 SQL代理
- 转换自然语言→ SQL
- 执行确定性查询
- 返回精确的数值结果
📚 RAG代理
- 检索相关文档块
- 综合有根据的答案
- 始终返回引用
✍️ 答案合成器
- 规范跨代理的输出
- 格式化最终答案+来源
______________________________________________________________________
为什么选择LangGraph+MCP?
LangGraph
- 清晰的状态转换
- 显式控制流
- 易于调试和可观察性
MCP(模型上下文协议)
- 工具隔离
- 清洁服务边界
- 可交换的执行后端
它们共同构成了一个 干净的控制平面+执行平面架构 适用于现实世界的人工智能系统。
______________________________________________________________________
示例查询
结构化查询语言
- “总销售额前5名产品”
- “他们处理了多少订单?”
检索增强生成
- “什么是拉沙热?”
- “患者的严重程度如何变化?”
随访(记忆感知)
- “它会变得有多严重?”
- “它在哪里流行?”
______________________________________________________________________
生产就绪设计原则
- 没有监督,任何代理人都不会逃跑
- 歧义会引发澄清,而不是幻觉
- SQL和RAG故障是隔离的
- 记忆永远不会覆盖事实
______________________________________________________________________
状态
✅ 核心架构已实施 ✅ SQL+RAG路由稳定 ✅ 内存分辨率工作 ✅ 引用已执行
______________________________________________________________________
下一步改进
- 流媒体响应
- 工具信心评分
- 重试和回退策略
- UI时间线可视化
- 评估工具
______________________________________________________________________
在本地运行
1.创造环境
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
# source .venv/bin/activate
pip install -r requirements.txt2.准备运行时配置
# Windows
copy .env.template .env
# Linux/macOS
# cp .env.template .env如果您的模型服务器不是本地的,请设置 OLLAMA_BASE_URL 在 .env 因此。
3.启动服务(两个终端)
航站楼A:
python app/mcp/server.pyB航站楼:
streamlit run streamlit_app.py打开 http://localhost:8501.
______________________________________________________________________
Docker Compose(面向生产,外部Ollama)
此存储库包括:
Dockerfile.mcpDockerfile.streamlitdocker-compose.yml.env.template
1.配置环境
# Windows
copy .env.template .env
# Linux/macOS
# cp .env.template .env集 OLLAMA_BASE_URL 连接到外部模型服务器端点。
2.构建和运行
docker compose up --build3.终点
- 流线型用户界面:
http://localhost:8501 - MCP HTTP端点:
http://localhost:3333/mcp
4.持久数据
编写挂载以保持运行时数据的持久性:
./data->/app/data- 命名卷
mcp_runtime->/app/runtime - 命名卷
streamlit_runtime->/app/runtime
______________________________________________________________________
配置说明
该应用程序现在支持以下环境驱动配置:
- MCP主机/端口/url
- SQL/RAG数据路径
- 会话/内存数据库路径
- 嵌入模型
- 所有Olama型号名称
看 .env.template 获取完整的变量名和默认值。
______________________________________________________________________
使用LangGraph•MCP•Streamlit•SQL•RAG构建
