免費全文 工具與工作流 進階

重試與降級:模型服務不穩時怎麼撐住

上游會限流、會逾時、會過載。這是一套可直接用的韌性策略。

工具與工作流教程封面

模型 API 的可用性通常低於一般的雲端服務,而且失敗常常是尖峰時的集中失敗。沒有韌性設計,你的服務會跟著一起倒。

分辨哪些該重試

  • 該重試:429 限流、5xx 過載、網路逾時。
  • 不該重試:400 參數錯誤、401 認證失敗、內容過濾。重試只是浪費配額。

指數退避加抖動

import random, time

def with_retry(fn, tries=4, base=0.5, cap=8.0):
    for i in range(tries):
        try:
            return fn()
        except (RateLimited, Overloaded, Timeout):
            if i == tries - 1: raise
            delay = min(cap, base * (2 ** i)) * (0.5 + random.random())
            time.sleep(delay)     # 抖動避免所有客戶端同時重試

抖動(jitter)不能省。沒有它,所有客戶端會在同一時刻一起重試,把剛恢復的服務再打掛一次。

降級策略

  1. 換模型:主力模型過載時改用備援模型,即使品質略降。
  2. 換供應商:同一個模型在不同平台上都有,事先接好。
  3. 降級功能:改回傳規則式結果或快取結果,並明確告知使用者。
  4. 排隊延後:非即時任務改成排程處理。

熔斷器

連續失敗達到門檻時,直接停止呼叫一段時間並走降級路徑。這能避免把大量請求送進一個已知壞掉的上游,也讓上游有機會恢復。

重試次數與逾時要一起設計。四次重試各等 8 秒,加起來使用者要等半分鐘——這時候應該快速失敗,而不是堅持重試。
下一步

這個主題還有更深入的實戰教程

VIP 專區收錄 50 篇進階內容:架構設計、生產環境取捨、成本與合規。 每週五新增 3 篇。

看訂閱方案 → 先逛逛 VIP 專區