跳到正文

錯誤碼與重試

看懂 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 為準。帶上這些資訊聯絡我們,可以直接定位到那一條請求。

下一步