多代理客户服务系统(LangGraph+A2A+MCP)
此存储库包含一个多代理客户服务演示,其中代理使用协作循环(LangGraph)和代理到代理(A2A)消息传递进行协调。数据访问是通过一个小型MCP(模型上下文协议)服务器提供的,该服务器公开了一组由SQLite数据库支持的工具。
关键部件:
- 运行路由器、客户数据和支持代理的LangGraph工作流(协作循环)
- 用于代理到代理消息传递的进程中A2A协议(具有可选的HTTP代理端点)
- MCP服务器为客户和票务操作提供了一小套工具
- Gradio UI与多代理系统交互
此README提供了简洁、可重复的说明,以使演示在本地运行。
______________________________________________________________________
快速开始
先决条件:Python 3.11+、Conda或virtualenv,以及一个OpenAI API密钥(如果您想要LLM响应)。
- 创建并激活您的Python环境:
conda activate genai2 # or create/activate your environment of choice
# or using venv:
python -m venv .venv
.\.venv\Scripts\activate- 安装依赖项:
pip install -r requirements.txt- 创建或重置演示数据库(创建
data/customers.db使用样本数据):
python data/database_setup.py- 启动MCP服务器(代理调用工具所需)。使用HTTP传输进行本地测试:
python run_servers.py mcp --transport http --port 8080- 在单独的终端中启动Gradio UI(可选):
python -m src.ui.gradio_app打开http://127.0.0.1:7860在浏览器中与系统交互。
或者,将两者一起运行:
python run_servers.py all --gradio______________________________________________________________________
每个命令的作用
run_servers.py mcp--启动MCP服务器。使用--transport http对于上的HTTP JSON-RPC端点/mcp.run_servers.py gradio--启动Gradio应用程序(与python -m src.ui.gradio_app).run_servers.py all --gradio--启动MCP HTTP服务器,并在后台线程中启动Gradio UI。
MCP工具(由服务器公开)
MCP服务器有意公开一组集中的工具(这些是测试和代理所期望的唯一工具):
get_customer(customer_id)--按以下方式返回客户记录customers.idlist_customers(status, limit)--按以下方式列出客户customers.statusupdate_customer(customer_id, name?, email?, phone?, status?)--更新客户字段create_ticket(customer_id, issue, priority)--插入ticketsget_customer_history(customer_id)--返回客户信息及其门票(tickets.customer_id)
注意:服务器不会公开额外的辅助工具,如 search_customers 或 get_open_tickets --代理使用上述五个工具实现搜索/过滤。
______________________________________________________________________
演示笔记本
打开 demo.ipynb 使用Jupyter Lab/Notebook运行交互式场景。笔记本通过多代理流运行多个场景,并打印A2A日志和摘要。
运行:
jupyter lab demo.ipynb笔记:
- 笔记本电脑已调整为在交互式环境中工作(它使用
Path().resolve()用于项目根,并读取全局A2A注册表以列出代理)。 - 为了获得逼真的LLM输出,请设置
OPENAI_API_KEY在.env或环境。
______________________________________________________________________
测试
使用以下命令运行测试套件:
pytest -vMCP客户端的集成测试标记为 @pytest.mark.integration 并且仅当MCP服务器不可访问时才会跳过。单元测试直接练习服务器助手。
______________________________________________________________________
故障排除
- 如果在运行Gradio应用程序或笔记本时导入失败,请确保从项目根目录运行命令,以便
src正在打开sys.path. - 如果Gradio UI引发有关A2A或MCP的错误,请确认MCP服务器正在
http://localhost:8080(或设置MCP_SERVER_URL有人)。 - 如果您看到与以下内容相关的循环导入错误
src.a2a,我们避免在包导入时导入服务器位--importsrc.a2a.a2a_server当您需要运行HTTP A2A端点时,可以直接执行。
______________________________________________________________________
开发说明
- LangGraph
StateGraph在中实现协作循环src/agents/graph.py节点功能src/agents/nodes.py. - A2A协议和注册表位于
src/a2a/. - MCP服务器和客户端在
src/mcp/.
如果你愿意,我可以添加一个小的便利Makefile/PPowerShell脚本来运行MCP服务器+Gradio UI并自动打开浏览器。
______________________________________________________________________
许可和贡献
此存储库用于教育/演示目的。请随时打开问题或PR进行改进。
