多代理客户服务(A2A+MCP)
该项目实现了一个严格遵循模型上下文协议(MCP)和谷歌代理到代理(A2A)规范的客户支持系统。三个独立的代理(路由器、客户数据、支持)作为单独的A2A服务运行,通过A2A协议相互通信,并使用MCP服务器查询/更新SQLite数据库。
架构概述
- 路由器代理(编排器) –接收用户查询,分析意图,委托给专家,并撰写最终回复。
- 客户数据代理 –与MCP服务器对话,读取/更新客户记录和工单历史记录。
- 客服专员 –处理支持工作流程、工单创建和升级;在需要时从数据代理请求上下文。
- FastMCP服务器 –通过MCP协议公开所需的工具(获取/列出/更新客户、创建工单、获取历史记录以及助手查询),由
customer_service.db.
每个代理在以下位置发布一张代理卡 /.well-known/agent-card.json,支持JSON-RPC传输,可以独立执行(例如,通过MCP Inspector或任何A2A客户端)。
先决条件
- Python 3.11+
uv用于依赖关系管理- Google API密钥(Gemini模型)存储在
.env
快速开始
# 1. Create & activate venv
uv venv .venv
source .venv/bin/activate
# 2. Install project deps
uv pip install -r requirements.txt
# 3. Configure environment
cp .env.example .env # or create manually
echo "GOOGLE_API_KEY=your_key" >> .env
# 4. Initialize database (creates customer_service.db with seed data)
python database_setup.py
# 5. (Optional) verify MCP tools
python test_mcp.py运行A2A系统
打开两个终端(均在虚拟环境中):
- 启动所有A2A代理:
python a2a_server.py- 路由器: http://127.0.0.1:10020 - 客户数据: http://127.0.0.1:10021 - 技术支持: http://127.0.0.1:10022
- 通过路由器运行演示场景:
python main_a2a.py此脚本使用简单的A2A客户端(a2a_client.py)发送五个代表性查询(简单查找、升级帮助、打开工单报告、升级、多意图更新/历史)。
提示:您还可以使用以下方式呼叫单个代理call_agent()从a2a_client.py或任何符合A2A标准的客户端。
项目结构
a2a_agents.py–路由器、客户数据和支持代理+代理卡的定义。a2a_server.py–将每个代理作为独立的A2A HTTP服务器进行启动。a2a_client.py–通过A2A协议调用代理的最小助手。main_a2a.py–演示驱动程序,练习所有必需的场景。mcp_server.py–FastMCP服务器公开了SQLite支持的所需工具。mcp_tools.py–将MCP函数暴露为可调用ADK工具的薄包装器。database_setup.py–创建/初始化customer_service.db.customer_service.db–SQLite数据库(通常在git中忽略;通过安装脚本重新生成)。README_A2A.md,REQUIREMENTS_ALIGNMENT.md等等。–开发说明(可选择保留)。
遗留LangGraph原型(agents.py,原件 main.py实验室)不再使用;如果你只想要最终的A2A解决方案,你可以删除它们。
演示运行器(可交付成果#2)
python demo_runner.py脚本将:
- 在后台启动所有A2A代理。
- 执行
main_a2a.py(所有任务场景)。 - 捕获stdout/stderr以及服务器日志
demo_output.md. - 自动关闭代理。
提交生成的 demo_output.md (或在提交前重新生成)作为端到端运行的证明。
测试/验证
python test_mcp.py确认MCP工具调用成功。python main_a2a.py(服务器正在运行)演示:
- 简单的信息查找 - 协调“升级我的帐户”流程 - 复杂 active customers with open tickets 怎么翻译 - 升级/退款请求 - 多意图更新+票务历史
由于代理是独立的A2A服务,您还可以运行MCP Inspector或任何A2A客户端 http://127.0.0.1:1002x 验证卡片和任务执行情况。
