orientxorientx

速率限制與錯誤

速率限制回應標頭、429 退避重試和錯誤碼清單

限制按金鑰生效,同時約束請求數量和 token 處理量。 每個回應都攜帶目前狀態:

回應標頭含義
x-ratelimit-limit-requests目前時間區間允許的請求數量。
x-ratelimit-remaining-requests目前時間區間剩餘的請求數量。
x-ratelimit-reset-requests請求計數器重設前的剩餘秒數。
x-ratelimit-limit-tokens目前時間區間允許的 token 數量。
x-ratelimit-remaining-tokens目前時間區間剩餘的 token 數量。
x-ratelimit-reset-tokenstoken 計數器重設前的剩餘秒數。

超過限制時回傳 429。請等待 Retry-After 回應標頭指定的時間後重試, 並使用帶隨機抖動的指數退避,避免並行任務在同一時刻再次傳送請求:

import random
import time

import openai

def with_retries(fn, attempts=5):
    for attempt in range(attempts):
        try:
            return fn()
        except openai.RateLimitError as err:
            if attempt == attempts - 1:
                raise
            retry_after = getattr(err, "response", None)
            delay = float(retry_after.headers.get("Retry-After", 0)) if retry_after else 0
            time.sleep(max(delay, 2**attempt) + random.random())

OpenAI 官方 SDK 已會對 429 和 5xx 自動重試幾次。如需調整行為, 可在建立用戶端時設定 max_retries;僅在 SDK 未覆蓋的場景中使用自訂重試邏輯。

錯誤

失敗回應使用常規 HTTP 狀態碼,並採用統一的回應主體:

{
  "error": {
    "message": "Human-readable description of what went wrong.",
    "type": "invalid_request_error",
    "code": "context_length_exceeded"
  }
}
狀態碼含義處理方式
400請求格式錯誤或參數不受支援修正請求,重試無效。參見模型與參數。
401金鑰缺失或無效檢查 Authorization 請求標頭。參見金鑰與身分驗證。
403金鑰無權存取此模型申請權限或選擇其他模型。
404端點不存在或模型已下線重新檢查路徑和 GET /v1/models。
429觸發速率限制或額度耗盡退避重試,或提高限額。額度資訊參見用量與計費。
5xx上游或閘道故障退避後重試。

請記錄 error.code,而不是比對 error.message 的文字;錯誤碼穩定,錯誤訊息則可能變化。

本頁目錄