A2A 错误码:JSON-RPC、gRPC 与 HTTP 映射

A2A 错误码:JSON-RPC、gRPC 与 HTTP 映射

A2A 定义了九个专有错误,并把每个错误映射到各绑定的原生错误模型上。本页是速查表:找到您收到的错误,看它由什么触发,以及它在 JSON-RPC、gRPC 和 HTTP+JSON 中的样子。叙述性的说明见核心协议规范 和协议绑定详解 。已对照 A2A v1.0.1 核对。

无论哪种绑定,每个错误必须表达一个机器可读的错误码和一条人类可读的消息,还可以附带一组详情对象,每个对象都带有 @type 键。规范要求实现在适用时使用 google.rpc 的通用类型,例如 ErrorInfo 和 BadRequest。

九个 A2A 错误

错误JSON-RPCgRPCHTTPErrorInfo.reason触发条件
TaskNotFoundError-32001NOT_FOUND404TASK_NOT_FOUND任务 ID 与现有的、可访问的任务不匹配:无效、过期或已被清理
TaskNotCancelableError-32002FAILED_PRECONDITION400TASK_NOT_CANCELABLE请求取消的任务不在可取消状态,例如已处于终态
PushNotificationNotSupportedError-32003FAILED_PRECONDITION400PUSH_NOTIFICATION_NOT_SUPPORTED使用了推送通知,但 capabilities.pushNotifications 为 false
UnsupportedOperationError-32004FAILED_PRECONDITION400UNSUPPORTED_OPERATION该智能体不支持此操作或操作的某一方面
ContentTypeNotSupportedError-32005INVALID_ARGUMENT400CONTENT_TYPE_NOT_SUPPORTED请求的 Part 中的媒体类型,或产物隐含的媒体类型,不被智能体或技能支持
InvalidAgentResponseError-32006INTERNAL500INVALID_AGENT_RESPONSE智能体返回的响应不符合规范对该方法的要求
ExtendedAgentCardNotConfiguredError-32007FAILED_PRECONDITION400EXTENDED_AGENT_CARD_NOT_CONFIGURED操作需要扩展 Agent Card,但没有配置
ExtensionSupportRequiredError-32008FAILED_PRECONDITION400EXTENSION_SUPPORT_REQUIRED服务器需要卡片中标记为 required: true 的扩展,而客户端没有声明支持
VersionNotSupportedError-32009FAILED_PRECONDITION400VERSION_NOT_SUPPORTEDA2A-Version 服务参数指定的版本不被该智能体支持

规范对 reason 的规则是:错误名称去掉 Error 后缀并转成 UPPER_SNAKE_CASE,domain 始终为 a2a-protocol.org。规范明确写出了 TASK_NOT_FOUND 和 TASK_NOT_CANCELABLE,该列的其余取值由同一规则推出。

区分状态相同的错误

九个错误中有七个共用 HTTP 400,六个共用 gRPC FAILED_PRECONDITION,仅凭状态无法确定是哪个错误。因此规范要求在 gRPC 和 HTTP+JSON 绑定中,每个 A2A 专有错误都带上 google.rpc.ErrorInfo 详情:请读取其中的 reason。JSON-RPC 中数字 code 本身就是唯一的。

哪个操作返回哪个错误

规范按操作列出了这些错误。不与单个操作绑定的错误列在表格下方。

操作规范列出的错误
SendMessageContentTypeNotSupportedError、UnsupportedOperationError(任务已处于终态)、TaskNotFoundError
SendStreamingMessageUnsupportedOperationError(不支持流式,或任务已处于终态)、ContentTypeNotSupportedError、TaskNotFoundError
GetTaskTaskNotFoundError
ListTasks没有该操作特有的错误
CancelTaskTaskNotCancelableError、TaskNotFoundError
SubscribeToTaskUnsupportedOperationError(不支持流式,或任务已处于终态)、TaskNotFoundError
创建、获取、列出、删除推送通知配置PushNotificationNotSupportedError、TaskNotFoundError(任务不存在;获取时指配置不存在)
GetExtendedAgentCardUnsupportedOperationError(智能体不支持扩展卡片)、ExtendedAgentCardNotConfiguredError(声明了支持但没有配置卡片)

