使用说明
谷歌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 <repository_url> cd <repository_directory> -
创建并激活虚拟环境:
- 视窗:
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协议文档(如果有链接)。
