任务5:基于A2A和MCP的多代理客户服务系统
概述
该项目使用谷歌的代理到代理(A2A)协议和模型上下文协议(MCP)实现了一个多代理客户服务系统。该系统由三个专业代理组成,协调处理客户服务请求:
- 路由器代理 -协调请求并将其路由到适当的专业代理
- 客户数据代理 -通过MCP工具管理客户信息
- 客服专员 -通过MCP工具处理支持票和客户服务请求
先决条件
- Python 3.11+
- 虚拟环境(推荐)
- 启用Vertex AI的谷歌云项目(适用于Gemini型号)
- MCP服务器在端口8000上运行
安装
- 创建并激活虚拟环境:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate- 安装依赖项:
pip install -r requirements.txt- 设置Google API凭据 (选择一个选项):
选项A:Google AI API(推荐用于本地开发)
- 从获取API密钥 谷歌人工智能工作室 - 创建一个 .env HW文件夹中的文件:
GOOGLE_API_KEY=your_api_key_here- 或者设置环境变量:
export GOOGLE_API_KEY=your_api_key_here # Linux/Mac
set GOOGLE_API_KEY=your_api_key_here # Windows CMD
$env:GOOGLE_API_KEY="your_api_key_here" # Windows PowerShell选项B:顶点AI(用于生产/云)
- 设置环境变量:
export GOOGLE_CLOUD_PROJECT=your-project-id
export GOOGLE_CLOUD_LOCATION=us-central1- 通过以下方式进行身份验证: gcloud auth application-default login
运行系统
步骤1:启动MCP服务器
启动代理之前,MCP服务器必须正在运行。在单独的终端中启动它:
python mcp_server_standalone.pyMCP服务器将在 http://127.0.0.1:8000
步骤2:运行完整系统
运行主实现文件:
python assignment5_fixed_complete.py这将:
- 创建数据库并为其添加测试数据种子
- 启动所有三个代理服务器:
- 客户数据代理: http://127.0.0.1:9300 - 支持代理: http://127.0.0.1:9301 - 路由器代理: http://127.0.0.1:9400
- 自动运行所有测试场景
替代方案:从Jupyter笔记本运行
- 打开
HW.ipynb在Jupyter中 - 从以下位置复制代码
assignment5_fixed_complete.py进入笔记本电脑单元 - 按顺序运行单元格
测试场景
该系统包括5个测试场景:
- 简单查询 -获取ID 1的客户信息
- 协同查询 -客户ID 2的帐户升级请求
- 复杂查询 -显示所有持有未结门票的活跃客户
- 升级 -客户ID 1的退款请求
- 多意图 -更新客户ID 5的电子邮件并显示票务历史记录
项目结构
HW/
├── assignment5_fixed_complete.py # Main implementation (complete system)
├── mcp_tools.py # MCP tool wrappers for ADK agents
├── a2a_agents_fixed.py # Agent definitions
├── HW.ipynb # Jupyter notebook (optional)
├── README.md # This file
├── requirements.txt # Python dependencies
└── mcp.db # SQLite database (auto-created)主要特点
- MCP集成:所有数据库操作都通过MCP服务器工具进行
- A2A协调:路由器代理使用A2A协议与专业代理通信
- 基于LLM的工具选择:代理使用LLM推理来选择合适的MCP工具
- 三种协调方案:任务分配、协商和多步骤协调
故障排除
MCP服务器无法访问
- 确保MCP服务器在端口8000上运行
- 检查防火墙设置
- 验证代码中的MCP服务器URL是否与服务器URL匹配
代理未响应
- 检查所有A2A服务器是否已成功启动
- 验证端口9300、9301、9400是否未使用
- 检查日志中的错误消息
数据库问题
- 数据库在首次运行时自动创建
- 如果出现问题,请删除
mcp.db并重新运行脚本
备注
- 启动代理之前,MCP服务器必须正在运行
- 所有代理都使用MCP工具进行数据库操作(无直接数据库访问)
- 测试数据中的客户ID:1、2、3、4、5、12345
