OpenAI insufficient_quota與credit_balance_exhausted:為何重試無濟於事

當你的帳戶用盡點數或超過消費或使用限制時,OpenAI API 會回傳 429 錯誤類型 insufficient_quota 。 它的狀態碼和速率限制一樣,但等幾秒鐘也解決不了。 只有在有人加點數、提高限制或每月期間重置後,才能恢復使用權。 OpenAI 表示,重新嘗試計費、支出或配額相關操作無法恢復 API 存取權,建議你檢查 error.code 以找出具體原因。 欲了解更多資訊,請參閱 錯誤代碼。

OpenAI 的配額錯誤長什麼樣子

這些錯誤中每個都會回傳 429。 error.type仍然可能是insufficient_quota,所以請確認error.code你拿到的是哪一種。

error.code 這是什麼意思? 存取權如何恢復
credit_balance_exhausted 您的組織已經沒有預付餘額了。 新增點數。
organization_spend_limit_exceeded 您的組織在所有專案中都達到了每月支出上限。 可以提高或取消限制,或等待每月重置。
project_spend_limit_exceeded 該計畫達到每月支出上限。 其他專案則持續運作。 可以提高或移除專案的上限,或等待每月重置。
organization_usage_limit_exceeded 貴組織已達到 OpenAI 指定給貴組織的每月使用上限。 這和你設定的支出上限是分開的。 申請提高核准額度,或聯絡 OpenAI 支援團隊。

將這些與「速率上限已達」錯誤(如 rate_limit_exceeded 和 slow_down)比較。 這些都是暫時的,等一會兒重試通常都行。 欲了解更多資訊,請參閱 OpenAI「速率上限已達」錯誤。

如何處理 OpenAI 配額錯誤

  1. 查看 error.code,不要只看狀態。 單靠 429 並無法判斷是否需要重試。 將表中的 4 個代碼視為「停止」,並將速率限制代碼視為「等待後重試」。
  2. 停止重試。 不要再傳送請求,也不要讓重試迴圈一直呼叫 API。 在有人修復帳單問題之前,每次請求都會以同樣方式失敗。
  3. 暫停那些會失敗的呼叫。 一旦配額錯誤,下一個來自同一組織或專案的請求也會失敗。 跳過它們,不要每張都寄出再等到出現錯誤。
  4. 告訴使用者。 說明 AI 功能目前無法使用,並保持應用程式其他功能正常運作。
  5. 為自己設定提醒 將此代碼記錄為高嚴重性,或通知帳務負責人。 修正不在你的程式碼裡,所以需要有人知道這件事。

OpenAI Python SDK 預設會將429回應重試 2 次。 不管它重試什麼,你的程式碼最終都會隨著帳單代碼取得 RateLimitError,而那就是你要停止的地方:

import logging

import openai
from openai import OpenAI

client = OpenAI()
logger = logging.getLogger(__name__)

BILLING_CODES = {
    "credit_balance_exhausted",
    "organization_spend_limit_exceeded",
    "project_spend_limit_exceeded",
    "organization_usage_limit_exceeded",
}
billing_error: str | None = None


def ask(prompt: str) -> str:
    global billing_error
    if billing_error:
        raise RuntimeError("AI features are paused until billing is fixed.")
    try:
        response = client.responses.create(model="gpt-4.1", input=prompt)
        return response.output_text
    except openai.RateLimitError as error:
        if error.code in BILLING_CODES:
            billing_error = error.code
            logger.critical("OpenAI billing error: %s", error.code)
        raise

這個旗標會一直保持在你的應用程式重新啟動前保持不變。 如果你的應用程式運行時間很長,可以用另一種方式清除,例如有人修復帳單後用管理員操作。

如何測試你的應用程式是否能處理 OpenAI 配額錯誤

在開發時,你很少會看到配額錯誤。 你的測試帳號有點數,使用量也很低。 所以你測試配額處理的方式,決定了你是否比使用者先發現錯誤。

Approach 你發現的 你錯過了什麼
等待正式環境 實際失敗 一切正常,直到有使用者按下去,而 AI 功能就會一直停用,直到有人注意到為止
在測試中模擬 API,或讓你的編碼代理寫出模擬 不管你的停止分支是否運行 OpenAI 的真實錯誤回應本文和代碼,以及你的 SDK 重試政策。 你的應用程式也需要一個僅供測試使用的開關來連到模擬環境。
用掉你的實際點數,或設定一點點花費上限 實際行為 它需要付費,且會阻止與其共用同一組織或專案的其他應用程式
攔截你應用程式的真實流量,並按需回傳配額錯誤 真實網址、真實的 SDK 與重試政策,以及 OpenAI 自有的錯誤格式 你的應用程式中的任何內容都不會改變,所以它不會在隔離狀態下測試你的程式碼。 那件事就留給單元測試吧。

在你的應用程式中試試看

Dev Proxy 會攔截你應用程式對 api.openai.com 的請求,並回傳 OpenAI 錯誤,而你的應用程式則持續呼叫真實的 URL。 預設 openai-throttling 會將 credit_balance_exhausted 錯誤混入速率限制錯誤中。 它會回傳 429 有型別 insufficient_quota 但沒有 Retry-After 標頭,所以你可以檢查應用程式是否停止,而不是重試。

下載預設集,並用它啟動 Dev Proxy:

devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"

只測試配額錯誤時,編輯預設集的 openai-errors.json 檔案並只保留 credit_balance_exhausted 回應。 要測試支出和使用限制碼,加入形狀相同但 code 不同的回應。

然後照常執行你的應用程式,觀察它的表現。 要安裝 Dev Proxy,請參見 設定 Dev Proxy。

下一步

也請參閱