速率限制與錯誤
速率限制回應標頭、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-tokens | token 計數器重設前的剩餘秒數。 |
超過限制時回傳 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 的文字;錯誤碼穩定,錯誤訊息則可能變化。