多智能体客服系统

一个基于LangGraph和A2A技术的多智能体协作客服系统,适用于自动化客户服务场景。

  • by johnmelel
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 johnmelel/langgraph-a2a-mcp

使用说明

多代理客户服务系统(LangGraph+A2A+MCP)

此存储库包含一个多代理客户服务演示,其中代理使用协作循环(LangGraph)和代理到代理(A2A)消息传递进行协调。数据访问是通过一个小型MCP(模型上下文协议)服务器提供的,该服务器公开了一组由SQLite数据库支持的工具。

关键部件:

  • 运行路由器、客户数据和支持代理的LangGraph工作流(协作循环)
  • 用于代理到代理消息传递的进程中A2A协议(具有可选的HTTP代理端点)
  • MCP服务器为客户和票务操作提供了一小套工具
  • Gradio UI与多代理系统交互

此README提供了简洁、可重复的说明,以使演示在本地运行。


快速开始

先决条件:Python 3.11+、Conda或virtualenv,以及一个OpenAI API密钥(如果您想要LLM响应)。

  1. 创建并激活您的Python环境:
conda activate genai2   # or create/activate your environment of choice
# or using venv:
python -m venv .venv
.\.venv\Scripts\activate
  1. 安装依赖项:
pip install -r requirements.txt
  1. 创建或重置演示数据库(创建 data/customers.db 使用样本数据):
python data/database_setup.py
  1. 启动MCP服务器(代理调用工具所需)。使用HTTP传输进行本地测试:
python run_servers.py mcp --transport http --port 8080
  1. 在单独的终端中启动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.id
  • list_customers(status, limit) --按以下方式列出客户 customers.status
  • update_customer(customer_id, name?, email?, phone?, status?) --更新客户字段
  • create_ticket(customer_id, issue, priority) --插入 tickets
  • get_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 -v

MCP客户端的集成测试标记为 @pytest.mark.integration 并且仅当MCP服务器不可访问时才会跳过。单元测试直接练习服务器助手。


故障排除

  • 如果在运行Gradio应用程序或笔记本时导入失败,请确保从项目根目录运行命令,以便 src 正在打开 sys.path.
  • 如果Gradio UI引发有关A2A或MCP的错误,请确认MCP服务器正在 http://localhost:8080 (或设置 MCP_SERVER_URL 有人)。
  • 如果您看到与以下内容相关的循环导入错误 src.a2a,我们避免在包导入时导入服务器位--import src.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进行改进。