RequestBeam

文档目录

RequestBeam 文档

错误码与错误处理

查询完整的平台错误码,识别不同协议的错误响应,安全重试并收集适合用户和 AI 排查的诊断信息。

先判断哪里失败

  1. 记录实际 HTTP 状态、请求方法和路径。HTTP 状态与响应体中的应用错误码是两层信息,不要相互替代。
  2. 根据所调用的协议读取错误字段。平台原生、OpenAI、Claude 和 Gemini 的结构不完全相同。
  3. 流式请求还要检查错误事件与结束状态;异步任务还要检查任务的 status。HTTP 200 不代表生成一定成功。
  4. 根据下表修正请求或决定是否重试。message 用于解释,不是稳定枚举,不要匹配其文案来驱动程序分支。

平台错误码枚举

以下是平台应用错误码的完整枚举。名称用于查询,响应中的 code 使用数字。 “常见 HTTP”是排查参考,不是所有接口的固定映射;以实际 HTTP 状态和响应体为准。 上游原样返回的 code 不一定属于此枚举。

数字 code名称常见 HTTP含义与处理
10000BAD_REQUEST400请求格式、路径或基础参数错误。检查方法、路径、JSON 格式及参数名。
10001VALIDATION_ERROR400 / 422参数校验失败。检查必填字段、字段类型、范围及参数组合。
20000AUTH_ERROR401认证失败。检查 API Key 是否有效、过期,以及认证头格式。
20001FORBIDDEN403无权访问或账户状态受限。确认账户权限及资源归属。
30000NOT_FOUND404路径、模型或资源不存在。核对接口路径、model 和任务 ID;模型以当前 API Key 可见列表为准。
30001CONFLICT409操作与当前资源状态冲突。先查询现有状态,再调整操作,避免重复提交。
40000INSUFFICIENT_CREDIT402余额不足。确认余额并补足后再调用。
40001RATE_LIMIT429请求频率过高。降低发送速率并延迟重试。
40002CONCURRENCY_LIMIT429同时执行的请求过多。降低并发,等待已有请求结束。
50000PROVIDER_ERROR502上游调用失败或未返回有效结果。检查结果是否已产生,再考虑有限重试。
50001SERVICE_UNAVAILABLE503服务暂不可用。稍后有限重试;持续失败时提交诊断信息。
50002GATEWAY_TIMEOUT504处理超时。结果可能尚不确定,先确认是否已执行,再决定是否重试。
50003INTERNAL_ERROR500未分类的服务端错误。有限重试;持续失败时提交诊断信息。

只有 HTTP 429 时,无法可靠区分频率限制与并发限制;有明确的数字错误码时再细分。 模型标识可通过 模型列表核对,不要自行改写 model 值。

按协议读取错误

以下示例展示常见的平台生成结构,不保证每次失败都使用同一结构。 认证阶段的错误可能由不同处理层返回,上游透传响应也可能保留自己的结构、字符串错误码或类型。 先识别实际响应形状,再解析;无法识别时保留原始字段和 HTTP 状态,不要强行转换。

平台原生接口

通常读取 error.code 和 error.message。requestId 可能缺失。

json
{
  "success": false,
  "error": {
    "code": 10000,
    "message": "Bad request"
  },
  "requestId": "req_example"
}

部分错误可能使用顶层 code、message;客户端应容忍这种差异,不要仅凭是否存在 error 对象判断成功。 参数校验响应也可能不含数字错误码;缺失时按未知处理,不要自行补造。

OpenAI 兼容接口

平台生成的常见错误使用顶层 code、message 和 type,不是必须包在 error 中。

json
{
  "code": 40000,
  "message": "Insufficient credit",
  "type": "api_error"
}

type 是协议类别,code 才是此结构中的平台数字错误码。单凭 api_error 不能确定是否值得重试。 上游透传或流式错误可能使用嵌套的 error,按实际协议响应处理。 参见 Chat Completions和 Responses。

Claude 兼容接口

常见结构的顶层 type 为 error,具体类别位于 error.type,说明位于 error.message。 此结构不包含平台数字 code,不要补造一个数字错误码。

json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "max_tokens must be a positive safe integer"
  }
}

平台本地产生的 Claude 错误类型如下;这不是上游所有错误类型的完整枚举。

error.type本地 HTTP 映射排查方向
invalid_request_error400检查请求格式与参数。
authentication_error401检查认证凭据。
api_error其他 HTTP 状态一般 API 错误;结合实际 HTTP 状态和说明排查,不代表一定可重试。

参见 Claude Messages。

Gemini 风格错误

