自定义协议绑定

A2A 协议自带三种标准绑定(JSON-RPC、gRPC 和 HTTP+JSON/REST),覆盖绝大多数部署场景。自定义协议绑定让实现者可以通过标准集合之外的传输机制暴露 A2A 操作。

自定义协议绑定与扩展 是互补但不同的概念:扩展通过在既有传输之上增加新的数据、方法或状态转换来改变交互的行为;自定义协议绑定改变的是传输层本身,例如通过 WebSocket 暴露 A2A 以实现低延迟的双向通信,或通过 MQTT 暴露 A2A 以适应连接受限的物联网环境。

在 Agent Card 中声明

自定义协议绑定在 Agent Card 的 supportedInterfaces 列表中声明。每个条目通过 URI 标识传输方式,并给出端点 URL 和所实现的 A2A 协议版本。protocolBinding 字段应是唯一标识该绑定的 URI(规范性要求和版本指引见协议规范中的自定义绑定标识部分)。

{
  "supportedInterfaces": [
    {
      "url": "wss://agent.example.com/a2a/websocket",
      "protocolBinding": "https://a2a-protocol.org/bindings/websocket",
      "protocolVersion": "1.0"
    }
  ]
}

支持多种绑定的智能体需要把它们全部列出。客户端按顺序解析 supportedInterfaces,并选择第一个自己支持的传输方式,因此条目应按偏好顺序排列。

要求

自定义协议绑定必须满足协议规范中"协议绑定要求与互操作性"一节的所有要求,尤其是:

  • 必须支持所有核心操作:绑定必须暴露抽象操作层中定义的每一个操作(发送消息、获取任务、取消任务、流式传输、推送通知等)。
  • 必须保持数据模型:所有数据结构必须在功能上等价于规范的 Protocol Buffer 定义。JSON 序列化必须使用 camelCase 字段名,时间戳必须是 UTC 的 ISO 8601 字符串。
  • 行为必须一致:语义等价的请求,无论使用哪种绑定,都必须产生语义等价的结果。

需要规范的关键领域

自定义绑定的规范必须涵盖以下各个方面。

数据类型映射

记录每种 Protocol Buffer 类型在自定义传输中的表示方式,包括:

  • 二进制数据编码(例如文本型传输使用 base64);
  • 枚举的表示方式(字符串、整数或命名常量);
  • 时间戳格式(按核心约定使用 UTC 的 ISO 8601 字符串)。

服务参数

服务参数是用于携带追踪标识、认证提示等横向通用上下文的键值对。绑定规范必须说明:

  • 携带服务参数所用的机制(例如自定义消息头、顶层 metadata 字段);
  • 键和值的字符编码或大小限制;
  • 绑定自身保留的名称。

对于缺乏原生头支持的传输,常见做法是把服务参数作为 JSON 对象嵌入专用的 metadata 字段,例如 a2a-service-parameters。

错误映射

绑定必须把所有 A2A 错误类型映射为传输原生的错误表示,同时保留其语义。需要提供一张与规范中"错误码映射"一节等价的映射表,说明每种 A2A 错误类型(如 TaskNotFoundError、UnsupportedOperationError)在自定义绑定的原生错误格式中如何表达。

流式传输

如果传输支持流式传输,需要记录:

  • 流机制(例如 WebSocket 帧、分块编码、长轮询);
  • 顺序保证(事件必须按生成顺序投递);
  • 连接中断时的重连行为;
  • 如何向客户端通知流的完成或终止。

如果传输不支持流式传输,要在 Agent Card 中明确说明这一限制,让客户端可以回退到轮询。

认证与授权

记录 Agent Card 中声明的认证凭据如何通过自定义传输传输;定义认证挑战如何传达给客户端,并确保自定义绑定不会无意中绕过智能体的主要安全控制。

互操作性测试

发布自定义绑定之前,请验证:

  • 对于相同的逻辑请求,所有操作的行为与标准绑定完全一致;
  • 错误情形、大型载荷和长时间运行的任务都得到正确处理;
  • 任何有意偏离标准绑定行为的地方都有清晰的文档说明;
  • 规范中包含示例请求和响应,帮助实现者理解。

治理

A2A 组织为自定义协议绑定的提议、开发、晋升与维护建立了正式的治理框架。官方绑定使用 https://a2a-protocol.org/bindings/ URI 前缀,托管在 a2aproject 组织下,仓库名带 cpb- 前缀(实验性绑定使用 experimental-cpb-)。A2A SDK 应当实现官方的自定义协议绑定。

URI 命名空间:https://a2a-protocol.org/bindings/ 前缀是 Agent Card 中使用的、全局唯一绑定标识符的规范命名空间。该前缀下的具体 URI,例如 https://a2a-protocol.org/bindings/{name}/v1,标识一个具体的绑定及其版本。这些 URI 只是标识符,并不要求能通过 HTTP 访问。

完整的治理流程,包括分级、生命周期、SDK 支持和法律要求,见扩展与协议绑定治理 。

来源:A2A 官方文档 · Custom Protocol Bindings