多代理问答系统

一个监督式的多代理问答系统,智能地将用户查询路由到SQL推理管道或文档(RAG)推理管道,并在整个过程中强制执行安全性、记忆和引用。

  • by whitevshadow
  • TSQL
  • 本地部署
  • 更新于
在 GitHub 查看 whitevshadow/multi-source-agentic-q-a-assistant-with-langgraph

使用说明

🧠 多智能体问答系统

高级理念(一句话)

一个有监督的多智能体问答系统,可以智能地将用户查询路由到 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<br/>Streamlit Chat UI]

    %% Pre-processing
    CR[Context Resolver<br/>(Resolve follow-ups)]
    GR[Guardrail Agent<br/>(ALLOW / REJECT)]
    SUP[Supervisor Agent<br/>(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<br/>(Grounded Answer)]
    MEM[Conversation Memory]
    OUT[Final Answer<br/>+ 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.txt

2.准备运行时配置

# Windows
copy .env.template .env
# Linux/macOS
# cp .env.template .env

如果您的模型服务器不是本地的,请设置 OLLAMA_BASE_URL 在 .env 因此。

3.启动服务(两个终端)

航站楼A:

python app/mcp/server.py

B航站楼:

streamlit run streamlit_app.py

打开 http://localhost:8501.


Docker Compose(面向生产,外部Ollama)

此存储库包括:

  • Dockerfile.mcp
  • Dockerfile.streamlit
  • docker-compose.yml
  • .env.template

1.配置环境

# Windows
copy .env.template .env
# Linux/macOS
# cp .env.template .env

集 OLLAMA_BASE_URL 连接到外部模型服务器端点。

2.构建和运行

docker compose up --build

3.终点

  • 流线型用户界面: 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构建