本文根據 OpenAI 開發者文檔(Error codes、Rate limits、Spend limits)和幫助中心《Troubleshooting API rate limits and 429 errors》(2026-10-07 當天更新)整理,資料核對於 2026-10-07。
適用於誰
- 調用 OpenAI API 時遇到
429 Too Many Requests、RateLimitError的人; - 報錯裏帶
quota、insufficient_quota字樣,明明剛開始用就被拒的人; - 批量跑任務、並發一高就報錯,想寫個靠譜重試邏輯的人。
結論先說
- 429 有兩類,處理方法完全相反:
- 臨時限速(請求或 token 發得太快)——等一等、降速、重試就能恢復;
- 額度 / 帳單類(餘額用完、用量上限、支出上限)——重試沒用,必須先充值或調整上限。
- 怎麼分:看返回體裏的
error.code。官方說明額度類錯誤的error.type可能統一顯示為insufficient_quota,具體原因以error.code為準。 - 重試要講規矩:響應頭有
Retry-After就至少等這麼久;沒有就用指數退避加隨機抖動,並限制次數和總時長。官方 SDK 本身已會自動重試,自己再套一層要先關掉 SDK 重試。 - 餘額為正也可能 429:速率限制、組織月度用量上限、支出上限和預付餘額是互相獨立的。
第一步:讀懂這次是哪種 429
報錯訊息 / error.code | 屬於 | 原因 | 怎麼辦 |
|---|---|---|---|
| Rate limit reached for requests / tokens | 臨時限速 | 超過每分鐘請求數(RPM)或 token 數(TPM)等限制 | 降速,按 Retry-After 等待後重試 |
slow_down(type 為 rate_limit_error) | 臨時限速 | 流量增長太快,即使沒超 RPM / TPM 也會觸發 | 先降速再逐步加量 |
credit_balance_exhausted | 額度類 | 預付額度已用完 | 去 Billing 充值 |
organization_usage_limit_exceeded | 額度類 | 達到 OpenAI 給組織分配的月度用量上限 | 在 Limits 頁申請提高上限 |
organization_spend_limit_exceeded | 額度類 | 達到你給組織設的硬性支出上限 | 提高 / 取消上限,或等下個月重置 |
project_spend_limit_exceeded | 額度類 | 達到項目的硬性支出上限 | 同上,在項目設定裏改 |
用 Python SDK 時,429 會拋出 openai.RateLimitError,可以直接讀 e.code、e.type 和 e.response.headers。
臨時限速:怎麼降下來
- 先看自己的限額:開發者平台 Settings → Organization → Limits,能看到當前使用檔位和各模型的限額。RPM 和 TPM 是兩個獨立的限制,可能只撞上其中一個。
- 避免突發:幫助中心提醒,限額可能按比顯示週期更短的窗口執行,例如「每分鐘 60 次」也可能按每秒檢查。一次性並發幾十個請求,平均值再低也會被攔。
- 限額是組織和項目共享的,不是每個人一份。同事在跑大任務、或者一個 Key 被多個程序共用,都會擠佔額度。另外部分模型族共享同一份限額。
- 減少 token:刪掉提示詞裏重複的上下文和示例;
max_output_tokens(Chat Completions 是max_completion_tokens)不要設得遠大於實際需要——官方說明限速按這個上限和請求估算 token 數中較大的計算,推理 token 也包含在內。 - 不急的任務用 Batch API:批處理有獨立且更高的限額,不佔用同步請求的速率。
- 平穩加量:官方經驗值是流量到每分鐘 100 萬輸入 token 後,每 15 分鐘增加不超過 50%,避免觸發
slow_down。 - 確認請求走的是哪個組織:屬於多個組織時,不同組織的檔位和帳單不同,檢查預設組織設定或請求頭裏的組織 / 項目 ID。
- 升檔:組織累計充值達到門檻後,使用檔位(Build、Launch、Grow)會自動升級,限額通常更高,門檻見 Rate limits 頁面。
額度 / 帳單類:重試前先處理
- 餘額用完:到 Settings → Billing 購買額度,幾分鐘後餘額更新再試。注意自動充值失敗時會收到電郵,餘額耗盡後調用就會停止。
- 用量上限:在 Limits 頁申請更高的已批准用量上限,或聯絡官方支持。
- 支出上限:有權限的人去組織或項目的 Limits 裏提高或取消硬上限;不改的話下個月自動重置。修改生效需要一點時間。
預付額度、自動充值和支出上限的設定方法,詳見 /guides/openai-api-pricing-billing。
帶 Retry-After 的指數退避示例(Python)
下面的代碼只對臨時限速和 5xx 重試,遇到額度類 429 直接拋出:
python
import random
import time
import openai
from openai import OpenAI
client = OpenAI(max_retries=0) # 由下面的函數統一重試,避免與 SDK 自帶重試疊加
BILLING_CODES = {
"credit_balance_exhausted",
"organization_usage_limit_exceeded",
"organization_spend_limit_exceeded",
"project_spend_limit_exceeded",
}
def create_with_backoff(max_attempts=6, base_delay=1.0, max_delay=60.0, **kwargs):
for attempt in range(1, max_attempts + 1):
try:
return client.responses.create(**kwargs)
except (openai.RateLimitError, openai.InternalServerError) as e:
if e.code in BILLING_CODES or e.type == "insufficient_quota":
raise # 餘額 / 限額問題,重試沒有用
if attempt == max_attempts:
raise
try:
delay = float(e.response.headers.get("retry-after"))
except (TypeError, ValueError):
delay = min(max_delay, base_delay * 2 ** (attempt - 1))
if delay > max_delay:
raise # 伺服器要求等太久,改為稍後再處理,不要提前重試
time.sleep(delay + random.uniform(0, 1)) # 加隨機抖動,避免多個客戶端同時重試
resp = create_with_backoff(model="gpt-6-astra", input="用一句話介紹你自己。")
print(resp.output_text)
要點說明:
- 官方 Python SDK 預設會對 429、5xx 和連接錯誤自動重試 2 次;如果像上面這樣自己管重試,就把
max_retries設為 0,或者把 SDK 的重試次數算進總預算,避免請求次數成倍放大; - 失敗的請求同樣計入每分鐘限額,無間隔地連續重發只會讓情況更糟;
- 流式請求已經開始輸出後中斷的,不要自動重放,以免重複內容。
別和 503 搞混
503 + server_is_overloaded 表示模型暫時過載,不是你的問題。同樣按 Retry-After 等待後重試;持續出現就去 status.openai.com 看有沒有故障。Python 裏 429 拋 RateLimitError,503 拋 InternalServerError,兩個都要處理。
常見問題
Q:新註冊就 429,餘額顯示有錢也不行?
先看 error.code。如果是 credit_balance_exhausted,說明預付額度為 0 或剛充值還沒到賬;如果是限速類,看 Limits 頁當前檔位的限額是不是太低。
Q:我有 ChatGPT Plus,為什麼 API 還說額度不足?
ChatGPT 訂閱和 API 是兩套獨立計費,Plus 不包含 API 額度。開通 API 計費見 /guides/openai-api-key。
Q:聯絡官方支持要準備什麼?
完整的報錯訊息和錯誤碼、相關的 request ID、出錯時間(帶時區)、Limits 頁顯示的限額,以及你已經嘗試過的步驟。不要附上 API Key。
Q:怎麼看是不是我這邊的網絡問題?
幫助中心建議在 Service Health(服務健康)面板按單個模型、服務檔位和項目篩選,打開 HTTP Requests 看各狀態碼的數量;客戶端報錯但面板裏沒有對應記錄,說明請求很可能根本沒到達 OpenAI。
參考資料
- OpenAI 開發者文檔:Error codes — https://developers.openai.com/api/docs/guides/error-codes
- OpenAI 開發者文檔:Rate limits — https://developers.openai.com/api/docs/guides/rate-limits
- OpenAI 幫助中心:Troubleshooting API rate limits and 429 errors — https://help.openai.com/en/articles/5955604
- OpenAI 開發者文檔:Spend limits — https://developers.openai.com/api/docs/guides/spend-limits
- OpenAI 幫助中心:Setting up and managing prepaid API billing — https://help.openai.com/en/articles/8264644-setting-up-and-managing-prepaid-api-billing
- OpenAI 幫助中心:Troubleshooting API errors and latency — https://help.openai.com/en/articles/1000499-troubleshooting-api-errors-and-latency
- openai-python 官方倉庫 README(Retries、Handling errors)— https://github.com/openai/openai-python
- OpenAI 開發者文檔:Batch API — https://developers.openai.com/api/docs/guides/batch
- OpenAI Status — https://status.openai.com/
0 條評論
還沒有評論,來搶沙發~