Testen, wie Ihre App OpenAI-Ratelimits behandelt

Auf einen Blick
Ziel: Testen, wie Ihre App OpenAI-Ratelimit- und Überladungsfehler behandelt
Zeit: 10 Minuten
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Voraussetzungen:Einrichten des Dev-Proxys

Ihre App arbeitet in der Entwicklung und schlägt dann in der Produktion mit 429 Too Many Requests fehl. OpenAI-Ratenbeschränkungen hängen von der Nutzungsstufe Ihrer Organisation, Ihrem Modell und allen anderen Personen ab, die dieselbe Organisation verwenden, sodass Sie sie nicht zuverlässig gezielt erreichen können. Dev Proxy gibt die gleichen Fehler zurück, die die OpenAI-API zurückgibt, sodass Sie sehen können, welche Auswirkungen dies auf Ihre App hat, bevor Ihre Benutzer sie bemerken.

Was OpenAI zurückgibt

Nicht jeder OpenAI-Fehler bedeutet „Erneut versuchen“. Ihre App muss sie unterscheiden.

Status error.code Was dies bedeutet Was Ihre App tun sollte
429 rate_limit_exceeded Sie haben Ihren Grenzwert für Anfragen pro Minute (RPM) oder Token pro Minute (TPM) erreicht. Warten Sie, bis die Zeit in der Retry-After Kopfzeile angezeigt wird, und versuchen Sie es dann erneut.
429 slow_down Ihre Anfragerate ist zu schnell gestiegen, auch wenn Sie sich innerhalb Ihrer Limits befinden. Warten Sie Retry-After, reduzieren Sie Ihre Anforderungsrate und erhöhen Sie sie schrittweise.
429 credit_balance_exhausted Ihre Organisation hat kein Prepaid-Guthaben mehr. Versuchen Sie es nicht erneut. Ein erneuter Versuch stellt den Zugriff nicht wieder her. Informieren Sie den Benutzer, oder benachrichtigen Sie einen Administrator.
503 server_is_overloaded Das Modell verfügt derzeit nicht über genügend Kapazität. Warten Sie ggf. auf Retry-After, und versuchen Sie es dann erneut mit zunehmenden Verzögerungen.

Die vollständige Liste finden Sie in der OpenAI-Dokumentation unter Fehlercodes .

Important

Alle drei Fehler in den 429 Zeilen verwenden denselben Statuscode. Wenn Ihre App bei jedem 429-Fehler erneut versucht, versucht sie Abrechnungsfehler immer wieder erneut, die sich nie beheben. Überprüfen Sie error.code, um zu entscheiden, was zu tun ist.

Wissen Sie, was das OpenAI SDK für Sie tut

Die offiziellen OpenAI-SDKs für Python und JavaScript versuchen Anfragen bei 408-, 409-, 429- und 5xx-Antworten sowie bei Verbindungsfehlern standardmäßig 2 Mal mit exponentiellem Backoff erneut. Sie können dies mit der max_retries Option in Python und maxRetries in JavaScript ändern.

SDK-Wiederholungsversuche decken kurze Ausfälle ab. Ihre App muss immer noch entscheiden, was passiert, wenn die Wiederholungsversuche aufgebraucht sind, und wie mit Fehlern umgegangen wird, die durch Wiederholen nicht behoben werden. In Python wirft eine 429 RateLimitError und eine 503 wirft InternalServerError, also beide behandeln.

Tip

Um genau zu sehen, was Ihr Fehlerbehandlungscode empfängt, legen Sie max_retries=0 (Python) oder maxRetries: 0 (JavaScript) fest, während Sie testen. Aktivieren Sie anschließend die SDK-Wiederholungen wieder.

OpenAI-Ratenlimits simulieren

Dev Proxy verfügt über eine Voreinstellung für die in der Tabelle aufgeführten OpenAI-Fehler. Laden Sie es herunter:

devproxy config get openai-throttling

Starten Sie Dev Proxy mit der Voreinstellung:

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

Bei 90 % der Anfragen an https://api.openai.com/* schlägt die Voreinstellung mit einem zufälligen Fehler aus der Tabelle fehl. Bei Drosselungsantworten wird der Retry-After Header festgelegt und der RetryAfterPlugin verwendet, um zu überprüfen, ob Ihre App so lange wartet, bevor sie die API erneut aufruft.

Stellen Sie sicher, dass Ihre App ihre Anfragen über Dev Proxy sendet und dem Dev Proxy-Zertifikat vertraut. Informationen zu Node.js finden Sie unter Verwenden Sie Dev Proxy mit Node.js-Anwendungen. Informationen zu anderen Laufzeiten finden Sie unter Problembehandlung für Dev Proxy.

Führen Sie Ihre App aus, und überprüfen Sie Folgendes:

  • Nach einem rate_limit_exceeded- oder slow_down-Fehler wartet die App auf die Retry-After Zeit. Wenn die API zu früh aufgerufen wird, meldet Dev Proxy dies und drosselt die Anforderung.
  • Nach einem credit_balance_exhausted Fehler ruft Ihre App die API nicht mehr auf und zeigt eine klare Meldung an.
  • Nach einem server_is_overloaded Fehler versucht Ihre App es nach einer Verzögerung erneut und, wenn keine Wiederholungsversuche mehr übrig sind, wird stattdessen ein Fallback verwendet oder eine eindeutige Meldung anstelle einer Stapelablaufverfolgung angezeigt.
  • Mit Ihrer App gehen keine Änderungen verloren. Beispielsweise wird nach dem Fehler eine lange Chatunterhaltung oder ein Batchauftrag fortgesetzt.

Verwenden Sie die --failure-rate Option, um zu ändern, wie oft Anfragen fehlschlagen. Zum Beispiel, um jede Anfrage fehlschlagen zu lassen:

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

Tokengrenzwerte für Azure OpenAI und andere Anbieter simulieren

Die Voreinstellung gibt Fehler nach dem Zufallsprinzip zurück, unabhängig davon, wie viele Token Ihre App verwendet. Um Anforderungen basierend auf der tatsächlichen Tokenverwendung zu drosseln, z. B. um zu sehen, was passiert, wenn eine lange Unterhaltung über Ihren TPM-Grenzwert geht, verwenden Sie LanguageModelRateLimitingPlugin. Es funktioniert mit jeder openAI-kompatiblen API, einschließlich Azure OpenAI und lokalen Modellen. Weitere Informationen finden Sie unter Tokenlimits für das Test-Sprachmodell.

Nächster Schritt

Erfahren Sie, wie Sie tokenbasierte Grenzwerte simulieren.

Siehe auch