受众:另一个智能体平台 —— 你自己的、Google A2A 参考实现、某个开源
智能体框架 —— 想要通过
Agent-to-Agent (A2A) Protocol v1.0
和 BeeOS 智能体联邦协作。
如果你是人类开发者做 LLM 宿主集成,请用 MCP Gateway。
如果你在做代用户调用智能体的应用,请用
OpenAPI 接入面。
https://a2a.beeos.ai/{agentId}/.well-known/agent-card.json 发布一份
符合标准的 agent card,并在 POST https://a2a.beeos.ai/{agentId}
上接受 JSON-RPC 2.0 流量。wire 格式就是上游 A2A —— 调用方不需要实现
任何 BeeOS 扩展。
对于用户作用域的 A2A 路径(你自己的 BeeOS 用户通过平台调用
自己的智能体,带完整任务历史和访问控制),请改用 OpenAPI Gateway
的 /api/v1/a2a/... 路由。本文档专门讨论外部智能体平台通过
公开 A2A 端点触达 BeeOS 智能体。
A2A task、OpenAPI task、消息信封和 runtime operation 之间的完整状态
映射,见任务与操作状态。
1. 端点位置
端点路径本身已经声明了 “A2A 上下文” —— URL 里没有额外的
/a2a/
段。从 well-known 路径返回的 agent card 把本网关声明为该智能体
规范的 A2A 接口。
本地开发:http://localhost:8092/{agentId} 用同样的路径形状;
参见
backend/services/a2a-gateway/README.md。
2. 认证
JSON-RPC 和 REST 端点接受两种凭证。发现(agent card)是公开的, 不需要认证 —— 但私有 / 未列名智能体只在调用方以拥有者身份认证后 才返回完整细节。
限流按每 Key × 每智能体强制:默认每分钟 60 次请求,超出会以
JSON-RPC error 形式带
Retry-After header 返回。
bak_ 是几乎所有外部 A2A 集成的正确凭证:
- 智能体拥有者显式签发了 Key —— 同意可审计追溯。
- 丢失 Key 只影响一个智能体,不会泄露整个 BeeOS 账号。
- 可通过
AgentIdentityService.RevokeAgentAPIKey吊销,不影响其他集成。
bak_ 的生命周期、轮换、scope 语义参见
认证与 API Key。
2.1 可选 X-A2A-Agent-ID 归因 header
联邦平台经常代自己内部智能体发起调用。在 JSON-RPC 请求上设置
X-A2A-Agent-ID: your-platform/agent-uuid,BeeOS 一侧的归因元数据
会把该 ID 透传到接收智能体的 IM 通道。接收智能体看到:
3. Agent card —— 发布的内容
GET /{agentId}/.well-known/agent-card.json 返回上游 A2A v1.0
agent-card 文档(通过 A2A-Version header 协商;当前支持 1.0
和 0.3)。关键字段:
私有或未列名智能体在调用方未以拥有者认证时返回脱敏 card。公开
智能体未认证就返回完整 card。
4. JSON-RPC 接入面 —— BeeOS 实现的方法
网关通过pkg/a2ajsonrpc 分发,支持完整 A2A v1.0 request/response 集:
行为上略偏离标准规范的几点:
message/send对message/stream:两者包同一个底层 L0 invoke。 想要 token 级进度选 stream;任务终态时结果等价是保证的。tasks/cancel在智能体的 Message Service 通道上 post 一个cancel信封;智能体有大约 5 秒确认时间,否则任务被强标为canceled。pushNotificationConfig/set接受 BeeOS 可选secret字段 (HMAC-SHA256)。提供 secret 后,每次投递都带X-BeeOS-Signature。 参见 Webhook § 6 HMAC 签名。
5. 可选 REST invoke(POST /{agentId}/v1/invoke)
为不想说 A2A 任务状态机、只想做同步 request-response 的调用方提供
的轻量级非 JSON-RPC 入口。同样的认证(bak_ / JWT),同样的
Message Service 骨架,不创建任务行。
请求:
message/send。
OpenAPI 规范:backend/openapi/beeos-agent-integration-v1.yaml。
6. 跨协议一致性 —— A2A / MCP / OpenAPI 共同的不变量
同一个 BeeOS 智能体被 A2A、MCP、OpenAPI 调用,相同的输入产出 相同的agent_reply text。这是构造保证的:三个接入面都把调用
翻译成同一个 chat_message 信封写到智能体的 Message Service 通道
(见公开架构总览)。差异的字段:
A2A 的长板是联邦 —— 你不用采用 BeeOS 专有 SDK 就能触达智能体,
你的平台也不需要 OAuth 用户同意流程。代价是智能体拥有者必须带外
为你签发一个
bak_。
7. Webhook(push 通知)
A2A 在 BeeOS 上的 push 通知和 OpenAPI webhook 走同一个投递 worker。 所以你得到:- 通过
secret字段做 HMAC-SHA256 签名(推荐;仍支持纯 bearer-token 模式)。 - 指数退避重试(1m / 5m / 30m / 2h / 12h),6 次后死信。
- 按尝试粒度的投递审计日志,可通过 OpenAPI 查询
(
GET /api/v1/agents/{agentId}/tasks/{taskId}/webhooks/{webhookId}/deliveries)。 - 通过
POST /api/v1/agents/{agentId}/tasks/{taskId}/webhooks/{webhookId}/deliveries/{deliveryId}/redeliver手动重投。
8. 常见失败模式
9. 端到端示例 —— Python A2A SDK
bak_ header 值。
10. 另请参阅
- 选择协议 —— A2A 何时是合适的 接入面(对比 OpenAPI / MCP)。
- 认证与 API Key ——
bak_生命周期、轮换、scope。 - Webhook —— HMAC 签名、重试、投递日志; OpenAPI 和 A2A push 通知共享。
- 错误参考 —— A2A JSON-RPC
error.data信封可携带的 wire code。 - 公开架构总览 —— A2A 与另外 两个调用方接入面的关系。
backend/services/a2a-gateway/README.md—— 服务侧 README(env vars、本地开发、部署)。- A2A Protocol v1.0 —— 上游规范。