收到 Gemini 风格响应时,读取 error.code、error.message 和 error.status。 这里的 status 是字符串类别,不是 HTTP 状态,也不是异步任务状态。

json
{
  "error": {
    "code": 10000,
    "message": "Bad request",
    "status": "INVALID_ARGUMENT"
  }
}

平台生成的此类错误使用平台数字 code。本地字符串 status 映射如下,不是上游全部状态的枚举。

error.status本地 HTTP 映射排查方向
UNAUTHENTICATED401检查认证凭据。
RESOURCE_EXHAUSTED402 / 429检查余额或调用限制;仅凭该字符串不能区分。
PERMISSION_DENIED403检查权限与资源归属。
NOT_FOUND404检查路径、模型或资源。
UNAVAILABLE503服务暂不可用。
INTERNAL>= 500,但不包括 503服务端错误;504 也使用此值。
INVALID_ARGUMENT其他 HTTP 状态检查实际 HTTP 状态与请求;409 也使用此值。

503 优先使用 UNAVAILABLE,不归入 INTERNAL。上游响应可能采用不同的 code 和 status 语义,不要把所有 Gemini 数字码直接套入平台错误码表。

安全重试

情况建议
400 / 401 / 402 / 403 / 404 / 409 / 422先修正请求、凭据、余额、权限或资源状态,不要原样循环重试。API Key 仅放在 Header,不能放入 URL query。
429降低速率和并发,等待后重试;仅增加重试次数通常会加重限流。
500 / 502 / 503 / 504先评估重复执行风险,再使用有上限的指数退避和随机抖动,例如最多重试 3 次,同时设定总等待上限。
网络断开或客户端超时没有收到结果不代表服务端未执行。将执行结果记为未知,不要直接断言失败或立即重复创建。

响应包含有效的 Retry-After 时,优先遵守其等待时间;不能假设每次都会返回该头。 自动重试非幂等生成请求可能重复执行并产生额外费用。本页不承诺通用幂等键支持,不要假设自行添加 Idempotency-Key 就能去重。

已获得 jobId 时,先查询现有任务,不要重新创建。未获得 jobId 且结果不确定时,保留请求标识和时间以供排查。

流式与异步任务

SSE 流式请求

SSE 开始后,HTTP 状态可能仍为 200,后续失败通过流中的错误事件或错误载荷报告。 解析所用协议的事件与数据,检查是否正常完成;收到错误或连接异常中断时,不要把已收到的部分文本或图片当作完整成功结果。 不同接口的事件名称和载荷不同,不要只检测一种固定 error 字段,也不要把“收到任意文本”作为成功条件。

异步任务

创建响应返回 data.jobId 只表示已受理,不表示生成完成。 查询任务的 HTTP 成功也只表示查询成功,仍须读取任务的 data.status:

  • PENDING、CONNECT、PROCESSING:继续按 Jobs 文档轮询。
  • COMPLETED:读取 outputResult。
  • FAILED、CANCELLED:停止轮询,保留任务 ID 和脱敏后的返回信息再排查。

失败详情可能位于 data.outputResult.error;该字段是可选的,不保证每次失败都有。 仅当创建响应明确返回 jobId 时使用 Jobs;直接返回 JSON 或 SSE 结果的接口不要套用任务轮询流程。

用户与 AI 诊断清单

向客服或 AI 提供以下脱敏信息。字段缺失就填写 unknown;没有收到 HTTP 响应时,HTTP 状态也填写 unknown。 保留字段路径及原始值类型,例如 error.code: 10000 (number) 或 error.code: "invalid_api_key" (string)。 不要把字符串 code 自动转成平台数字码,不要根据 message、HTTP 状态或模型名称补造缺失字段。

text
time_with_timezone: unknown
method: unknown
path_without_query: unknown
model: unknown
stream: unknown
http_status: unknown
error_code_path_value_and_type: unknown
error_type_path_and_value: unknown
protocol_status_path_and_value: unknown
sanitized_message: unknown
request_id_from_body_or_X-Request-ID: unknown
job_id: unknown
job_status: unknown
retry_after: unknown
retry_count_and_delays: unknown
received_partial_output: unknown

requestId 可从响应体或 X-Request-ID 响应头获取(如有);jobId 按字符串保留,避免长数字精度丢失。 提供最小、已脱敏的请求参数即可。删除 API Key、Token、Cookie、完整认证头、个人信息、私密提示词与输入文件内容; 删除 URL 查询参数及带签名或访问凭据的输入、输出 URL。不要直接粘贴未经检查的完整请求日志。

AI 排查时应区分“实际观察到的字段”和“可能原因”,列出缺失信息;信息不足时不要推断请求已成功、未执行或未产生费用。