View a markdown version of this page

A2A 协议合约 - Amazon Bedrock AgentCore

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) 身份验证标准。当缺少身份验证时,该服务会返回带有 WWW-Authenticate 标头的 401 未经授权的响应(根据 RFC 7235),使客户端能够通过 API 发现授权服务器端点。 GetRuntimeProtectedResourceMetadata

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标头。