浅谈 A2A 协议——面向多智能体的开放通信标准

发布于:2025-08-11 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、背景

在 AI 应用的下一个阶段,单一智能体(Agent)的能力不再足够。现实中,我们需要多个由不同厂商、不同语言、不同框架构建的智能体协作,才能完成复杂业务。
Agent-to-Agent(A2A)协议正是为了解决这种异构智能体之间的互操作、协作和安全通信问题而生的。

A2A 协议是一个开放标准,旨在为独立、甚至彼此“黑箱”的 AI 智能体系统提供统一的语言和交互模型,让它们能够安全地发现彼此、交换信息、协同完成任务,而无需暴露内部实现。

二、A2A 协议的核心目标

  • 互操作性:让不同厂商、不同技术栈的 Agent 无障碍通信。
  • 协作能力:支持任务委派、上下文交换、联合处理复杂需求。
  • 动态发现:支持自动发现其他 Agent 及其能力。
  • 多模式交互:支持文本、文件、结构化数据、流式更新(SSE)等多种模式。
  • 安全通信:对接企业级安全标准(HTTPS、TLS、OAuth 等)。
  • 异步优先:原生支持长任务、流式输出及人类介入场景。

三、关键概念

A2A(Agent-to-Agent)协议围绕一组核心实体和交互模式展开,这些概念共同构成了一个标准化的多智能体通信与协作模型

1. A2A Client

A2A Client 是协议的调用方,通常是:

  • 用户直接控制的应用(如前端页面、CLI 工具)
  • 另一个智能体(Agent)充当客户端角色

特点

  • 发起所有与远程 Agent(A2A Server)的通信
  • 负责会话管理、任务状态跟踪
  • 可能在一个任务中充当 多重角色(既是消费者,也可能作为中间代理)

实际意义

  • 在跨 Agent 协作中,一个 Agent 可以是某个会话的 Client,同时在另一会话中充当 Server。
  • 有利于构建 双向协作多跳任务分发 场景。

2. A2A Server(Remote Agent)

A2A Server 是实现了协议规范的远程服务端 Agent,提供 API 接口用于任务处理。

特点

  • 通过 HTTP(S) 暴露接口
  • 在 AgentCard 中声明支持的传输协议、功能和安全要求
  • 完全隐藏内部实现(Opaque Execution)

实际意义

  • 使不同厂商的 Agent 能像“黑盒”一样接入,只需要遵守 A2A 的交互规范即可。
  • 对于企业而言,可以安全地将内部 AI 服务暴露给外部合作方而不泄露内部逻辑。

3. Agent Card

Agent Card 是一个 JSON 格式的元数据清单,是 Client 发现和理解 Server 的入口

主要字段

  • 基本信息:名称、描述、版本、提供方(organization、URL)

  • 通信接口

    • url(主 URL)与 preferredTransport(优先传输协议)
    • additionalInterfaces(额外的 URL/协议组合)
  • 能力声明(capabilities):

    • streaming:是否支持 SSE 流式更新
    • pushNotifications:是否支持异步推送
    • stateTransitionHistory:是否保存任务状态历史
  • 安全声明(securitySchemes / security):认证方式和授权策略

  • 技能列表(skills):该 Agent 可执行的具体功能

  • 默认 I/O 类型:默认的输入、输出 MIME 类型

实际意义

  • 类似于服务发现与接口契约的结合版

  • Client 在调用前即可明确:

    • 能做什么(技能)
    • 怎么做(传输协议)
    • 怎么连(URL)
    • 需要什么认证

4. Task

Task 是 A2A 中的核心工作单元,代表一个有状态的任务实例。一个 Task 代表一次完整的有状态交互。

属性

  • id:唯一标识符
  • contextId:上下文分组 ID(每个 Task 的 contextId 表示它属于哪个 Context)
  • status:当前状态(TaskState)
  • history:消息历史记录
  • artifacts:任务产物(输出文件、结构化数据等)

生命周期(TaskState)

  • submittedworkingcompleted
  • 可进入 input-required(等待用户输入)
  • 异常状态:failed / rejected / canceled
  • 特殊状态:auth-required(需额外认证)

实际意义

  • 提供长生命周期的任务管理机制

  • 适合处理:

    • 需要人机交互的任务(input-required)
    • 跨系统、多步的协作流程

5. Message

Message 是一次通信轮次的内容载体,用于任务创建、继续对话或状态更新。

组成

  • roleuseragent
  • parts:内容片段数组(Part)
  • metadata:扩展元信息
  • messageId:唯一消息 ID
  • taskId / contextId:与任务、上下文关联

作用

  • 传递指令(Prompt)
  • 返回结果或状态说明
  • 携带中间步骤信息

6. Part

Part 是 Message 或 Artifact 的最小内容单元。

