|

AI API 報 429、401、500 怎麼辦:3 類錯誤的重試、降級與熔斷實踐

AI API 報 429、401、500 怎麼辦:3 類錯誤的重試、降級與熔斷實踐

作者注:本文按錯誤碼講解 AI API 報 429、401、500 時的原因和處理方式,說明哪些錯誤該重試、哪些該修配置,以及指數退避、多模型降級和熔斷各自適用的範圍。

線上調用大模型時,凌晨告警羣裏出現一串 429、401、500,是很多開發者都經歷過的場景。常見的應對是給所有失敗請求加一層重試,但這樣做往往讓情況更糟。本文按錯誤碼分類講解 AI API 報 429、401、500 時的判斷方法與容錯設計,幫你把“盲目重試”換成“分類處理”。

這不是一篇 HTTP 狀態碼科普,而是面向線上運維的實踐指南。內容包括每類錯誤的典型原因、能不能重試、應用層怎麼寫處理邏輯,以及網關層和應用層容錯怎麼分工。

核心價值:讀完本文,你能在幾分鐘內判斷一個報錯該重試、該降級還是該立即修配置,並清楚指數退避、多模型降級和熔斷各自適合什麼場景。

ai-api-429-401-500-retry-fallback-circuit-breaker-zh-hant-image-0


AI API 報 429、401、500 的核心要點

處理 AI API 報錯,第一步是分類,重試放在後面。不同錯誤碼代表的問題性質不同,有的等一會兒就能自愈,有的不管重試多少次都會失敗。下表先給出三類錯誤的整體判斷。

錯誤類別 典型狀態碼 問題本質 能否重試 核心處理方式
限流類 429 請求太快或額度耗盡 視原因而定 讀取 Retry-After,指數退避,區分限流與額度不足
認證類 401、403 密鑰無效、權限不足 不能 立即停止重試,告警並修正配置
服務端類 500、502、503、504 上游故障或過載 可以,有上限 有限次退避重試,持續失敗時降級或熔斷
請求類 400、404、413、422 參數、模型名、長度有誤 不能 記錄請求體,修正參數後再發

可以看出,能不能重試取決於錯誤是暫時的還是確定的。暫時性錯誤(限流、上游抖動)重試有意義。確定性錯誤(密鑰錯、參數錯)重試只會浪費額度、拖慢響應,還可能觸發更嚴格的限流。

AI API 錯誤碼判斷決策表

實際排查時,光看狀態碼還不夠,還要結合響應體裏的錯誤類型字段和響應頭。下表是一份可以直接用於設計應用層邏輯的決策表。

觀察到的信號 可能原因 推薦動作 是否計入熔斷統計
429 且帶 Retry-After 頭 速率限制 按頭部給出的時間等待後重試 否
429 且錯誤體提示額度/餘額不足 賬戶額度耗盡 不重試,告警充值或切換賬戶 否
401 密鑰錯誤、過期或格式不對 不重試,檢查密鑰與環境變量 否
403 密鑰無權訪問該模型或區域 不重試,檢查權限與模型開通情況 否
500 / 502 上游內部錯誤、網關轉發失敗 退避重試 2-3 次 是
503 服務過載或維護 退避重試,失敗後降級 是
504 或客戶端超時 生成太長、上游響應慢 視冪等性決定是否重試,考慮調大超時 是

表裏最容易被忽略的是 429 的兩種含義。部分服務商在額度耗盡時也返回 429,但錯誤體裏的類型字段和普通限流不同。如果應用層只看狀態碼,就會對一個“餘額不足”的請求無限退避重試,日誌裏全是 429,卻始終不會恢復。

429 限流錯誤重點詳解

429 的核心原因是單位時間內請求數或 token 數超過了限制。大模型 API 的限流通常有多個維度:每分鐘請求數、每分鐘 token 數,有的還有併發數限制。所以即使請求數不多,一次塞進超長上下文也可能觸發 429。

應用層處理 429 有三條原則。第一,優先遵守 Retry-After 或類似的重置時間頭,不要自己猜等待時間。第二,在沒有頭部提示時使用帶隨機抖動的指數退避,避免大量客戶端同時醒來再次打滿限額。第三,從源頭控流,用令牌桶或隊列限制併發,比事後重試更有效。

401 認證錯誤重點詳解

401 是最不該重試的錯誤。它幾乎總是由配置問題引起,常見情況有:密鑰複製時多了空格或換行,環境變量在容器裏沒有正確注入,測試環境的密鑰被帶到了生產,密鑰已被輪換或吊銷,或者使用了錯誤的鑑權頭格式。

