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-LDHTTP/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 协议的通信机制,以下通过一个简单的示例展示用户、客户端智能体和服务端智能体之间的完整交互流程。 假设用户希望通过智能体查询天气信息,客户端智能体负责生成请求并将任务发送给服务端智能体,后者执行任务并返回结果。

用户 客户端智能体(Client Agent) 服务端智能体(Server Agent) 1️⃣ 用户授权 & 输入查询请求(城市:北京) 2️⃣ 读取 AgentCard,验证可用性 3️⃣ 返回 AgentCard(能力描述) 4️⃣ 发送 Task 请求(查询天气) 5️⃣ 返回 Artifact(天气结果) 6️⃣ 呈现最终结果(晴 25°C) 用户 客户端智能体(Client Agent) 服务端智能体(Server Agent)

以下展示了用户,客户端智能体,服务端智能体三者之间在查询天气信息功能中交换的完整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"
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