类型

  • TextPart:纯文本
  • FilePart:文件(可内嵌 Base64 数据或 URI 引用)
  • DataPart:结构化 JSON 数据

实际意义

  • 多模态数据传输的基础
  • 允许一个消息同时包含文本描述、文件附件和机器可读参数

7. Artifact

任务执行产生的最终成果,由一个或多个 Part 组成。例如:生成的报告 PDF、图片、表格数据等。

特点

  • 可分块流式传输(append / lastChunk)
  • 支持元数据和扩展信息

8. Context

contextId 用于逻辑上关联多个任务,一个 Context 可以包含多个 Task。例如,一个“客户开通业务”流程可能包含:

  • 填写表单任务
  • 验证身份任务
  • 发放账号任务

它们共享一个 contextId,方便跟踪整个流程。

9. Push Notification

一种异步任务进度推送机制。Client 预先提供 Webhook URL(tasks/pushNotificationConfig/set),Server 在任务状态变更时主动调用。

意义

  • 避免客户端频繁轮询
  • 适合长任务和断连恢复

10. Streaming (SSE)

基于 Server-Sent Events 的实时推送方式,用于在任务执行中持续传输状态更新和产物。

优点

  • 实时性强
  • 易于在浏览器端实现(原生 EventSource 支持)

在这里插入图片描述

四、传输与格式

A2A 定义了三种核心传输协议,必须至少支持一种

协议类型 特点
JSON-RPC 2.0 轻量、结构化、易调试
gRPC 高性能、二进制、支持流式
HTTP+JSON/REST RESTful 风格、易集成

Streaming(流式传输):通过 SSE(Server-Sent Events)实现实时更新,支持状态变更和 Artifact 增量推送。

方法映射规则
A2A 要求在多传输协议下保持功能等价,例如:

  • JSON-RPC message/send
  • gRPC SendMessage
  • REST POST /v1/message:send

五、安全与认证

A2A 依托 HTTP 层安全机制 实现认证与授权:

  1. 传输安全:生产环境必须使用 HTTPS(TLS 1.3+ 推荐)。

  2. 身份认证

    • 在 AgentCard 中声明所需认证方式(如 Bearer Token、Basic Auth、API Key)。
    • 客户端通过 HTTP Header 传递凭证。
  3. 二次认证:任务执行过程中如需访问外部系统,可进入 auth-required 状态,请求二次凭证。

  4. 授权:基于用户身份、技能权限、OAuth Scopes 等控制访问范围。

六、任务生命周期

TaskState 枚举定义了任务可能的状态:

  • submitted:已提交,等待执行
  • working:执行中
  • input-required:等待用户输入
  • completed:完成
  • failed / canceled / rejected
  • auth-required:等待认证

长任务可通过 Polling(tasks/get)Streaming(message/stream)Push Notification 获取进度。

七、常用方法

方法 场景 传输映射
message/send 发起或继续任务 JSON-RPC message/send / REST POST /v1/message:send
message/stream 发起任务并订阅流式更新 JSON-RPC message/stream / REST POST /v1/message:stream
tasks/get 查询任务状态 JSON-RPC tasks/get / REST GET /v1/tasks/{id}
tasks/cancel 取消任务 JSON-RPC tasks/cancel / REST POST /v1/tasks/{id}:cancel
tasks/pushNotificationConfig/* 管理推送配置 多个子方法
agent/getAuthenticatedExtendedCard 获取认证后的完整 AgentCard 各传输均支持

八、典型交互模式

1. 同步 / 轮询

  • 客户端 message/send
  • 服务端快速返回结果,或返回 working 状态
  • 客户端轮询 tasks/get 获取最终结果

2. 流式(SSE)

  • 客户端 message/stream
  • 服务端实时推送 TaskStatusUpdateEvent / TaskArtifactUpdateEvent

3. 推送通知

  • 客户端预先配置 Webhook(tasks/pushNotificationConfig/set
  • 服务端在任务更新时主动调用该 Webhook

九、错误处理

  • 继承 JSON-RPC 标准错误码(-32700 ~ -32603)

  • 定义 A2A 专属错误码(-32000 ~ -32099)

    • TaskNotFoundErrorPushNotificationNotSupportedErrorContentTypeNotSupportedError

错误响应统一包含:

{
  "code": -32001,
  "message": "Task not found",
  "data": {}
}

十、总结与展望

A2A 协议提供了一个 统一、可扩展、安全 的智能体通信基础设施,让异构、多厂商、多领域的 AI Agent 能够协同工作。
随着多智能体生态的发展,A2A 的地位会越来越重要,特别是在:

  • 跨企业协作(B2B Agent API)
  • 企业内部异构 AI 系统整合
  • 长流程、需人机协同的 AI 任务编排

未来,A2A 还可能扩展对 实时多模态数据交换Agent 市场注册发现隐私保护计算 的支持。


网站公告

今日签到

点亮在社区的每一天
去签到