在 OpenAI 兼容接口下,還有一個高頻原因是 base_url 和密鑰不匹配,比如用 A 平臺的密鑰請求 B 平臺的地址。因此 401 出現時,應用層應當立即停止重試、觸發高優先級告警,並在日誌中記錄密鑰前幾位與請求地址,方便快速定位,但不要記錄完整密鑰。

500 服務端錯誤重點詳解

500 系列錯誤說明問題在服務端或鏈路上,可能是上游模型服務內部異常、負載過高,也可能是中間網關轉發失敗。這類錯誤通常是暫時性的,適合有限次數的重試。但如果持續出現,就說明上游進入了不健康狀態,這時繼續重試只會讓請求排隊、線程被佔滿,應該轉向降級或熔斷。

還要注意 504 和客戶端超時。大模型生成長文本本身就慢,如果超時時間設得太短,會把正常的慢請求誤判爲失敗,然後重試,這會產生重複計費,在流式輸出中斷時還會讓前端收到截斷的內容。

ai-api-429-401-500-retry-fallback-circuit-breaker-zh-hant-image-1


AI API 重試、降級與熔斷快速上手

分好類之後,就要把處理邏輯落到代碼裏。按照補充要求,本節不貼代碼塊,而是用參數清單和步驟說明講清每種機制的實現要點,你可以照着在任意語言裏實現。

指數退避重試的實現要點

指數退避的思路是:每次重試的等待時間按倍數增長,再疊加隨機抖動。實現時可以按下面的步驟組織邏輯:

  1. 定義可重試的錯誤集合,例如 429(非額度不足)、500、502、503、504 以及網絡超時。
  2. 每次失敗後先檢查響應頭裏的 Retry-After,有就按它等待,沒有則按退避公式計算等待時間。
  3. 等待時間公式通常寫成“基礎間隔 × 2 的重試次數次方”,再加上一個隨機抖動值,並設置單次等待上限。
  4. 設置最大重試次數和總耗時預算,任何一個超限都立即放棄,把錯誤交給降級邏輯。
  5. 每次重試都記錄日誌,包括錯誤碼、重試次數、等待時長和模型名,方便事後分析。

如果你使用官方 SDK,很多 SDK 本身已有 max_retries、timeout 之類的參數。這時要注意不要在外層再包一層同樣的重試,否則重試次數會相乘,故障時請求量成倍放大。

下表給出一組常見的起步參數,屬於經驗值,具體數值應根據你的業務延遲要求和服務商限額調整。

參數 含義 常見起步取值 調整依據
max_retries 最大重試次數 2-5 次 實時對話取小值,離線批處理可取大值
基礎間隔 首次重試等待 約 1 秒 限流嚴格的服務可適當放大
單次等待上限 退避時間封頂 數十秒級 避免單次等待過長拖垮請求
隨機抖動 打散重試時間 等待時長的一部分隨機值 併發客戶端越多越需要
總耗時預算 一次調用最長耗時 按業務 SLA 設定 超時後直接降級

🚀 快速開始:如果想在測試階段模擬不同錯誤碼下的重試表現,可以通過 API易 apiyi.com 用統一的 OpenAI 兼容接口接入多個模型,在同一套重試邏輯下觀察不同模型的響應和報錯情況,減少爲每家服務商單獨適配的工作量。

多模型降級的設計方法

重試解決的是“同一個模型暫時不可用”,降級解決的是“這個模型短時間內恢復不了”。多模型降級就是預先配置一條備用鏈路:主模型連續失敗後,按順序切換到備用模型,保證業務能繼續響應,代價是可能犧牲一部分質量或增加一部分成本。

設計降級鏈時要考慮能力是否等價。如果主模型依賴函數調用、結構化輸出或長上下文,備用模型也必須支持這些特性,否則降級後會出現新的 400 錯誤或輸出格式解析失敗。下表給出一種按場景設計降級鏈的參考思路。

業務場景 主模型定位 一級備用 二級兜底 可用平臺
在線客服對話 高質量通用模型 同級別的其他廠商模型 輕量快速模型 + 簡化回覆 API易 apiyi.com、各家官方 API
代碼生成與審查 編程能力強的旗艦模型 另一家旗艦模型 返回“稍後重試”提示 API易 apiyi.com、各家官方 API
批量內容處理 性價比模型 同價位其他模型 寫入隊列延後處理 API易 apiyi.com、各家官方 API
結構化信息抽取 支持 JSON 輸出的模型 同樣支持結構化輸出的模型 規則引擎兜底 API易 apiyi.com、各家官方 API

