Verifica come l'app gestisce i limiti di velocità di OpenAI

A colpo d'occhio
Obiettivo: Testare il modo in cui l'app gestisce il limite di frequenza OpenAI e gli errori di overload
Tempo: 10 minuti
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Prerequisiti:Configurare il proxy di sviluppo

La tua app funziona in fase di sviluppo, poi non funziona in produzione con 429 Too Many Requests. I limiti di frequenza OpenAI dipendono dal livello di utilizzo dell'organizzazione, dal modello e da tutti gli altri utenti che usano la stessa organizzazione, quindi non puoi raggiungerli intenzionalmente in modo affidabile. Dev Proxy restituisce gli stessi errori restituiti dall'API OpenAI, in modo da poter vedere come si comporta l'app prima che lo facciano gli utenti.

Scopri cosa restituisce OpenAI

Non tutti gli errori OpenAI indicano "riprova". L'app deve distinguerle.

Status error.code Che cosa significa Operazioni da eseguire nell'app
429 rate_limit_exceeded È stato raggiunto il limite di richieste al minuto (RPM) o token al minuto (TPM). Attendere il tempo indicato nell'intestazione Retry-After, quindi riprovare.
429 slow_down Il tuo tasso di richieste è aumentato troppo rapidamente, anche se rientri nei limiti. Attendere Retry-After, ridurre la frequenza delle richieste e aumentarla gradualmente.
429 credit_balance_exhausted L'organizzazione non ha più crediti prepagati. Non riprovare. Riprovare non ripristinerà l'accesso. Informare l'utente o avvisare un amministratore.
503 server_is_overloaded Il modello non ha una capacità sufficiente al momento. Attendere Retry-After se presente, quindi riprovare con ritardi crescenti.

Per l'elenco completo, vedere Codici di errore nella documentazione di OpenAI.

Important

Tutti e 3 gli errori nelle 429 righe usano lo stesso codice di stato. Se l'app ritenta ogni 429, continua a ripetere gli errori di fatturazione che non si risolvono mai. Controlla error.code per decidere cosa fare.

Scopri cosa fa per te l'SDK OpenAI

Gli SDK OpenAI ufficiali per Python e JavaScript riprovano le risposte 408, 409, 429 e 5xx e gli errori di connessione, 2 volte per impostazione predefinita con backoff esponenziale. È possibile cambiarlo con l'opzione max_retries in Python e maxRetries in JavaScript.

I tentativi dell’SDK coprono brevi raffiche. L'app deve comunque decidere cosa accade quando si esauriscono i tentativi e come gestire gli errori che i tentativi non risolvono. In Python, un 429 genera RateLimitError e un 503 genera InternalServerError, quindi gestiscili entrambi.

Tip

Per visualizzare esattamente ciò che il codice di gestione degli errori riceve, impostare max_retries=0 (Python) o maxRetries: 0 (JavaScript) durante il test. Riattiva successivamente i tentativi dell'SDK.

Simula i limiti di frequenza di OpenAI

Il proxy di sviluppo ha una preimpostazione con gli errori OpenAI nella tabella. Scaricalo:

devproxy config get openai-throttling

Avvia Dev Proxy con il predefinito:

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

Il set di impostazioni non riesce a elaborare il 90% delle richieste a https://api.openai.com/* con un errore casuale dalla tabella. Per le risposte di limitazione della frequenza, imposta l'intestazione Retry-After e usa RetryAfterPlugin per verificare che l'app attenda tale tempo prima di chiamare nuovamente l'API.

Assicurarsi che l'app invii le richieste tramite Dev Proxy e consideri attendibile il certificato del proxy di sviluppo. Per Node.js, vedere Usare Dev Proxy con applicazioni Node.js. Per altri runtime, vedere Risolvere i problemi relativi al proxy di sviluppo.

Eseguire l'app e verificare che:

  • Dopo un errore rate_limit_exceeded o slow_down, l'app attende il tempo Retry-After. Se chiama l'API troppo presto, Dev Proxy lo segnala e limita la richiesta.
  • Dopo un credit_balance_exhausted errore, l'app smette di chiamare l'API e visualizza un messaggio chiaro.
  • Dopo un errore server_is_overloaded, l'app ritenta con un ritardo e, quando i tentativi si esauriscono, esegue il fallback o visualizza un messaggio chiaro anziché uno stack trace.
  • L'app non fa perdere il lavoro svolto. Ad esempio, una conversazione di chat lunga o un processo batch continuano dopo l'errore.

Per modificare la frequenza con cui le richieste hanno esito negativo, usare l'opzione --failure-rate . Ad esempio, per far fallire ogni richiesta:

devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json" --failure-rate 100

Simula i limiti dei token per Azure OpenAI e altri provider

Il set di impostazioni restituisce errori in modo casuale, indipendentemente dal numero di token usati dall'app. Per limitare le richieste in base all'uso effettivo dei token, ad esempio per vedere cosa accade quando una conversazione lunga supera il limite di TPM, usare LanguageModelRateLimitingPlugin. Funziona con qualsiasi API compatibile con OpenAI, inclusi Azure OpenAI e i modelli locali. Per altre informazioni, vedere Testare i limiti dei token del modello linguistico.

Passaggio successivo

Scopri come simulare i limiti basati su token.

Vedere anche