status
Published
type
Post
date
Dec 11, 2025
slug
A2A
summary
谷歌开源的A2A协议,也是新作品AgentNexus全面对标且深度优化的目标
tags
文字
category
技术分享
icon
password
前言:
A2A(Agent-to-Agent)协议是由Google开源的首个标准智能体交互协议,旨在让不同框架和供应商构建的AI智能体能够相互协作、安全地交换信息并协调行动。它基于现有标准(如HTTP、SSE、JSON-RPC)构建,易于与现有IT系统集成。ai-bot
一、A2A协议的核心特性与设计原则
主要功能特性
A2A协议支持多种关键能力:
促进智能体协作:支持不同框架和供应商构建的AI智能体之间进行无缝协作。与直接调用API不同,A2A实现了更像"团队成员对话"的交互方式。ailemon
多模态通信:支持文本、音频、视频、网页表单、JSON数据等多种交互形式,满足复杂的多媒体内容交换需求。ai-bot
任务生命周期管理:定义了"任务"(Task)对象,具有完整的生命周期(如submitted、working、input-required、completed、failed、canceled),并提供实时反馈和状态更新。ai-bot
安全性和认证:集成OAuth 2.0、TLS加密、细粒度权限控制等机制,保障企业级数据安全。ailemon
长期任务支持:支持从快速任务到可能需要数小时甚至数天的深度研究任务,提供实时反馈。ai-bot
设计原则
发挥代理能力、基于现有标准、默认安全、支持长期任务和模态无关是协议的五大核心设计原则。ai-bot
二、A2A协议的核心数据结构
1. Agent Card(智能体名片)
Agent Card是一个JSON格式的文件,用于描述Agent的能力和特性。客户端通过访问
/.well-known/agent.json获取Agent Card,以发现和选择合适的智能体。ai-botAgent Card的核心字段:developers.googleblog
2. Task(任务)
Task是A2A协议中的核心概念,代表客户端与远程Agent的协作单元。developers.googleblog
Task结构:
TaskSendParams(创建/继续任务的参数):developers.googleblog
3. Message(消息)
Message是A2A协议中的基本通信单元,用于传递非工件内容,包括用户输入、Agent思考过程、状态更新、指令等。developers.googleblog
Message结构:developers.googleblog
4. Part(片段)
Part是Message或Artifact中的原子内容单元,允许在单个消息中组合不同类型的数据。developers.googleblog
Part类型定义:developer.volcengine+1
TextPart(文本片段):
FilePart(文件片段):
DataPart(数据片段):
其他Part类型:
- JsonPart:用于JSON数据传输
- FormPart:用于表单呈现和提交
- IFramePart:用于嵌入网页内容
- VideoPart:用于视频流
- AudioPart:用于音频流
- ActionPart:用于定义可执行的操作
5. Artifact(工件)
Artifact代表Agent生成的任务执行结果,通常在任务完成时返回给客户端。developers.googleblog
Artifact结构:developers.googleblog
Artifact可以包含文档、图表、图像、结构化数据等,并支持流式增量传输。developers.googleblog
6. JSON-RPC 2.0结构
A2A协议基于JSON-RPC 2.0标准构建。cnblogs
JSON-RPC Request:
JSON-RPC Response:
三、Java接入A2A协议
1. Java官方SDK架构
Google提供的A2A Java示例采用Maven多模块架构:ailemon
2. Server端实现(Spring Boot)
核心组件:ailemon
A2AServer:管理Agent行为的主服务器类
A2AController:实现A2A协议端点的REST控制器
TaskHandler:任务处理接口
A2AServerConfiguration:服务配置
主要端点:
端点 | 方法 | 说明 |
/.well-known/agent-card | GET | 获取Agent Card(智能体发现) |
/a2a | POST | A2A协议端点(同步请求-响应) |
/a2a/stream | POST | 流式端点(Server-Sent Events) |
Server启动示例:ailemon
3. Client端实现
核心类:ailemon
A2AClient:主客户端类,处理所有A2A操作
StreamingEventListener:流式事件监听器接口
A2AClientException:A2A特定异常
主要方法:
方法 | 说明 |
getAgentCard() | 获取Agent Card |
sendTask(TaskSendParams) | 发送同步任务 |
sendTaskSubscribe(TaskSendParams) | 发送任务并流式订阅更新 |
getTask(TaskQueryParams) | 查询任务状态 |
cancelTask(CancelTaskParams) | 取消任务 |
Client使用示例:ailemon
4. 流式响应处理
流式任务示例:ailemon
四、Agent接收和发送的数据详解
1. Agent接收的数据
Agent通过接收Message来获取来自客户端的请求:
接收Message结构示例:ailemon
Message内可能包含的Part类型:
- TextPart:纯文本指令或输入
- FilePart:文件输入(如图像、文档,可通过URI或Base64编码)
- DataPart:结构化JSON数据(如表单参数、配置信息)
2. Agent发送的数据
Agent通过响应Task对象和返回Artifact来发送结果:
响应Task示例:ailemon
Artifact中常见的Part类型:
- TextPart:生成的文本内容
- FilePart:生成的文件(文档、图表、图像等)
- DataPart:结构化结果数据(表格、JSON等)
3. 核心API方法数据流
方法 | 输入参数 | 返回数据 |
tasks/send | TaskSendParams(包含Message) | Task对象 |
tasks/get | TaskQueryParams(任务ID) | Task对象(含status、history、artifacts) |
tasks/cancel | CancelTaskParams(任务ID) | Task对象(state="canceled") |
tasks/sendSubscribe | TaskSendParams | 流式事件(TaskStatusUpdateEvent、TaskArtifactUpdateEvent) |
4. 多模态数据交换示例
A2A支持在单个消息中组合多种类型的Part:
五、实际应用示例流程
以翻译Agent为例的完整交互流程:ailemon
- Client初始化:创建A2AClient连接到翻译Server
- Agent发现:获取Agent Card,了解翻译Agent支持的语言对和功能
- 任务发送:Client发送翻译请求,Message包含源语言文本
- 任务处理:Agent处理翻译请求,更新任务状态
- 结果返回:Agent返回Task对象,Artifact包含翻译结果
- 流式更新(可选):使用SSE流式返回翻译进度和中间结果
总结
A2A协议通过标准化的Agent Card、Task、Message、Part和Artifact等数据结构,为Agent间的协作提供了完整的框架。Java开发者可以通过Spring Boot SDK快速实现A2A服务端,或使用纯Java客户端SDK与其他A2A Agent进行交互。协议的灵活Part设计支持多模态内容交换,流式传输能力支持长期任务,安全认证机制保障企业级应用需求。
- Author:DreamEutopia
- URL:https://tangly1024.com/article/A2A
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!