降級時有幾個細節需要處理好:

  • 提示詞適配:不同模型對系統提示詞的敏感度不同,備用模型最好有經過驗證的獨立提示詞版本。
  • 上下文長度:切換前檢查消息長度是否超過備用模型的上下文窗口,必要時先截斷歷史。
  • 結果標記:在日誌和監控裏標記“本次響應來自降級模型”,便於評估降級對質量的影響。
  • 不要降級認證錯誤:401 說明配置有問題,切換模型只會掩蓋問題,應該直接告警。

熔斷器的工作原理與使用邊界

熔斷器用來防止一個持續故障的依賴拖垮整個系統。它通常有三種狀態:關閉時請求正常放行,同時統計失敗率;失敗率或連續失敗次數超過閾值後進入打開狀態,此時直接拒絕請求或走降級,不再訪問故障上游;經過一段冷卻時間後進入半開狀態,放少量試探請求,成功則恢復關閉,失敗則重新打開。

熔斷的關鍵是只統計能代表上游健康度的錯誤。5xx 和超時應該計入失敗率,而 401、400 這類客戶端錯誤不應計入,否則一個配置錯誤就會讓熔斷器打開,所有正常請求都被拒絕。按額度不足返回的 429 也不應計入,它反映的是賬戶狀態,不是服務健康度。

熔斷也不是越多越好。對於調用量很低的內部工具,失敗率統計樣本太少,熔斷器容易誤判,這時用簡單的重試加降級就夠了。熔斷更適合高併發的線上服務,它能在上游大面積故障時快速止損,避免線程池和連接池被慢請求佔滿。

ai-api-429-401-500-retry-fallback-circuit-breaker-zh-hant-image-2

網關層與應用層容錯的分工

越來越多團隊通過 API 網關或聚合平臺調用大模型。這時常見的疑問是:網關已經有自動降級,應用層還要不要做重試和熔斷?答案是要做,但分工不同。網關擅長處理“上游渠道”層面的問題,應用層更瞭解“業務語義”層面的問題,兩邊各管一段。

容錯職責 網關層更適合 應用層更適合
渠道故障切換 同一模型多渠道切換、負載均衡 無需重複實現
跨模型降級 可提供模型路由能力 決定業務是否接受質量降級、是否需要換提示詞
重試 渠道級的快速重試 業務級重試預算、與用戶超時體驗協調
熔斷 針對上游渠道的健康檢查 針對整個網關不可達的熔斷與兜底
認證與額度錯誤 返回明確的錯誤類型 告警、阻斷重試、通知人工處理
監控 渠道層面的成功率與延遲 業務層面的成功率、降級比例、用戶影響

以 API易 爲例,其業務介紹中提到了自動降級、負載均衡和實時監控等穩定性能力,這類能力適合承擔渠道層面的故障切換,應用層可以把精力放在業務兜底上。不過,網關的降級觸發條件、返回的錯誤碼和錯誤體格式與官方是否完全一致,需要以平臺文檔和實際測試爲準。業務介紹中提到的“不限併發”也不等於永遠不會出現 429,上游模型本身的限制依然存在。穩妥的做法是:應用層始終保留對 429、5xx 的處理邏輯,並在網關整體不可達時有自己的兜底方案。

🎯 技術建議:接入網關後,建議先在測試環境故意觸發幾類錯誤,比如使用錯誤密鑰、請求不存在的模型名、發送超長上下文,記錄 API易 apiyi.com 實際返回的狀態碼與錯誤體字段,再據此調整應用層的錯誤分類規則,而不是照搬官方文檔的錯誤格式。


常見問題 FAQ

Q1:AI API 報 429 和報 500 有什麼本質區別?

429 表示你的請求超出了限額,問題在調用方的節奏或賬戶額度;500 表示服務端出錯,問題在上游。前者應該先降速、遵守等待時間,後者可以有限次重試,持續失敗再降級。兩者都可能“等一會兒就好”,但處理重點不同。

Q2:爲什麼 401 錯誤絕對不要自動重試?

401 是確定性錯誤,密鑰不對時重試一萬次結果都一樣。自動重試不僅浪費資源,還會掩蓋問題,讓告警延遲。正確做法是立即中斷,檢查密鑰內容、環境變量注入和請求地址是否匹配。

Q3:429 一直重試都不恢復,可能是什麼原因?

