谷歌A2A代理示例
该存储库基于Google的A2A协议实现了一个简单的代理到代理(A2A)通信示例。A2A是谷歌提出的标准,使人工智能代理能够通过标准化的API相互通信。
概述
实施由两个主要部分组成:
- 服务器(
server.py):一个基于Flask的服务器充当AI代理。它实现了核心A2A协议端点:
- /.well-known/agent.json:提供代理的元数据(代理卡),描述其功能和URL。 - /tasks/send:接受其他代理(或类似客户)的任务 client.py),使用AI模型(OpenAI的GPT-4o-mini)和外部工具(通过MCP的Brave Search)处理它们,并返回结果。
- 客户(
client.py):一个简单的Python脚本,演示如何与A2A服务器交互:
- 通过获取代理卡来发现代理。 - 向代理发送任务(用户查询) /tasks/send 终点。 - 接收并打印代理的响应。
建筑
交互流程可以可视化如下:
sequenceDiagram
participant C as Client (client.py)
participant S as A2A Server (server.py)
participant MCP as Brave MCP Server
participant OAI as OpenAI API
C->>S: GET /.well-known/agent.json (Discover Agent)
S-->>C: Agent Card JSON
C->>S: POST /tasks/send (Task Request with User Query)
S->>OAI: Process Query (Initial processing)
Note right of S: Agent decides to use Brave Search
S->>MCP: Search Request
MCP-->>S: Search Results
S->>OAI: Process Query + Search Results
OAI-->>S: Final Response Text
S-->>C: Task Response (with Agent's Final Message)- 这 客户端 通过发现 A2A服务器.
- 这 客户端 向发送任务(例如,“什么是Google A2A?”) 服务器.
- 这 服务器 使用
pydantic-ai库,与以下内容协调:
- 这 OpenAI API 以理解请求并生成响应。 - A. Brave Search MCP服务器 (通过管理 MCPServerStdio)当需要网络搜索时。MCP(模型上下文协议)规范了AI模型如何与外部工具/数据源交互。
- 这 服务器 将最终响应发送回 客户端.
设置
- 克隆存储库:
git clone
cd - 创建并激活虚拟环境:
- 视窗:
python -m venv venv
.\venv\Scripts\activate- macOS/Linux:
python3 -m venv venv
source venv/bin/activate- 创建一个
.env文件:
创建一个名为的文件 .env 在根目录中,并添加您的API密钥:
OPENAI_API_KEY=your_openai_api_key
BRAVE_API_KEY=your_brave_api_key*(替换 your_openai_api_key 和 your_brave_api_key 使用您的实际钥匙)*
- 安装依赖项:
pip install -r requirements.txt- 运行服务器:
打开终端,激活虚拟环境,然后运行:
python server.py服务器将启动,通常在 http://localhost:5000.
- 运行客户端:
打开A *分开* 终端,激活虚拟环境,并运行:
python client.py客户端将发现服务器,发送预定义的问题,并打印代理的响应。
A2A协议详细信息
谷歌的A2A协议为代理通过HTTP进行通信定义了一种标准方式。关键概念包括:
- 代理卡(
/.well-known/agent.json):一个标准JSON文档,描述代理的身份、功能(例如流式支持)和API端点。 - 任务API(
/tasks/send,/tasks/receive等等):用于交换任务和消息的端点。此示例仅实现了基本功能/tasks/send. - 标准化消息格式:代理之间交换的消息的一致JSON结构,通常包括角色(
user,agent)以及内容部分。
如需更深入的信息,请参阅谷歌官方A2A协议文档(如果有链接)。
