| |

401、429、500、529 怎麼處理:按 5 類錯誤決定模型 API 該重試還是切備用模型

401、429、500、529 怎麼處理:按 5 類錯誤決定模型 API 該重試還是切備用模型

作者注:按錯誤碼給模型 API 報錯分診,講清楚何時重試、何時切換備用模型、何時停下來修配置,並附錯誤碼分診表、備用模型覈對表和上線檢查清單。

模型 API 報錯後,先看是哪一類錯誤,再決定怎麼處理。4xx 多數是請求或配置的問題,重試不會讓它變好;5xx、529 和超時才值得做有限重試,重試仍失敗再切換備用模型;沒有冪等保證的請求,不要自動重試。重試不是默認動作,切換也解決不了所有問題。很多線上事故並不是模型掛了,而是錯誤處理邏輯把一次小故障放大成了重複扣費、重複寫庫和整條鏈路被限流。

這篇不是錯誤碼字典的翻譯。它面向已經把模型 API 接進生產或半生產環境的開發者,重點是出錯時怎樣避免把局面弄得更糟。讀完你會拿到一張錯誤碼分診表、一套重試與回退策略、一張備用模型能力覈對表,以及一份可以照着執行的上線前檢查清單。全文可以濃縮成一句判斷:4xx 先修,5xx 才談重試,非冪等請求先停手。

model-api-error-retry-or-fallback-401-429-500-529-zh-hant-image-0


模型 API 報錯的 5 類分診:先分錯,再決定重試或切換

結論先說:模型 API 報錯只分五類,每一類的處理方向基本固定。把錯誤碼先歸到類別裏,後面的重試和切換邏輯就不會亂。

錯誤類別 典型狀態碼 根因位置 默認動作
請求錯 400、404、409、422 你的請求體、參數、模型 ID、端點 不重試,修請求
鑑權錯 401、403 Key、請求頭、權限、地區或策略 不重試,查 Key 和權限
額度或限流 402、429 餘額、併發、速率、模型額度 402 停手;429 看錯誤體再退避或切換
上游故障 500、502、503、529 網關、上游服務、過載 有限重試,失敗後切換
超時或流中斷 408、504、網絡超時、流斷開 鏈路、長輸出、上游響應慢 先確認是否已執行或已計費,冪等才重試

5 類錯誤分診的關鍵:區分“重試”和“切換”

重試指用同一個模型、同一條線路再發一次請求,適合解決瞬時抖動;切換指換模型或換線路,適合解決某個上游持續不可用。兩者的代價不一樣:重試的代價是延遲和可能的重複計費,切換的代價是輸出質量、工具調用兼容性和成本都可能發生變化。

所以分診的順序固定爲三步:先確認錯誤類別,再判斷請求是否冪等,最後選擇重試、切換或停手。跳過第二步最危險,因爲一個已經執行過的工具調用再執行一次,帶來的就不只是“多花點錢”了。


爲什麼“全部重試”會讓模型 API 報錯更嚴重

結論:對所有錯誤一律重試,看起來穩妥,實際上會同時放大成本、副作用和限流。生產環境裏,這類邏輯造成的事故往往比原始錯誤更難排查。

第一個問題是重複扣費。流式響應中斷不一定說明請求失敗,上游可能已經生成了一部分 token,這部分費用可能已經產生。盲目重放等於同一個任務付兩次錢,長輸出任務尤其明顯。

第二個問題是重複執行。Agent 場景裏,一次模型請求可能觸發寫庫、發消息、創建任務甚至支付。如果工具調用階段超時,你並不知道工具是否已經執行;這時直接重放整個請求,很可能出現兩條訂單、兩封郵件。

第三個問題是限流雪上加霜。429 本身就是上游在說“慢一點”,這時客戶端立刻併發重試,相當於主動加壓。更常見的反例是對所有 4xx 都重試:401 本來是 Key 寫錯,重試幾輪後請求量被打滿,最後日誌裏看到的是一堆 429,真正的根因反而被掩蓋了。

model-api-error-retry-or-fallback-401-429-500-529-zh-hant-image-1


401、429、500、529 錯誤碼分診表:哪些重試,哪些切換

結論:下表覆蓋生產中最常見的 14 個狀態碼,其中只有少數值得重試,切換的前提是重試已經確認無效。表中的“是否切換”指換備用模型或線路,具體含義以實際錯誤體和各家文檔爲準。

