历史问答系统

一个基于MCP协议的多代理历史问答系统,通过动态路由用户查询到特定领域的代理服务器,提供印度历史和欧洲历史的问答服务。

  • by sashwatjain
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 sashwatjain/mcp-history-bot

使用说明

🧠 MCP历史机器人(MCP兼容多代理系统)

一个模块化的多智能体历史问答系统,灵感来自 模型上下文协议(MCP).

本项目演示了MCP概念(客户端、服务器、工具、代理、路由)如何在 稳定、生产就绪的方式 使用 HTTP传输,同时与MCP的设计理念完全兼容。


🚀 项目概述

MCP历史机器人 通过动态地将用户查询路由到正确的历史域来回答来自不同历史域的问题 领域特定代理.

当前支持的域:

  • 🇮🇳 印度历史
  • 🇪🇺 欧洲历史

每个域都作为一个 独立服务器(代理) 支持:

  • 基于PDF的知识
  • 矢量搜索(ChromaDB)
  • 嵌入模型(句子转换器)

A中心 客户端路由器代理(基于LLM) 决定呼叫哪个服务器。


🧠 为什么MCP兼容而不是纯MCP?

虽然MCP提供了一种强大的协议, 基于stdio的MCP在Windows上不稳定 MCP HTTP支持因版本而异。

确保:

  • 稳定性
  • 可重复性
  • 与跨平台支持

我们实施了:

  • 通过FastAPI进行HTTP传输
  • 架构级别的严格MCP语义

这允许:

  • 稍后无缝迁移到真正的MCP HTTP
  • 明确代理边界
  • 清洁工具合同
  • 可靠的地方发展

🧩 本项目中使用的MCP概念

MCP概念 实施
客户 client/chatbot_client.py
服务器 每个域的FastAPI应用程序
工具 HTTP端点 /tools/*
工具输入 结构化JSON
工具输出 检索到的上下文
代理 特定于域的服务器
路由器代理 基于LLM的决策逻辑
传输 HTTP(FastAPI)
上下文存储 ChromaDB

🏗️ 建筑

```

User
↓
Client (Router Agent)
↓
LLM decides domain
↓
├── Indian History Server (Agent)
└── European History Server (Agent)
↓
Vector Search (ChromaDB)
↓
Context
↓
LLM Answer Generation
↓
User

```

📁 项目结构

    ```

    mcp-history-bot/
    │
    ├── client/
    │   └── chatbot_client.py      # Router + chatbot logic
    │
    ├── servers/
    │   ├── indian_history/
    │   │   ├── server.py          # Indian history agent
    │   │   ├── ingest.py          # PDF ingestion
    │   │   └── chroma_db/
    │   │
    │   └── european_history/
    │       ├── server.py          # European history agent
    │       ├── ingest.py
    │       └── chroma_db/
    │
    ├── contracts/
    │   └── tools.py               # Tool schemas (MCP-style)
    │
    ├── shared/
    │   └── llm.py                 # Local LLM interface (Ollama)
    │
    ├── requirements.txt
    └── README.md

    ````

⚙️ 技术栈

- **Python 3.10**
- **FastAPI** – HTTP transport
- **ChromaDB** – Vector database
- **SentenceTransformers** – Embeddings
- **Ollama (LLaMA-3)** – Local LLM
- **Requests** – Client-side HTTP calls
- **Uvicorn** – ASGI server

🧪 它是如何工作的(一步一步)

1. User asks a question
2. Client sends question to an LLM router
3. Router decides:
- `india`
- `europe`
- `none`
4. Client calls the corresponding agent server
5. Agent:
- Converts question to embedding
- Retrieves relevant chunks from ChromaDB
- Returns context
6. Client asks LLM to answer using **only that context**
7. Final answer is shown to the user

▶️ 运行项目

1.️⃣ 启动印度历史服务器

python -m servers.indian_history.server

2.️⃣ 启动欧洲历史服务器

python -m servers.european_history.server

3.️⃣ 启动聊天机器人客户端

python -m client.chatbot_client

🏷️ 版本控制

v0.3.0-mcp-compatible-http-multiserver
  • MCP兼容架构
  • 稳定的HTTP传输
  • 多代理支持

🔮 未来改进

  • 用真正的MCP HTTP替换HTTP传输
  • 添加基于置信度的路由
  • 添加并行代理调用
  • 提高PDF分块质量
  • 添加web UI(Gradio/React)
  • 代理间通信

📌 关键收获

  • MCP是关于 建筑,而非交通
  • 工具应该执行,而不是推理
  • 代理应该是隔离和可替换的
  • 路由是一个首要问题
  • 稳定性比纯度更重要

🧠 灵感

灵感来源:

  • 模型上下文协议(MCP)
  • 基于代理的人工智能系统
  • 模块化微服务架构
  • 基于RAG的知识系统