A2A 协议合约
A2A 协议合同定义了在 Amazon Bedrock Runtime 中实现代理间通信的要求。 AgentCore 本合同规定了您的 A2A 服务器必须实现的技术要求、端点和通信模式。
有关示例代码,请参阅在运行时部署 A2A 服务器。 AgentCore
协议实施要求
您的 A2A 服务器必须实现以下特定的协议要求:
-
传输:通过 HTTP 进行 JSON-RPC 2.0
-支持标准化的代理与代理通信 -
会话管理:平台自动添加
X-Amzn-Bedrock-AgentCore-Runtime-Session-Id标头以进行会话隔离 -
代理发现:必须在
/.well-known/agent-card.json端点提供代理卡
容器要求
您的 A2A 服务器必须部署为符合以下规格的容器化应用程序:
-
主机:
0.0.0.0 -
端口:
9000-用于 A2A 服务器通信的标准端口(不同于 HTTP 和 MCP 协议) -
平台:ARM64 容器-需要与 AWS 亚马逊 Bedrock AgentCore 运行时环境兼容
路径要求
/-帖子
用途
接收 JSON-RPC 2.0 消息并通过代理的功能处理它们,使用 A2A 协议消息完成 InvokeAgentRuntimeAPI 有效负载的直通
使用案例
根端点有几个关键用途:
-
Agent-to-agent 沟通与协作
-
Multi-step 代理工作流程和任务委托
-
Real-time 代理之间的对话经历
-
工具调用和功能共享
请求格式
A2A 服务器期望请求格式为 JSON-RPC 2.0:
Content-Type: application/json { "jsonrpc": "2.0", "id": "req-001", "method": "message/send", "params": { "message": { "role": "user", "parts": [ { "kind": "text", "text": "Your message content here" } ], "messageId": "unique-message-id" } } }
响应格式
A2A 服务器以 JSON-RPC 2.0 格式的响应进行响应,其中包含任务和工件:
Content-Type: application/json { "jsonrpc": "2.0", "id": "req-001", "result": { "artifacts": [ { "artifactId": "unique-artifact-id", "name": "agent_response", "parts": [ { "kind": "text", "text": "Agent response content" } ] } ] } }
/.well---card.json-known/agent GET
用途
提供代理卡元数据,用于代理发现和能力通告
使用案例
Agent Card 端点有几个关键用途:
-
多代理系统中的代理发现
-
能力和技能广告
-
身份验证要求规范
-
服务端点配置
响应格式
返回描述代理身份和功能的 JSON 元数据:
Content-Type: application/json { "name": "Agent Name", "description": "Agent description and purpose", "version": "1.0.0", "url": "https://bedrock-agentcore.region.amazonaws.com/runtimes/agent-arn/invocations/", "protocolVersion": "0.3.0", "preferredTransport": "JSONRPC", "capabilities": { "streaming": true }, "defaultInputModes": ["text"], "defaultOutputModes": ["text"], "skills": [ { "id": "skill-id", "name": "Skill Name", "description": "Skill description and capabilities", "tags": [] } ] }
/ping-GET
用途
验证您的 A2A 服务器是否正常运行并准备好处理请求
响应格式
返回表示代理生命值的状态码:
-
Content-Type :
application/json -
HTTP 状态码:
200对于运行状况良好,对不健康状态使用相应的错误代码
{ "status": "Healthy" }
status是必填项,并且是Healthy或之一HealthyBusy。当状态为时HealthyBusy,运行时会话将保持活动状态。
可以包含一个可选time_of_last_update字段(以秒为单位的 Unix 时间戳)来报告status上次更改的时间。
警告
不要在每次 ping 时都设置time_of_last_update为当前时间。每次 ping 时都会向前推进的时间戳表示状态会持续变化,从而防止空闲会话超时触发——然后会话会一直持续到MaxLifetime会话配额耗尽。如果省略该字段,平台将自行跟踪状态变化。如果你使用 Bedrock AgentCore SDK,ping 响应会由你处理。
身份验证要求
A2A 服务器支持多种身份验证机制:
OAuth 2.0 持有者代币
对于 A2A 客户端身份验证,请在请求标头中包含持有者令牌:
Authorization: Bearer <oauth-token> X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: <session-id>
Sigv4 身份验证
编程访问还支持标准 AWS Sigv4 身份验证。
错误处理
A2A 服务器将错误作为标准 JSON-RPC 2.0 错误响应返回,并带有 HTTP 200 状态代码以保持协议合规性:
| JSON-RPC 错误码 | 运行时异常 | HTTP 错误代码 | JSON-RPC 错误消息 |
|---|---|---|---|
|
-32501 |
ResourceNotFoundException |
404 |
未找到资源-请求的资源不存在 |
|
-32052 |
ValidationException |
400 |
验证错误-请求数据无效 |
|
-32053 |
ThrottlingException |
429 |
超出速率限制-请求太多 |
|
-32054 |
ResourceConflictException |
409 |
资源冲突-资源已存在 |
|
-32055 |
RuntimeClientError |
424 |
运行时客户端错误-请查看您的 CloudWatch 日志以获取更多信息 |
错误响应示例:
{ "jsonrpc": "2.0", "id": "req-001", "error": { "code": -32052, "message": "Validation error - Invalid request data" } }
OAuth 身份验证响应
OAuth-configured 代理遵守 RFC 6749 (OAuth 2.0
401 未授权-缺少身份验证
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer resource_metadata="https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ESCAPED_ARN}/invocations/.well-known/oauth-protected-resource?qualifier={QUALIFIER}"
注意
SigV4-configured 代理返回 HTTP 403 并ACCESS_DENIED显示错误,并且不包含WWW-Authenticate标头。