Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'API OpenAI restituisce 429 con il tipo di errore insufficient_quota quando il tuo account ha esaurito i crediti o supera un limite di spesa o di utilizzo. Si tratta dello stesso codice di stato di un limite di frequenza, ma aspettare qualche secondo non risolverà il problema. L'accesso viene ripristinato solo dopo che un utente aggiunge crediti, aumenta un limite o il periodo mensile viene reimpostato. OpenAI indica che ritentare dopo errori di fatturazione, spesa o quota non ripristinerà l'accesso all'API e che è necessario esaminare error.code per trovare la causa specifica. Per altre informazioni, vedere Codici di errore.
Come si presentano gli errori di quota di OpenAI
Ognuno di questi errori restituisce 429. L'oggetto error.type può ancora essere insufficient_quota, quindi controlla error.code per sapere quale hai ottenuto.
error.code |
Che cosa significa | Come si recupera l'accesso |
|---|---|---|
credit_balance_exhausted |
L'organizzazione non ha più crediti prepagati. | Aggiungere crediti. |
organization_spend_limit_exceeded |
L'organizzazione ha raggiunto il limite di spesa mensile complessivamente in tutti i progetti. | Aumentare o rimuovere il limite oppure attendere la reimpostazione mensile. |
project_spend_limit_exceeded |
Il progetto ha raggiunto il limite di spesa mensile. Altri progetti continuano a funzionare. | Aumentare o rimuovere il limite del progetto o attendere la reimpostazione mensile. |
organization_usage_limit_exceeded |
L'organizzazione ha raggiunto il limite di utilizzo mensile assegnato da OpenAI. È separato dai limiti di spesa impostati. | Richiedere un limite approvato superiore o contattare il supporto OpenAI. |
Confrontare questi errori con gli errori "Limite di richieste raggiunto", ad esempio rate_limit_exceeded e slow_down. Questi sono temporanei e un nuovo tentativo dopo un breve attesa di solito funziona. Per altre informazioni, vedere Errori "Limite di frequenza raggiunto" di OpenAI.
Come gestire gli errori di quota OpenAI
- Leggi
error.code, non solo lo stato. Un429solo non ti dice se riprovare. Considera i 4 codici nella tabella come "stop" e i codici di limitazione della frequenza come "wait and retry". - Smetti di riprovare. Non inviare di nuovo la richiesta e non lasciare che un ciclo di ripetizione continui a chiamare l'API. Fino a quando qualcuno non corregge il problema di fatturazione, ogni richiesta non riesce allo stesso modo.
- Sospendi le chiamate che fallirebbero. Un errore di quota significa che anche le richieste successive della stessa organizzazione o dello stesso progetto falliscono anch'esse. Ignorarli anziché inviarli e attendere che si verifichi l'errore.
- Informa l'utente. Spiega che la funzionalità di intelligenza artificiale non è disponibile per il momento e mantieni funzionante il resto dell'app.
- Imposta un avviso. Registra il codice con gravità elevata o avvisa chi si occupa della fatturazione. La correzione è esterna al codice, quindi qualcuno deve esserne a conoscenza.
OpenAI Python SDK ritenta 429 le risposte 2 volte per impostazione predefinita. Indipendentemente dai tentativi, il tuo codice alla fine restituisce RateLimitError con il codice di fatturazione ed è qui che si arresta:
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
Il flag rimane impostato fino al riavvio dell'app. Reimpostalo in un altro modo se l'app viene eseguita per molto tempo, ad esempio con un'azione di amministratore dopo che qualcuno risolve un problema di fatturazione.
Come testare che l'app gestisca gli errori di quota OpenAI
Raramente viene visualizzato un errore di quota durante lo sviluppo. L'account di test ha crediti e l'utilizzo è basso. Il modo in cui si testa la gestione delle quote decide quindi se si trovano i bug prima che i tuoi utenti lo facciano.
| Avvicinarsi | Cosa trovi | Quello che ti manca |
|---|---|---|
| Attendere la messa in produzione | Guasti reali | Tutto, fino a quando un utente non lo attiva e la funzionalità di intelligenza artificiale rimane inattiva finché qualcuno non se ne accorge |
| Simula l'API nei test oppure consenti all'agente di programmazione di scrivere il mock | Indica se il branch di stop viene eseguito | Il corpo e i codici di errore reali di OpenAI e la politica di ritentativo dell'SDK. L'app richiede anche un interruttore di sola prova per raggiungere il mock. |
| Esaurire i crediti reali o impostare un limite di spesa molto basso | Comportamento reale | Costa denaro e blocca ogni altra app che condivide l'organizzazione o il progetto |
| Intercettare il traffico reale dell'app e restituire errori di quota su richiesta | URL reali, l'SDK reale e i criteri di ripetizione dei tentativi e il formato di errore di OpenAI | Niente nella tua app cambia, quindi non testa il codice in isolamento. Mantieni gli unit test per quello. |
Provalo nella tua app
Dev Proxy intercetta le richieste dell'app a api.openai.com e restituisce errori OpenAI, mentre l'app continua a chiamare gli URL reali. Il openai-throttling set di impostazioni combina un credit_balance_exhausted errore con gli errori di limitazione della frequenza. Restituisce 429 con tipo insufficient_quota e nessuna Retry-After intestazione, quindi puoi verificare che l'app si arresti invece di riprovare.
Scaricare il set di impostazioni e avviare Dev Proxy con esso:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Per testare solo gli errori di quota, modificare il file del preset openai-errors.json e mantenere solo la risposta credit_balance_exhausted. Per testare i codici limite di spesa e utilizzo, aggiungere risposte con la stessa forma e un oggetto diverso code.
Eseguire quindi l'app come di consueto e osservare cosa fa. Per installare Dev Proxy, vedere Configurare Dev Proxy.