不与单个操作绑定的错误:

  • VersionNotSupportedError:A2A-Version 不被智能体支持的任何请求。
  • ExtensionSupportRequiredError:客户端没有声明支持的必需扩展。
  • InvalidAgentResponseError:规范没有给出针对具体操作的触发条件。

取消操作是幂等的,但任务被取消并清理之后,重复的取消请求可以返回 TaskNotFoundError。

九个之外

与 A2A 无关的失败使用各绑定的原生错误码。规范把它们分为五类:

类别HTTPgRPCJSON-RPC
认证401UNAUTHENTICATED自定义错误
授权403PERMISSION_DENIED自定义错误
校验400INVALID_ARGUMENT-32602
资源404NOT_FOUND自定义(A2A 专有)错误
系统500 或 503INTERNAL 或 UNAVAILABLE-32603

服务器不得向未获授权访问某资源的客户端透露该资源是否存在,也不应区分"不存在"和"未授权"。

JSON-RPC 另有五个标准错误码。A2A 专有错误码位于 -32001 至 -32099 区间。

错误码名称标准消息
-32700JSONParseError“Invalid JSON payload”
-32600InvalidRequestError“Request payload validation error”
-32601MethodNotFoundError“Method not found”
-32602InvalidParamsError“Invalid parameters”
-32603InternalError“Internal error”

同一个错误在各绑定中的样子

三个要素在各绑定中的对应关系不同:

要素JSON-RPCgRPCHTTP+JSON
错误码error.code(数字)status.codeHTTP 状态和 error.code
消息error.messagestatus.messageerror.message
详情error.data(数组)status.detailserror.details(数组)

JSON-RPC 把详情列表叫作 data,另外两种叫 details。下面是规范自己给出的"任务未找到"错误示例。

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 2,
  "error": {
    "code": -32001,
    "message": "Task not found",
    "data": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "TASK_NOT_FOUND",
        "domain": "a2a-protocol.org",
        "metadata": {
          "taskId": "nonexistent-task-id",
          "timestamp": "2025-11-09T10:30:00.000Z"
        }
      }
    ]
  }
}

gRPC

status {
  code: NOT_FOUND
  message: "Task with ID 'task-123' not found"
  details: [
    {
      type: "type.googleapis.com/google.rpc.ErrorInfo"
      reason: "TASK_NOT_FOUND"
      domain: "a2a-protocol.org"
      metadata: {
        task_id: "task-123"
        timestamp: "2025-11-09T10:30:00Z"
      }
    }
  ]
}

HTTP+JSON

HTTP/1.1 404 Not Found
Content-Type: application/a2a+json

{
  "error": {
    "code": 404,
    "status": "NOT_FOUND",
    "message": "The specified task ID does not exist or is not accessible",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "TASK_NOT_FOUND",
        "domain": "a2a-protocol.org",
        "metadata": {
          "taskId": "task-123",
          "timestamp": "2025-11-09T10:30:00.000Z"
        }
      }
    ]
  }
}

校验失败在同一位置使用 google.rpc.BadRequest。规范给出的示例是 message.parts 为空的请求,以字段违规的形式报告,描述为 “At least one part is required”。

相关页面

  • 协议绑定详解 :各绑定的服务参数、方法与流式传输。
  • AgentSkill :ContentTypeNotSupportedError 所依据的媒体类型。
  • Task :TaskNotCancelableError 和 UnsupportedOperationError 背后的终态。

来源:A2A 官方规范:Error Handling、Error Code Mappings,以及 JSON-RPC、gRPC、HTTP+JSON 三个绑定章节