DOREMUS聊天机器人-MCP集成
一个聊天机器人应用程序,与 DOREMUS知识图谱 通过 模型上下文协议(MCP),实现古典音乐元数据的智能查询。
🎵 概述
该项目结合了 React前端 带着一个 FastAPI后端 提供一个交互式界面,用于查询DOREMUS知识图谱——一个包括作品、作曲家、表演、录音和乐器在内的古典音乐信息的综合数据库。
该应用程序使用:
- LangGraph 用于构建代理工作流
- LangChain 用于LLM与工具绑定的集成
- 模型上下文协议(MCP) 用于结构化访问DOREMUS知识图谱
- 多个LLM提供商 (OpenAI、Groq、Anthropic、Ollama)
📁 项目结构
ChatbotMCP/
├── backend/ # Python FastAPI backend
│ ├── src/
│ │ ├── server.py # FastAPI application & HTTP endpoints
│ │ ├── .env # Environment variables & API keys
│ │ └── agent/
│ │ ├── mcp_testing_agent.py # Agent initialization & LLM setup
│ │ ├── extended_mcp_client.py # Custom MCP client wrapper
│ │ ├── prompts.py # System prompts & agent instructions
│ │ └── __init__.py
│ ├── pyproject.toml # Poetry project configuration
│ └── requirements.txt # Python dependencies
│
├── frontend/ # React + Vite frontend
│ ├── src/
│ │ ├── App.jsx # Main React component
│ │ ├── App.css # Application styles (Tailwind CSS)
│ │ ├── main.jsx # React entry point
│ │ └── assets/ # Static assets
│ ├── index.html # HTML template
│ ├── vite.config.js # Vite configuration
│ ├── tailwind.config.js # Tailwind CSS configuration
│ ├── package.json # Node.js dependencies
│ └── public/ # Public static files
│
└── README.md # This file🚀 如何设置服务器
克隆Repo
git clone https://github.com/d4darius/ChatbotMCP.git
cd ChatbotMCP设置.env变量
创建文件
nano .env编辑 .env 使用API密钥:
OPENAI_API_KEY=sk-...
GROQ_API_KEY=gsk_...
LANGSMITH_API_KEY=lsv2_...
OLLAMA_API_URL=https://mcp-kg-ollama.tools.eurecom.fr
OLLAMA_API_KEY=...- 构建docker容器:
docker build -t mcp-chatbot-app .然后启动它
docker run -d \
--name my-chatbot \
--restart always \
-p 8001:8001 \
--env-file .env \
mcp-chatbot-app🔌 API终点
POST /chat
向聊天机器人发送消息并接收流媒体响应。
请求:
{
"message": "Find all compositions by Beethoven in the knowledge graph",
"model": "openai"
}答复: 服务器发送事件(SSE)流,具有:
type: "token"-LLM的流式文本响应type: "tool"-工具调用(例如,生成的SPARQL查询)
查询参数:
model:法学硕士提供者(openai,groq,anthropic,ollama)
GET /
返回欢迎消息和服务器状态。
🤖 运作原理
graph LR
A[User Message] -->|React Frontend| B[FastAPI Backend]
B -->|HTTP Request| C[Agent Initialization]
C -->|MCP Client| D[DOREMUS Knowledge Graph]
D -->|SPARQL Results| E[LLM Processing]
E -->|Streaming Response| B
B -->|Server-Sent Events| A代理工作流
- 用户输入:用户通过React前端发送自然语言查询
- 代理初始化:后端使用以下命令初始化LangGraph React代理:
- 选定的法学硕士(OpenAI、Groq、Anthropic或Ollama) - DOREMUS知识图谱中的MCP工具 - DOREMUS本体知识系统提示
- 工具绑定:LLM可以调用MCP工具:
- 探索DOREMUS本体论 - 查找实体URI - 检索实体属性 - 执行SPARQL查询
- 回应:格式化结果作为流返回到前端
🛠️ 关键技术
后端
| 技术 | 目的 |
|---|---|
| 快速API | REST API框架 |
| 优维康 | ASGI服务器 |
| LangChain | LLM编排和工具集成 |
| LangGraph | 代理工作流(ReAct代理模式) |
| langchain mcp适配器 | MCP↔ LangChain兼容性 |
| 主控程序 | 模型上下文协议实现 |
前端
| 技术 | 目的 |
|---|---|
| 反应19 | UI框架 |
| 维特 | 快速打包器和开发服务器 |
| Tailwind CSS | 实用程序优先的CSS框架 |
| Lucide React | 图标库 |
📊 DOREMUS知识图谱
多雷穆斯 是基于 CIDOC-CRM 随着 FRBR (工作表达表现项)扩展。
数据模型
- 工作:概念性音乐理念(如“贝多芬第九交响曲”)
- 表达:用记谱法、标题、作曲家实现音乐
- 显现:实物记录或出版
- 物品:表现形式的具体实例
- 事件:表演或录制活动
词汇
- 音乐键
- 模式
- 类型
- 表演媒体
- 主题目录
- 衍生类型
- 函数
🔑 环境变量
| 变量 | 描述 | 示例 |
|---|---|---|
OPENAI_API_KEY | OpenAI API密钥 | sk-... |
GROQ_API_KEY | Groq API密钥 | gsk_... |
LANGSMITH_API_KEY | LangSmith跟踪API密钥 | lsv2_... |
LANGSMITH_PROJECT | LangSmith项目名称 | rdfMCP_tester |
OLLAMA_API_URL | Ollama服务器URL | https://... |
OLLAMA_API_KEY | Ollama身份验证 | Base64编码 |
LLM_EVAL_PROVIDER | 默认LLM提供程序 | openai |
GRAPH_RECURSION_LIMIT | 代理递归深度 | 25 |
DOREMUS_MCP_URL | MCP服务器端点 | https://Doremus.fastmcp.app/mcp |
DOREMUS_MCP_TRANSPORT | MCP传输协议 | streamable_http |
🧪 可用的LLM型号
| 供应商 | 型号 | 温度 |
|---|---|---|
| OpenAI | gpt-5.2 | 0.0 |
| Groq | llama-3.3-70b-versatile | 0.0 |
| 奥拉马 | qwen3-coder:30b | 0.0 |
📝 查询示例
- “查找贝多芬的所有作品”
- “古典音乐有哪些不同的流派?”
- “给我看莫扎特交响乐的录音”
- “探索作品与表演之间的关系”
📦 依赖项
后端
看 pyproject.toml 完整列表:
- 核心:
fastapi,uvicorn,python-dotenv - LLM
langchain,langchain-openai,langchain-groq,langchain-anthropic,langchain-ollama - 图表:
langgraph,langsmith,langchain-mcp-adapters - 法学硕士:
openai,groq,ollama
前端
看 完整列表:
- 核心:
react@19,react-dom@19 - 构建:
vite@7,autoprefixer,postcss - 造型:
tailwindcss@3 - 图标:
lucide-react
📚 了解更多
👥 作者
- 达里奥·戈斯马尔 -dario.gosmar@eurecom.fr
- 西蒙·法西奥 - simone.fassio@eurecom.fr
📄 许可证
该项目是DOREMUS倡议的一部分。有关许可证信息,请参见项目存储库。
______________________________________________________________________
快乐查询! 🎼
