深入理解A2A协议
在客户端智能体与服务端智能体的交互过程中,A2A协议定义了若干关键实体,用于描述任务的能力、数据、消息与结果。—— 一个开放、标准化的通信协议,致力于让各类AI代理能够跨框架、跨平台、跨供应商地安全发现、协作、交换信息与分工执行任务,从而推动多代理系统在企业级应用中的规模化与互操作性。在A2A体系中,一个智能体既可以充当客户端发起任务,也可以作为服务端执行任务,具备灵活的双重身份,这为复杂系统中的
1 引言
在人工智能技术不断迈入“代理化”时代的背景下,各类AI代理越来越多地被部署用于处理复杂任务。然而,这些代理往往来自不同的厂商、运行于不同的框架或平台,它们之间的协作常常因接口、协议、认证机制等不统一而变得脆弱或成本高昂。为此,谷歌提出了A2A (Agent2Agent)协议 —— 一个开放、标准化的通信协议,致力于让各类AI代理能够跨框架、跨平台、跨供应商地安全发现、协作、交换信息与分工执行任务,从而推动多代理系统在企业级应用中的规模化与互操作性。
2 A2A协议功能
A2A核心目标是让不同来源、不同类型的智能代理能够以统一的标准进行安全、高效、可扩展的交互与协作。A2A不仅仅是一套通信规范,更是一个帮助AI代理实现“互操作性”的生态协议标准。通过该协议,开发者可以使多代理系统实现自动发现、互相验证、任务委派、信息共享以及安全通信,从而构建出真正“多智能体协同”的智能网络。该协议的主要功能包括以下几个方面:
- Agent发现与注册: 提供标准化的注册与发现机制,使代理能够在网络中识别并发现其他兼容的代理,从而建立可信的通信连接。这一过程支持分布式目录服务与元数据共享。
- 身份与认证管理: 为保证通信的安全与可信,该协议定义了代理身份标识与基于密钥或令牌的身份验证机制。 它确保只有经过授权的代理才能参与交互,防止伪造和滥用。
- 安全通信与数据交换: 使用端到端加密、签名校验以及数据完整性校验机制,保证代理间通信的机密性与可靠性。 该协议支持多种加密算法,并提供对敏感任务的访问控制。
- 任务委派与协作执行: 该协议定义了任务描述与结果反馈的标准接口,允许代理之间安全地委派、协同或分工执行任务,从而实现多代理协作。
- 事件通知与状态同步: 通过标准的事件广播与订阅机制,该协议支持代理间实时同步任务状态、执行进度与上下文信息,使得多代理系统保持一致性。
- 可扩展插件机制: 提供灵活的扩展接口,允许开发者定义自定义的消息类型、协议扩展模块或服务插件,以适应不同业务场景和系统架构。
3 A2A协议机制
以下为 A2A 协议的架构、核心角色、消息格式、认证机制与通信流程的系统性总结。
3.1 架构与角色
在 A2A 协议体系中,整个通信过程围绕三类核心参与者展开:用户、客户端智能体和服务端智能体。三者相互配合,共同完成任务的认证、发起、执行与结果返回等全过程。用户是信任与授权的源头,客户端智能体负责发起任务请求,而服务端智能体则承担任务执行与结果反馈的工作。通过这样的分层设计,A2A 实现了安全、灵活且可扩展的多智能体交互模式。
- 用户(User):系统中的信任与安全控制中心,负责身份验证与权限授予,确保通信的合法性与安全性。 用户可以授权客户端代理访问特定资源,控制任务与数据的访问范围和维护代理间交互的信任基础。
- 客户端智能体(Client Agent):任务的发起者,代表用户提出需求或请求,负责构建任务、调用接口,并处理返回的结果。客户端智能体生成任务请求,向服务端代理发送指令以及整理、分析并反馈任务执行结果。
- 服务端智能体(Server Agent):任务的执行者,接收来自客户端的请求,完成相应操作并返回执行结果。 服务端智能体可以声明自身功能与能力,接收并处理任务以及生成并返回任务产出或结果。
在A2A体系中,一个智能体既可以充当客户端发起任务,也可以作为服务端执行任务,具备灵活的双重身份,这为复杂系统中的多代理协作提供了强大的扩展性与适应性。
3.2 消息格式与协议细节
- A2A协议基于JSON-LD与HTTP/HTTPS传输标准,实现结构化、语义化的消息表达。
- 核心消息类型包括:
request(请求)、response(响应)、event(事件)、ack(确认)。 - A2A采用可扩展的Schema(通常基于JSON Schema或OpenAPI定义),以保证消息在不同系统间的兼容性。
- 每条消息均带有唯一的
message_id、时间戳、签名字段,用于溯源与完整性校验。
{
"message_id": "a2a-req-00001",
"type": "request",
"from": "agent://alpha",
"to": "agent://beta",
"action": "query_status",
"payload": { "task_id": "T12345" },
"timestamp": "2025-10-30T12:00:00Z",
"signature": "..."
}
3.3 协议的核心实体
在客户端智能体与服务端智能体的交互过程中,A2A协议定义了若干关键实体,用于描述任务的能力、数据、消息与结果。这些实体共同构成了协议运行的核心基础,确保智能体之间的通信具有清晰的结构与标准化的语义。
- AgentCard(智能体名片): 是服务端智能体的“身份说明书”,用于展示其能力、接口信息及认证方式。客户端智能体通过读取AgentCard,可以了解目标智能体支持的任务类型、调用方式及安全策略,从而选择合适的服务端执行任务。
interface AgentCard {
name: string;
description: string;
url: string;
provider?: {
organization: string;
url: string;
};
version: string;
documentationUrl?: string;
capabilities: {
streaming?: boolean;
pushNotifications?: boolean;
stateTransitionHistory?: boolean;
};
authentication: {
schemes: string[];
credentials?: string;
};
defaultInputModes: string[];
defaultOutputModes: string[];
skills: {
id: string;
name: string;
description: string;
tags: string[];
examples?: string[];
inputModes?: string[];
outputModes?: string[];
}[];
}
- Task(任务定义): A2A协议中任务交互的核心单元,代表一次完整的任务请求。客户端生成 Task 并提交给服务端,服务端负责执行并返回结果。每个Task通常包含任务类型、输入参数、上下文信息和状态标识,用于描述任务的生命周期。
interface Task {
id: string;
sessionId: string;
status: TaskStatus;
history?: Message[];
artifacts?: Artifact[];
metadata?: Record<string, any>;
}
interface TaskStatus {
state: TaskState;
message?: Message;
timestamp?: string;
}
interface TaskStatusUpdateEvent {
id: string;
status: TaskStatus;
final: boolean; //indicates the end of the event stream
metadata?: Record<string, any>;
}
interface TaskArtifactUpdateEvent {
id: string;
artifact: Artifact;
metadata?: Record<string, any>;
}
interface TaskSendParams {
id: string;
sessionId?: string;
message: Message;
historyLength?: number;
pushNotification?: PushNotificationConfig;
metadata?: Record<string, any>; // extension metadata
}
type TaskState =
| "submitted"
| "working"
| "input-required"
| "completed"
| "canceled"
| "failed"
| "unknown";
- Artifact(任务产物): 任务执行的结果载体,代表服务端智能体完成任务后生成的输出内容。它可以是文本、结构化数据、图像、文件等多种形式,通常被用作任务成果的最终表达或后续任务的输入。
interface Artifact {
name?: string;
description?: string;
parts: Part[];
metadata?: Record<string, any>;
index: number;
append?: boolean;
lastChunk?: boolean;
}
- Message(消息载体): 智能体之间进行通信的基本单元,用于封装请求、响应、事件等数据。A2A协议采用统一的消息格式,包含消息类型、来源、目标、时间戳及签名等字段,以确保通信的完整性与安全性。
interface Message {
role: "user" | "agent";
parts: Part[];
metadata?: Record<string, any>;
}
- Part(消息片段): 消息的组成部分,用于分片传输或模块化表达复杂内容。当消息体较大或任务数据需要分段处理时,Part 可将数据拆解为多个部分,支持高效传输与并行解析,提升通信灵活性。
interface TextPart {
type: "text";
text: string;
}
interface FilePart {
type: "file";
file: {
name?: string;
mimeType?: string;
// oneof {
bytes?: string; //base64 encoded content
uri?: string;
//}
};
}
interface DataPart {
type: "data";
data: Record<string, any>;
}
type Part = (TextPart | FilePart | DataPart) & {
metadata: Record<string, any>;
};
以上实体共同构建了A2A协议的语义基础,使智能体之间的任务请求、执行与结果传递具备清晰的结构与可扩展的逻辑。
4 调用示例
为了更清晰地理解 A2A 协议的通信机制,以下通过一个简单的示例展示用户、客户端智能体和服务端智能体之间的完整交互流程。 假设用户希望通过智能体查询天气信息,客户端智能体负责生成请求并将任务发送给服务端智能体,后者执行任务并返回结果。
以下展示了用户,客户端智能体,服务端智能体三者之间在查询天气信息功能中交换的完整JSON消息过程。
1️⃣ 用户授权与请求输入: 通过界面或接口向客户端智能体发出查询请求。
{
"user_id": "user_001",
"intent": "query_weather",
"location": "北京",
"auth_token": "user-token-abc123"
}
2️⃣ 获取Server Agent的AgentCard: 客户端向服务端发送请求,获取其能力说明。
{
"type": "request",
"id": "msg-001",
"from": "agent://client-weather",
"to": "agent://server-weather",
"action": "get_agent_card"
}
3️⃣ Server Agent返回自身的AgentCard。
{
"type": "response",
"id": "msg-001",
"from": "agent://server-weather",
"to": "agent://client-weather",
"data": {
"agent_id": "agent://server-weather",
"name": "Weather Service Agent",
"capabilities": ["query_weather", "forecast"],
"auth_type": "OAuth2",
"endpoint": "https://api.weather-agent.com/a2a"
}
}
4️⃣ Client Agent发送Task: 客户端根据用户输入与AgentCard能力,生成并发送Task。
{
"type": "request",
"id": "task-001",
"from": "agent://client-weather",
"to": "agent://server-weather",
"action": "query_weather",
"payload": {
"city": "北京"
},
"context": {
"auth_token": "user-token-abc123"
}
}
5️⃣ Server Agent执行任务并返回结果: 服务端智能体调用天气接口,获取结果后以Artifact的形式返回。
{
"type": "response",
"id": "task-001",
"from": "agent://server-weather",
"to": "agent://client-weather",
"artifact": {
"type": "text",
"content": "当前北京天气:晴,气温25°C,湿度42%。"
},
"status": "completed",
"timestamp": "2025-10-30T12:05:00Z"
}
6️⃣ Client Agent展示结果: 客户端将结果解析后返回给用户界面:
{
"user_id": "user_001",
"task_id": "task-001",
"result": "北京当前天气:晴,25°C"
}
更多推荐

所有评论(0)