本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
A2A 协议合约
A2A 协议合同定义了在亚马逊 Bedrock Runtime 中实现代理间通信的要求。 AgentCore 该合同规定了您的 A2A 服务器必须实现的技术要求、端点和通信模式。
有关示例代码,请参见在 AgentCore 运行时在 AgentCore 运行时部署 A2A 服务器部署 A2A 服务器。
协议实施要求
您的 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 Amazon Bedrock AgentCore 运行时环境兼容所必需的
路径要求
/-帖子
用途
接收 JSON-RPC 2.0 消息并通过代理的功能对其进行处理,使用 A2A 协议消息完成 InvokeAgentRuntime API 负载的传递
使用案例
根端点有几个关键用途:
-
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
用途
为代理发现和能力通告提供代理卡元数据
使用案例
代理卡端点有几个关键用途:
-
多代理系统中的代理发现
-
能力和技能广告
-
身份验证要求规范
-
服务端点配置
响应格式
返回描述代理身份和能力的 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-获取
用途
验证您的 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 错误响应返回。下表将每个运行时异常映射到其 JSON-RPC 错误代码、HTTP 状态代码和消息。一些异常共享 JSON-RPC 错误代码,但返回不同的消息,因此它们被列为单独的行。
| JSON-RPC 错误码 | 运行时异常 | HTTP 错误代码 | JSON-RPC 错误消息 |
|---|---|---|---|
|
不适用 |
AccessDeniedException |
403 |
访问被拒绝(以标准 HTTP 错误的形式返回,而不是 JSON-RPC 错误) |
|
-32051 |
ResourceNotFoundException |
404 |
未找到资源-请求的资源不存在 |
|
-32052 |
ValidationException |
400 |
验证错误-请求数据无效 |
|
-32053 |
ThrottlingException |
429 |
已超过速率限制-请求过多 |
|
-32053 |
ServiceQuotaExceededException |
429 |
已超过速率限制-请求过多 |
|
-32054 |
ConflictException |
409 |
资源冲突-资源已经存在 |
|
-32054 |
RetryableConflictException |
409 |
会话操作正在进行中,请重试 |
|
-32055 |
RuntimeClientError |
424 |
运行时客户端错误-请查看您的 CloudWatch 日志以获取更多信息 |
|
-32603 |
任何其他例外 |
500 |
内部错误-处理请求时出现意外错误 |
ConflictException并且RetryableConflictException都使用 JSON-RPC 错误代码 -32054 (HTTP 409)。他们的信息使他们与众不同。当第二项操作以服务正在配置或拆除的会话为目标时,该服务返回 RetryableConflictException (Session operation in progress, please retry)。这种情况是暂时的,可以重试。调用方必须使用短暂的指数回退来重试,因为 A2A 客户端不会自动重试。
注意
与 A2A 规范中通过 HTTP 200 响应传送 JSON-RPC 错误的惯例不同, AgentCore 运行时返回真实的 HTTP 状态码(例如,409 或 404)。即使是非 2xx 响应,也要解析 JSON-RPC error正文,这样您的客户端就不会错过错误代码(例如-32054)或推动重试所需的Session operation in progress, please retry消息。
错误响应示例:
{ "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标头。