狀態碼 常見含義 是否重試 是否切換 處理動作
400 請求格式或參數錯誤 否 否 修請求體,檢查字段和類型
401 Key 無效或鑑權失敗 否 否 查 Key、Authorization 請求頭、Base URL
402 餘額不足或額度用完 否 視情況換線路 充值或切到有額度的線路,並告警
403 權限、地區或策略拒絕 否 否 查賬號權限、模型授權、地區限制
404 模型或端點不存在 否 否 覈對模型 ID 和端點路徑
408 請求超時 冪等時有限重試 可選 確認未執行後重試 1 次
409 衝突或狀態不一致 否 否 查業務狀態,避免併發寫
422 參數校驗失敗 否 否 修參數,常見於結構化輸出 schema
429 限流、併發或額度 退避後重試 重試失敗可切換 先讀錯誤體和 Retry-After
500 上游內部錯誤 有限重試 連續失敗則切換 記錄 request id 和錯誤體
502 網關錯誤 有限重試 可切換 區分網關問題和上游問題
503 服務不可用 有限重試 可切換 尊重 Retry-After,必要時降級
504 網關超時 冪等時才重試 可切換 先查任務是否已執行
529 上游過載 有限重試 可切換 退避加抖動,持續過載就切換

429 不一定是限流:讀錯誤體再決定

429 最容易被誤判。它可能表示速率限流,也可能是併發超限、模型額度耗盡,個別情況下還和餘額有關。速率限流通常退避幾秒就能恢復;額度耗盡時,重試多少次都沒用,直接切到最貴的模型更是隻讓成本翻倍,問題依舊。

處理 429 的步驟如下:

  1. 讀取響應頭裏的 Retry-After,有就按它等待。
  2. 讀取錯誤體裏的錯誤類型字段,區分 rate limit、concurrency 和 quota。
  3. 速率或併發問題:退避重試 1 到 2 次,並降低本地併發。
  4. 額度問題:停止重試,告警並切換到有額度的線路。

500 的思路類似。它不一定說明模型本身壞了,可能是網關,也可能是上游。先記下 request id 和錯誤體摘要,排查和對賬都要用到。


模型 API 報錯重試策略:次數、退避、Retry-After 與冪等

結論:重試只針對瞬時錯誤,次數控制在 1 到 2 次,必須帶指數退避和隨機抖動,並且只對冪等請求自動執行。不滿足這四個條件,就不要自動重試。

參數 建議值 說明
可重試錯誤 429、500、502、503、504、529、網絡超時 4xx 中只有 408、429 例外
最大重試次數 1-2 次 超過後進入切換或告警,不再原地打轉
退避間隔 1s、2s、4s 指數遞增 每次疊加隨機抖動,避免多實例同時重試
Retry-After 有就優先遵守 優先級高於本地退避算法
冪等前提 必須滿足 寫操作、工具調用、發消息、支付默認不自動重試

重試策略落地步驟

  1. 建立錯誤分類函數。輸入狀態碼和錯誤體,輸出五類之一,其他邏輯都基於這個分類結果,不要在業務代碼裏到處判斷數字。
  2. 給請求打冪等標籤。純文本生成、摘要、翻譯通常可以視爲冪等;只要請求會觸發工具或產生外部寫操作,就標記爲非冪等。
  3. 非冪等請求先查狀態。工具調用超時後,先查詢任務或數據庫狀態,確認沒有執行過再重試,必要時使用業務側的冪等鍵去重。
  4. 設置總時長上限。每個請求的重試總耗時要有上限,否則用戶側請求早就超時了,後臺還在重試。
  5. 記錄每一次嘗試。至少記錄 request id、模型 ID、狀態碼、錯誤類、延遲、token 用量和重試次數。

最後一步經常被省略,但對賬和排錯都離不開它。如果通過 API易 apiyi.com 接入,控制檯裏可以按 Key 查看用量和調用日誌,把本地記錄的 request id 和平臺側的錯誤信息對上,就能判斷一次失敗究竟發生在網關、上游,還是你自己的請求體。

流中斷單獨處理。流式請求斷開時,先看已經收到多少 token、內容是否已經可用,再決定是續寫、丟棄還是重放。長輸出任務重放前要想清楚:前一次的生成可能已經計費。

🎯 排錯建議:遇到 500、529 這類不好判斷歸屬的錯誤,先保存錯誤體原文和 request id,再到 API易 apiyi.com 控制檯覈對同一時段的用量與日誌。不要只憑狀態碼就下結論。


切換備用模型策略:能力分層、模型映射與兼容覈對

結論:切換的前提是備用模型已經提前確認能接住同樣的任務。如果故障發生時才第一次走回退路徑,大概率會出現第二次故障。

