自定义协议绑定
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 应当实现官方的自定义协议绑定。
https://a2a-protocol.org/bindings/ 前缀是 Agent Card 中使用的、全局唯一绑定标识符的规范命名空间。该前缀下的具体 URI,例如 https://a2a-protocol.org/bindings/{name}/v1,标识一个具体的绑定及其版本。这些 URI 只是标识符,并不要求能通过 HTTP 访问。完整的治理流程,包括分级、生命周期、SDK 支持和法律要求,见扩展与协议绑定治理 。