View a markdown version of this page

A2A 协议合约 - Amazon Bedrock AgentCore
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 容器-与 Amazon 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 身份验证

编程访问还支持标准 Amazon 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) 身份验证标准。缺少身份验证时,该服务会返回带有 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标头。