先給模型分層:旗艦、通用、輕量。每類任務映射到一個主模型和一個同層或相鄰層的備用模型。不要所有請求都回退到最貴的模型,那樣一次上游抖動就可能讓賬單失控,而且不少簡單任務換到旗艦模型上也沒有收益。

能力項 主模型 備用模型 是否兼容 切換前要做什麼
上下文窗口 填寫實際上限 填寫實際上限 待覈對 確認最長真實輸入能裝下,否則先做截斷策略
工具調用 工具 schema、並行調用 同上 待覈對 驗證調用 ID 回傳格式和參數結構
結構化輸出 JSON schema 或嚴格 JSON 同上 待覈對 用同一 schema 跑通過率,防止 422
多模態輸入 圖片、音頻、視頻 同上 待覈對 確認輸入格式和大小限制
reasoning 參數 推理檔位或思考字段 同上 待覈對 不支持的參數要在切換時剔除或映射
價格與限流 以控制檯爲準 以控制檯爲準 待覈對 估算切換後的成本,確認限額夠用
地區與合規 允許範圍 允許範圍 待覈對 確認備用線路在業務允許的地區和合規範圍內

這張表建議每個任務類型填一份,“是否兼容”一列只填驗證過的結果,不要憑印象填寫。reasoning 參數最容易出問題:主模型支持的推理檔位字段,換到備用模型上可能直接返回 400 或 422。切換邏輯裏要有一層參數適配,而不是原樣轉發。

模型映射:模型 ID 以控制檯爲準

切換時最常見的低級錯誤是模型 ID 寫錯,結果拿到 404。建議維護一張“邏輯模型名到實際模型 ID”的映射表,業務代碼只引用邏輯名。通過 API易 apiyi.com 調用時,各模型的準確 ID、可用狀態和價格都以控制檯和文檔爲準,接入方式統一使用 https://api.apiyi.com/v1 作爲 base_url。映射表變更後,跑一次金絲雀請求再發布。

model-api-error-retry-or-fallback-401-429-500-529-zh-hant-image-2


備用模型驗證與多模型網關:金絲雀、日誌和自動降級

結論:備用模型上線前要用真實任務驗證;回退之後要驗收輸出,不能只看狀態碼是不是 200。多模型網關可以降低切換成本,但不能替你做質量驗收。

備用模型驗證三步走

  1. 金絲雀請求。選一組真實業務任務,同一提示、同一工具、同一輸入,分別發給主模型和備用模型。
  2. 同題對比。比較通過率、延遲、首 token 時間、token 成本和失敗率。工具調用類任務還要逐項覈對調用 ID、參數結構和返回結構是否兼容。
  3. 回退後驗收。真實切換髮生後,對輸出做自動校驗,例如 JSON 能否解析、必填字段是否齊全、工具參數是否合法,並記錄切換原因和驗收結果。

回退路徑要定期演練。可以每週人爲把一小部分流量切到備用模型,確認鏈路仍然可用,避免依賴、參數或模型 ID 在不知不覺中失效。

日誌字段建議至少包括:

  • 請求 ID、模型 ID、端點、狀態碼、錯誤類、錯誤體摘要
  • 延遲、首 token 時間、總耗時、重試次數、切換目標
  • 輸入 token、輸出 token、緩存命中、估算費用
  • 工具調用名稱、調用 ID、是否執行成功
  • 切換原因、切換後是否通過驗收

多模型網關在容災裏的作用

自己對接多家廠商做容災,至少要維護多套 Key、多套 SDK 和多套錯誤格式。用 API易 apiyi.com 這類聚合網關,一個 Key 就能調用 OpenAI、Claude、Gemini、DeepSeek、Qwen 等主流模型,接口兼容 OpenAI 標準,也支持 Claude、Gemini 原生格式。主備模型可以放在同一套接入代碼裏,切換時改的是模型 ID,而不是整條集成鏈路。

平臺側還提供多節點部署、智能路由、自動降級和負載均衡,可以吸收一部分上游抖動。不過網關層的自動降級不能替代業務層的判斷:冪等檢查、工具調用去重、輸出驗收,仍然要在你自己的代碼裏完成。比較穩妥的分工是:網關負責線路和節點層面的可用性,應用負責任務層面的正確性。

💡 容災建議:設計主備模型時,可以先在 API易 apiyi.com 用同一個 Key 對主模型和備用模型跑同一組金絲雀任務,再把驗證通過的組合寫進模型映射表。新用戶可以先用免費測試額度做驗證。


模型 API 報錯常見問題 FAQ

