Lazy loaded image
技术分享
🧠A2A协议深入介绍
Words 3064Read Time 8 min
2025-12-11
2025-12-11
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-bot
Agent 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
  1. Client初始化:创建A2AClient连接到翻译Server
  1. Agent发现:获取Agent Card,了解翻译Agent支持的语言对和功能
  1. 任务发送:Client发送翻译请求,Message包含源语言文本
  1. 任务处理:Agent处理翻译请求,更新任务状态
  1. 结果返回:Agent返回Task对象,Artifact包含翻译结果
  1. 流式更新(可选):使用SSE流式返回翻译进度和中间结果

总结

A2A协议通过标准化的Agent Card、Task、Message、Part和Artifact等数据结构,为Agent间的协作提供了完整的框架。Java开发者可以通过Spring Boot SDK快速实现A2A服务端,或使用纯Java客户端SDK与其他A2A Agent进行交互。协议的灵活Part设计支持多模态内容交换,流式传输能力支持长期任务,安全认证机制保障企业级应用需求。
 
上一篇
AgentNexus测试用例
下一篇
碎片化时代的认知重构:

Comments
Loading...