最常見的原因是額度或餘額耗盡。部分服務商這種情況也返回 429,但錯誤體中的類型字段與普通限流不同。另一種可能是你的重試沒有加隨機抖動,大量請求同時重發,持續打滿限額。建議先看錯誤體,再檢查重試的時間分佈。

Q4:多模型降級會不會影響輸出質量?

可能會。降級本質上是用可用性換質量,所以要在業務層面明確哪些場景可以接受降級。建議爲備用模型準備獨立驗證過的提示詞,並在監控中統計降級比例。如果降級比例長期偏高,就該檢查主模型的配額和穩定性了。

Q5:如何低成本測試不同模型的降級鏈路?

可以藉助支持多模型統一接口的平臺搭建測試環境。比如通過 API易 apiyi.com 用同一套 OpenAI 兼容調用方式切換不同廠商的模型,只需修改模型名,就能驗證主備模型在相同提示詞下的輸出差異和報錯表現,適合在上線前跑一遍降級演練。

Q6:使用了帶自動降級的網關,應用層還需要熔斷嗎?

需要。網關的降級解決的是上游渠道問題,但網關本身也可能出現網絡不通或整體不可用。應用層的熔斷與兜底就是爲這種情況準備的。使用 API易 這類網關時,可以把應用層熔斷的統計對象設爲“網關整體”,而不是單個模型渠道,兩層職責就不會重複。

Q7:重試、降級和熔斷有哪些已知的副作用?

重試可能產生重複計費,在非冪等場景(如帶工具調用的寫操作)中可能導致動作重複執行。降級可能帶來質量波動和輸出格式差異。熔斷參數設得過敏會誤拒正常請求。因此三者都需要配合監控指標持續調參,不能配置一次就不管。


AI API 錯誤處理核心要點 Key Takeaways

  • 先分類再處理:確定性錯誤立即修正,暫時性錯誤才進入重試流程。
  • 429 要看錯誤體:區分速率限制和額度耗盡,後者重試沒有意義。
  • 401 永不重試:直接告警,重點排查密鑰、環境變量和接口地址是否匹配。
  • 重試要有上限:指數退避加隨機抖動,設置次數和總耗時雙重預算。
  • 降級要能力對齊:備用模型需支持相同特性,並配套獨立提示詞。
  • 熔斷只算服務端錯誤:5xx 和超時計入失敗率,客戶端錯誤不計入。
  • 網關與應用分工:可藉助 API易 apiyi.com 處理渠道層容錯,應用層負責業務兜底。

總結

AI API 報 429、401、500 時,最重要的是放棄“統一重試”的習慣,改爲按錯誤性質分別處理:

  1. 限流類錯誤:遵守 Retry-After,用指數退避加抖動重試,同時從源頭控制併發和 token 用量。
  2. 認證與請求類錯誤:立即中斷、告警、修配置,絕不自動重試,也不要用降級掩蓋。
  3. 服務端錯誤:有限次重試,持續失敗時切換備用模型,高併發場景配合熔斷器快速止損。
  4. 網關與應用分層:網關處理渠道切換與負載,應用層掌握業務語義、重試預算和最終兜底。

建議先把本文的決策表整理成團隊內部的錯誤處理規範,再按規範做一次故障演練,確認每類錯誤都能走到預期的分支。

如果你正在規劃多模型的降級鏈路,可以通過 API易 apiyi.com 在統一接口下對比多個模型的表現和報錯行爲,先在測試環境驗證容錯策略,再上線到生產。


📚 參考資料

  1. Ofox.ai Blog – AI API Error Handling 主題文章:介紹 429 限流、401 認證、500 服務端錯誤的處理思路,以及指數退避、多模型降級與熔斷器
  2. 鏈接:ofox.ai/blog/page/41/
  3. 說明:本文選題方向的參考來源,適合對照閱讀英文資料

  4. Ofox.ai Blog – LLM API Gateway 相關文章:討論 LLM 網關選型與多服務商故障的背景

  5. 鏈接:ofox.ai/blog/page/40/
  6. 說明:瞭解網關層容錯能力在多模型架構中的位置

  7. API易 文檔中心:平臺接入說明與使用文檔

  8. 鏈接:docs.apiyi.com
  9. 說明:錯誤碼格式、降級行爲等細節請以平臺文檔和實際測試爲準

作者:APIYI 技術團隊
技術交流:歡迎在 API易 網站首頁聯繫我們交流 AI API 穩定性實踐,更多接入資料可查閱 docs.apiyi.com 文檔中心

Similar Posts