結論:下面五個問題覆蓋了生產中爭議最多的場景,回答都遵循同一個原則:先判斷,再動作。

Q1:401 要不要重試?

不要。`401` 表示鑑權失敗,重試只會增加請求量,甚至把問題變成 `429`。檢查 Key 是否有效、`Authorization` 請求頭格式是否正確、Base URL 是否和 Key 屬於同一平臺。使用 API易 apiyi.com 時,可以到控制檯確認 Key 狀態。

Q2:429 要不要馬上換模型?

不建議馬上換。先讀錯誤體和 `Retry-After`:速率或併發限流,退避後重試 1 到 2 次通常就能恢復;額度耗盡時才切換線路。切換時選同層級的備用模型,不要一律切到最貴的模型。

Q3:流式輸出中斷,要不要重放?

先別急着重放。流中斷不等於請求失敗,可能已經生成內容併產生費用。先看已收到的 token 數量和內容是否可用:可用就保留或續寫;不可用且請求冪等,再重放 1 次。實際計費以控制檯用量爲準。

Q4:工具調用出現重複執行怎麼辦?

根本做法是在工具層做冪等,用業務側的冪等鍵或任務 ID 去重,同一 ID 只執行一次。工具調用超時後,先查任務狀態,確認沒有執行再重試。已經出現重複的,按調用 ID 回溯日誌,補償或撤銷多出來的操作。

Q5:切換備用模型後返回 200,但結果不對怎麼辦?

200 只說明請求成功,不代表任務成功。對輸出做自動校驗,例如 JSON 結構、必填字段、工具參數合法性。校驗失敗要計入失敗率,並觸發告警或人工複覈。如果某個備用組合頻繁驗收失敗,就從映射表裏撤下,重新跑金絲雀驗證。


上線前檢查清單與總結:什麼時候重試、切換、停手

結論:上線前逐項覈對下面這張清單,比故障發生後臨時補邏輯可靠得多。記住那句判斷:4xx 先修,5xx 才談重試,非冪等請求先停手。

序號 檢查項 通過標準
1 先判斷錯誤類型 所有狀態碼都能歸入五類之一,未知錯誤默認不重試
2 4xx 不自動重試 400、401、402、403、404、409、422 直接告警或修復
3 再決定重試或切換 只對瞬時錯誤重試,最多 1 到 2 次,帶退避和抖動
4 尊重 Retry-After 響應頭存在時優先按它等待
5 冪等檢查 工具調用、寫操作、發消息、支付默認停手,查狀態後再決定
6 流中斷處理 先看已收 token 和費用,不盲目重放
7 備用模型覈對 能力覈對表已按任務類型填寫並驗證
8 模型映射 邏輯名到模型 ID 的映射與控制檯一致
9 最後驗收輸出 切換後做結構和字段校驗,不只看 200
10 日誌與演練 關鍵字段齊全,回退路徑定期演練

模型 API 報錯處理 Key Takeaways

  • 什麼時候重試:429、500、502、503、529 和冪等的超時請求,有限次數並退避。
  • 什麼時候切換:重試仍失敗、上游持續不可用或額度耗盡,且備用模型已驗證。
  • 什麼時候停手:401 等 4xx 配置錯誤,以及狀態不明的非冪等請求。
  • 切換不等於成功:備用模型返回 200 後仍要驗收輸出。
  • 網關和應用分工:線路可用性交給網關,任務正確性留在業務代碼。

錯誤處理做得好不好,看的不是重試寫得多積極,而是能否在每次報錯時做對判斷。建議先把錯誤分類、冪等標籤和日誌字段補齊,再逐步引入備用模型。備用線路可以考慮 API易 apiyi.com:一個 Key 覆蓋多家主流模型,便於用同一套代碼完成主備驗證與切換,價格和可用性以控制檯和文檔爲準。


📚 參考資料

  1. API易 文檔中心:接入方式、模型列表與計費說明
  2. 鏈接:docs.apiyi.com
  3. 說明:模型 ID、價格和可用性以文檔與控制檯爲準

  4. HTTP 狀態碼語義說明:Retry-After 等標準響應頭的含義

  5. 鏈接:developer.mozilla.org/docs/Web/HTTP/Status
  6. 說明:用於理解 4xx、5xx 的通用語義,具體含義以各模型平臺錯誤體爲準

作者:APIYI 技術團隊
技術交流:歡迎在 API易 官網 apiyi.com 首頁聯繫我們,更多接入資料可訪問 docs.apiyi.com 文檔中心

延伸閱讀

Similar Posts