内容
# Agent2Agent (A2A) 和 MCP 演示
该项目作为谷歌的 Agent2Agent (A2A) 协议的实际演示,展示了用户、A2A 客户端(Client Agent)与多个托管不同远程代理的 A2A 服务器之间的互动。它还通过让其中一个远程代理与通过 MCP 服务器暴露的工具进行交互,展示了模型上下文协议(Model Context Protocol, MCP)的集成。
## 项目概述
本项目的核心围绕 A2A 协议展开,旨在实现不同自主代理之间的无缝通信和任务委派。这解决了人工智能领域中的一个关键挑战:允许由不同公司基于多种框架构建的代理在不同服务器上有效地进行通信和协作。该设置包括:
1. **用户**:通过使用 Mesop 构建的基于网页的前端与系统进行交互。
2. **A2A 客户端 (Client Agent)**:一个使用 Google ADK 框架构建的中央代理。它充当协调者,从前端接收用户请求。它利用 A2A 协议的发现机制(通过 Agent Cards)来识别可用远程代理的能力,并智能地将用户的请求路由到最合适的代理。
3. **A2A 服务器**:一个实现 A2A 协议方法的 HTTP 端点,接收来自 A2A 客户端的请求,并管理其托管的远程代理的任务执行。
4. **远程代理**:托管在 A2A 服务器上的专用代理,能够执行特定任务。该项目展示了两个不同的远程代理。
5. **MCP 服务器**:(由其中一个远程代理使用)实现模型上下文协议(Model Context Protocol),为 AI 模型和代理与外部工具、数据源和系统的交互提供标准化方式。它抽象了对特定工具的访问,为代理提供标准化接口(`list_tools`,`call_tool`),使其能够与工具进行交互,而无需了解工具的内部实现。
用户通过 Mesop 网络应用与 A2A 客户端进行交互,该应用可视化用户、客户端代理和远程代理之间的对话流程和交互。
## 架构与流程
该项目展示了一个典型的A2A(Agent-to-Agent)交互流程,通过MCP的集成得到了增强:
1. **远程代理启动**:远程代理(Currency Convertor和Deep Research)被启动。在初始化过程中,它们通过`AgentCard`暴露其能力和技能,`AgentCard`是描述代理功能、端点和其他相关信息的公共元数据文件。
2. **客户端代理发现**:A2A客户端应用程序被启动。它通过获取可用的`AgentCard`来发现远程代理,从而了解它们的能力以及如何与之交互。
3. **用户交互**:用户在Mesop网页用户界面中输入查询。
4. **请求路由(A2A客户端)**:A2A客户端接收到用户的查询。根据附加的`AgentCard`中描述的能力,客户端代理确定哪个远程代理最适合处理该请求,并使用A2A协议的`tasks/send`或`tasks/sendSubscribe`方法转发查询。
5. **远程代理执行**:选定的远程代理通过A2A服务器接收查询。
- **Currency Convertor代理**:Currency Convertor代理使用Langgraph框架构建,处理请求。为了获取实时汇率,它与托管在MCP服务器上的货币转换工具进行交互。它使用标准化的`list_tools`来发现可用工具,并使用`call_tool`调用MCP服务器提供的特定货币转换功能。这种交互展示了A2A代理如何利用通过MCP暴露的外部能力。
- **Deep Research代理**:Deep Research代理同样使用Langgraph框架构建,执行其内部研究工作流程。Langgraph的图形结构允许定义复杂的、有状态的交互和决策过程,这对于全面的研究是必需的。
6. **响应**:远程代理处理查询并通过A2A服务器将结果发送回A2A客户端。该响应可以包括结构化数据(Artifacts)或消息。
7. **显示(前端)**:A2A客户端更新Mesop用户界面,以向用户显示从远程代理收到的响应,完成交互周期。
该架构有效展示了A2A协议如何促进不同服务之间的代理发现和交互,同时与MCP的集成展示了代理如何以标准化和模块化的方式利用外部工具。
## 组件
* **Mesop Frontend**: 一个提供用户界面的Web应用程序,用于与A2A Client进行交互。它显示对话历史、代理响应,并可能可视化代理交互。
* **A2A Client (Client Agent)**:
- 基于Google ADK框架构建,简化了遵循A2A协议的代理开发。
- 管理与用户的对话,维护状态和上下文。
- 根据其AgentCards发现并连接到远程代理。
- 根据用户查询的技能和能力智能地将其路由到适当的远程代理。
* **A2A Server**:
- 托管远程代理,使其可供A2A Clients访问。
- 处理传入的A2A请求,并管理分配给远程代理的任务生命周期。
* **远程代理**:
* **货币转换代理**:
- 使用Langgraph框架实现,能够为货币转换请求定义有状态的工作流。
- 专注于货币转换任务。
- 与MCP Server交互,以使用标准化的MCP工具接口访问实时货币转换工具。
* **深度研究代理**:
- 使用Langgraph框架实现,以定义和管理复杂的多步骤研究过程。
- 旨在根据用户查询进行深入研究,可能涉及多个步骤,如信息收集、综合和总结。
- 其内部工作流节点包含在此存储库中,展示了Langgraph的实际应用。
* **MCP Server**:
- 托管实际的货币转换工具。
- 提供基于模型上下文协议(Model Context Protocol)规范的标准化接口(`list_tools()`,`call_tool()`),允许货币转换代理在不直接进行API集成的情况下访问其功能。
## 使用的技术
* **Google Agent2Agent (A2A) Protocol**:一个开放协议,支持不透明代理应用之间的通信和互操作性。它定义了代理如何发现彼此的能力、协商交互方式、安全地协作完成任务以及交换各种形式的内容。
* **Google Agent Development Kit (ADK)**:一个简化构建符合A2A协议的代理的框架。
* **Model Context Protocol (MCP)**:一个开放标准,用于将AI助手连接到外部系统、数据源和工具。它标准化了模型如何访问上下文并通过工具执行操作,提供了一种通用的即插即用格式。
* **Mesop**:一个基于Python的UI框架,用于构建A2A客户端的网页前端,提供用户友好的交互界面。
* **Langgraph**:一个基于LangChain构建的库,允许使用LLMs构建有状态的多参与者应用。它采用基于图的方式定义具有循环的复杂工作流,对于创建可以涉及迭代过程和决策点的复杂代理运行时至关重要。
* **Python**:用于开发A2A客户端、A2A服务器、远程代理和MCP服务器组件的主要编程语言。
## A2A 和 MCP:互补协议
本项目强调了 A2A 和 MCP 之间的协同作用。A2A 专注于代理之间的通信与协作,使不同的代理能够发现并相互互动。另一方面,MCP 标准化了单个代理(或模型)与外部工具和数据源的交互方式。
在本项目中,A2A 协议用于客户端代理与远程代理之间的通信。MCP 被货币转换远程代理用于与特定的货币转换工具进行交互。这展示了一种强大的模式,其中 A2A 使多代理系统成为可能,而在该系统内,单个代理可以利用 MCP 访问外部能力。
## 项目结构
```
.
├── README.md
├── src/
│ ├── a2a_client/ # A2A Client 的代码 (Mesop UI, ADK 客户端逻辑)
│ │ ├── components/
│ │ ├── pages/
│ │ ├── service/
│ │ ├── state/
│ │ ├── styles/
│ │ ├── tests/
│ │ ├── utils/
│ │ └── main.py
│ ├── a2a_server/ # A2A Server 和远程代理的代码
│ │ ├── currency_convertor/ # 货币转换代理 (Langgraph)
│ │ │ ├── agent.py
│ │ │ ├── main.py
│ │ │ └── task_manager.py
│ │ └── deep_research/ # 深度研究代理 (Langgraph)
│ │ ├── components/
│ │ ├── agent.py
│ │ ├── main.py
│ │ └── task_manager.py
│ └── mcp_server/ # MCP Server 的代码
│ └── server.py
└── ... (其他潜在的文件/目录)
```
## 开始使用
### 先决条件
- Python 3.12 或更高版本
- Poetry(依赖管理)
### 安装
1. 克隆仓库
2. 安装依赖:
```bash
poetry install
```
3. 安装依赖后,创建一个 `.env` 文件并填写你的 API 密钥。
```env
LANGSMITH_API_KEY=lsv2_... # 可选,用于 LangSmith 跟踪
GOOGLE_API_KEY=...
TAVILY_API_KEY=...
```
- `GOOGLE_API_KEY`:用于 Gemini LLM 推理(Gemini 2.0 Flash Lite),必需。
- `TAVILY_API_KEY`:用于 Tavily 搜索工具,必需。
- `LANGSMITH_API_KEY`:(可选)用于启用 LangSmith/LangGraph 跟踪。
> **注意:** LangSmith 跟踪是可选的,但建议用于调试和可视化代理跟踪。
> **LLM 模型:** 本项目中的所有 LLM 推理使用 Google 的 gemini-2.0-flash-lite 模型。
> **令牌使用警告:** Deep Research 代理可能会对每个查询进行多次 LLM 调用(用于多步骤推理和反思)。请注意潜在的令牌使用和相关费用。
### 运行项目
1. 启动 Deep Research Agent:
```bash
poetry run python src/a2a_server/deep_research/main.py --port 10000
```
2. 启动 Currency Converter Agent(同时启动 MCP server):
```bash
poetry run python src/a2a_server/currency_convertor/main.py --port 10001
```
3. 启动 A2A Client:
```bash
poetry run python src/a2a_client/main.py
```
## 使用方法
一旦 A2A Client Mesop 应用程序运行,打开您的网页浏览器并导航到 Mesop 服务器提供的地址(通常是 `http://localhost:12000`)。
* 用户界面应显示可用的代理(Currency Convertor 和 Deep Research),这些代理是客户端通过其 AgentCards 发现的。
* 在 Mesop 应用提供的聊天界面中输入您的查询。
* A2A Client 将根据对查询的分析和代理的能力,将您的查询路由到适当的代理。
* 选定的远程代理的响应将显示在对话界面中。
尝试提出以下问题:
* "Convert USD to INR"(这应该由 Currency Convertor Agent 处理)
* "Tell me about the history of artificial intelligence."(这应该由 Deep Research Agent 处理)
* "What is the current exchange rate between JPY and CAD?"(另一个针对 Currency Convertor 的查询)
* "Summarize the key findings on the impact of climate change on polar bears."(另一个针对 Deep Research Agent 的查询)
观察 A2A Client 如何正确识别并利用专业的远程代理来满足不同类型的请求。
## 演示
以下是一些截图,展示了项目的用户界面和工作流程:
### 欢迎页面

