跳到正文

错误码与重试

看懂 HopBase 的错误响应与流式失败,判断请求能否重试。

按现象快速定位用报错速查,本页是完整口径。并发上限、超时与计费规则见并发、超时与计费。

错误响应结构

OpenAI 协议(/v1/chat/completions、/v1/responses、/v1/images/*、/v1/video/*):

{
  "error": {
    "message": "…",
    "type": "invalid_request_error",
    "code": "insufficient_quota"
  }
}

Anthropic 协议(/v1/messages):

{
  "type": "error",
  "error": { "type": "invalid_request_error", "message": "…" }
}

Anthropic 结构没有 code。密钥校验阶段的错误(401、额度 402、帐户 403)在 /v1/messages 也是 OpenAI 结构。文案语言按请求头 Accept-Language 返回,未指定时为英文。程序里请按 HTTP 状态码和 code 判断,不要匹配文案。

状态码

状态码典型原因能否重试怎么做
401没带密钥、密钥不完整、已停用或过期否回控制台「API 密钥」重新复制或新建
402余额、密钥、成员或部门额度用完;视频提交时余额不足以覆盖在途预留充值后可先用 GET /v1/usage 查这把密钥还能花多少,再充值或调整额度;不要循环重试
403帐户或成员被停用、无权使用或未绑定分组,或能力未开通否联系管理员,或换用支持该调用的分组密钥
404模型不在这把密钥的分组里、路径不属于该分组、分组已下线否用该密钥调 GET /v1/models 核对 ID;路径见Base URL 与协议;已下架的 ID 及替代型号见模型更新日志
413请求体超过 60 MB否压缩素材,或在模型支持时改传 URL
429帐户或密钥并发已达上限;或服务当前繁忙是按 Retry-After 稍后重试并降低并发
499只见于控制台使用记录:客户端先断开,收不到它—长输出改用流式,并调大客户端读超时
502 / 503服务暂时不可用,系统自动重试仍未成功是退避重试,或换同系列的其他模型
504处理超时是退避重试;长任务改用流式或异步接口

错误码清单

# OpenAI 结构里的 code。模型自身返回的 400 可能带该模型自己的 code。
状态  code                          含义                                   能否重试
401   missing_api_key               没带密钥                               否
      invalid_api_key               密钥无效或已删除                       否
      api_key_expired               密钥已过期                             否
402   insufficient_quota            余额 / 密钥 / 成员 / 部门额度用完      充值后
      insufficient_balance          视频:余额不足以覆盖在途预留 + 本条预估  任务结束或充值后
403   account_disabled              帐户已停用                             否
      member_disabled               成员帐号已停用                         否
      member_group_forbidden        成员无权使用这把密钥的分组             否
      api_key_misconfigured         密钥未绑定分组                         否
      image_generation_disabled     分组未开通生图                         否
      middleware_denied             被网关策略拒绝                         否
404   model_not_found               分组不支持该模型                       否
      model_not_served              分组未提供该模型                       否
      group_offline                 分组已下线                             否
      route_not_found               该密钥不支持此路径                     否
400   invalid_request               请求体无法读取或不是 JSON 对象、缺 model、messages 为空   否
413   request_too_large             请求体超过 60 MB                       否
429   user_concurrency_limit        帐户并发上限(Retry-After: 1)         是
      apikey_concurrency_limit      密钥并发上限(Retry-After: 1)         是
      all_routes_rate_limited       服务繁忙                               是
      upstream_rate_limit           服务繁忙                               是
502   upstream_error                服务暂时不可用                         是
503   no_available_route            服务繁忙                               是
      no_available_account          服务繁忙(会话续接例外见下)           是*
      all_routes_failed             服务暂时不可用                         是
      plugin_unavailable            服务暂时不可用                         是
      service_unavailable           认证服务暂时不可用                     是
504   upstream_timeout              超时                                   是

重试规则

  • 不要原样重试:400、402、403、404、413、422。这些要先改请求、配置或余额。404 是确定结果:暂时不可用只返回 429 / 5xx,不会返回 404。
  • 退避后重试:429、502、503、504,以及流式输出中断。建议间隔 2 秒、5 秒、15 秒,最多 3 次。例外:提示有状态会话「can no longer be resumed」的 503,要去掉 previous_response_id 开新对话。
  • 429 会带重试提示头:Retry-After(秒)与 Retry-After-Ms(毫秒),有就按它等待。
  • 异步任务提交成功后不要重复提交:每次重提都是另一个各自计费的任务,请改为轮询。

流式请求出错

流式请求一旦开始输出,HTTP 状态码就已经是 200,之后的错误通过事件下发,不会再改状态码:

Chat Completions   data: {"error": {…}}      (不带 event: 行)
Responses          event: response.failed    (response.error.code:rate_limit_exceeded / server_error / invalid_prompt)
Anthropic          event: error

客户端要在读流的循环里处理错误事件。已收到的片段无法续传,需要整条请求重新发起。

异步任务失败

提交被拒直接返回普通 4xx,不建任务。受理后失败时轮询仍返回 200,status: "failed",原因在 error.message(生图任务为 error 字符串),没有 code(可灵与 Midjourney 任务例外,会返回稳定的 error.code,如 input_sensitive、invalid_request、generation_failed),不计费。审核类、参数类失败不要原样重提。控制台「使用记录」显示分类与建议:

审核   input_sensitive、safety_rejected …                        改提示词或素材
参数   prompt_required、upstream_invalid_request、reference_* …  改参数
超时   各系列时限见「并发、超时与计费」                           重新提交
中断   task_interrupted                                           重新提交

报障时请提供

  • 响应头 x-request-id(每条响应都有,是定位该请求的唯一标识)
  • 出现时间(带时区)与模型 ID
  • 完整的报错原文与 HTTP 状态码

服务端故障在控制台不显示原文,排查以 x-request-id 为准。带上这些信息联系我们,可以直接定位到那一条请求。

下一步