### 添加新代理

### 可用代理

### 货币转换示例(MCP)运行中

[🔗 查看货币转换示例的 LangSmith Agent 跟踪](https://smith.langchain.com/public/eb8a00ad-731d-4ce5-a0a1-0af71e863154/r))
### 对话列表

### 问候示例

### 研究问题提交

### 研究澄清步骤

### 生成最终报告

[🔗 查看 LangSmith Agent 生成研究报告的追踪](https://smith.langchain.com/public/24380b0a-d779-41dc-8c88-b6f61da41b39/r)
### 深度研究 Langgraph 代理模式

---
要了解更多关于该仓库的信息,请使用: [](https://deepwiki.com/Kirushikesh/a2a-deep-research)
## 贡献
欢迎对该项目进行改进的贡献。请随时提交 Pull Request。
## 许可证
本项目根据 MIT 许可证进行授权,详细信息请参阅许可证文件。
## 致谢
- 谷歌的 A2A Framework
- 谷歌的 ADK
- LangGraph
- MCP Protocol Team
- [psykick-21/deep-research](https://github.com/psykick-21/deep-research) 提供的灵感和参考,用于 Deep Research agent 的实现
## 参考文献
- [Google A2A Framework 文档](https://github.com/google/A2A)
- [LangGraph 文档](https://langchain-ai.github.io/docs/langgraph/)
- [MCP 协议规范](https://modelcontextprotocol.io/introduction)
## 联系方式
如有任何疑问或建议,请在 GitHub 仓库中提交一个 issue。
---
<p align="center"><sub>使用 <a href="https://windsurf.com">Windsurf</a> ❤️ 制作。</sub></p>
连接信息
猜你喜欢
暂无推荐服务器