Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Api's voor taalmodel beperken uw verkeer op twee manieren tegelijk: hoeveel aanvragen u per minuut (RPM) verzendt en hoeveel tokens u per minuut (TPM) gebruikt. U kunt ruim onder uw verzoekslimiet blijven en nog steeds worden beperkt door throttling omdat een paar lange prompts uw tokenbudget hebben gebruikt. Wanneer u een van beide limieten bereikt, antwoordt de API met 429 Too Many Requests en moet uw app wachten.
Hoe OpenAI, Azure OpenAI en Anthropic tellen
| Provider | Beperkingen | Wat je moet weten |
|---|---|---|
| OpenAI | RPM, aanvragen per dag, TPM, tokens per dag en meer, per organisatie en project, per model | U bereikt de limiet die het eerst wordt bereikt. Voor de tokenlimiet geldt het hoogste van max_tokens en een schatting op basis van de tekens. Ook het aantal mislukte aanvragen. |
| Azure OpenAI | TPM die u aan elke implementatie toewijst, plus een RPM-limiet die is ingesteld in verhouding daartoe | RPM wordt gecontroleerd op vensters van 1 of 10 seconden, dus een burst krijgt een 429, zelfs wanneer het totaal per minuut prima is. De schatting van het token omvat max_tokens. |
| Antropisch | RPM, invoertokens per minuut (ITPM), en uitvoertokens per minuut (OTPM), per model | Capaciteit wordt continu aangevuld en 60 RPM kan worden afgedwongen als 1 verzoek per seconde. Voor de meeste modellen tellen invoertokens in de cache niet mee voor ITPM, en max_tokens telt niet mee voor OTPM. |
Als u max_tokens instelt op 4.000 en 200 tokens terugkrijgt, tellen OpenAI en Azure OpenAI die 4.000 nog steeds mee voor uw limiet. Zo kunt u 429's krijgen terwijl uw gebruiksstatistieken ruim onder uw quotum lijken te liggen.
Wat betekent een 429 voor elke provider
Niet elke 429 verdwijnt als je wacht.
| Provider | Wacht en probeer het opnieuw | Stop en vertel het aan iemand |
|---|---|---|
| OpenAI | 429 voor verzoeken of tokens, 429 slow_down (je verkeer nam te snel toe, zelfs binnen je limieten) en 503 server_is_overloaded. Wacht op Retry-After als het aanwezig is. |
429 met credit_balance_exhausted, organization_spend_limit_exceeded, project_spend_limit_exceededof organization_usage_limit_exceeded in error.code. Opnieuw proberen herstelt de toegang niet. |
| Azure OpenAI | 429 voor de TPM of RPM van de implementatie, voor de systeemcapaciteit of voor een tijdelijke verlaging van uw ratelimiet. Wacht op retry-after-ms. |
Aanhoudende 429-fouten in productie terwijl u onder uw goedgekeurde quotum zit. Controleer de TPM-toewijzing van de implementatie en open daarna een ondersteuningsverzoek. |
| Antropisch | 429 rate_limit_error met een retry-after header, inclusief snelheidslimieten na een scherpe toename van het gebruik, en 529 overloaded_error. |
429 voor de maandelijkse uitgavenlimiet. Het heeft geen retry-after header, error.details.error_code is enforced_spend_limit_reached en het blijft mislukken totdat de toegang wordt hervat. |
Omgaan met LLM-rate limits
- Controleer welke 429 je hebt. Facturerings-, bestedings- en quotumfouten vereisen menselijke tussenkomst, geen nieuwe poging.
- Wacht zolang als de API aangeeft. OpenAI en Anthropic verzenden
retry-afterin seconden. Azure OpenAI stuurtretry-after-msin milliseconden. Zonder hint moet u de wachttijd exponentieel verhogen met een willekeurige variatie, en zowel het aantal pogingen als de totale tijd beperken. - Weet wat uw SDK al doet. De OpenAI- en Anthropic-Python SDK's proberen verbindingsfouten en
408,409,429en 5xx-antwoorden standaard 2 keer opnieuw. Als u uw eigen retrylus toevoegt, schakelt u de retry's van de SDK uit, bijvoorbeeld metmax_retries=0in Python, zoals Azure OpenAI aanbeveelt, anders wordt het aantal pogingen vermenigvuldigd. - Verklein wat ertoe doet. Stel
max_tokensop OpenAI en Azure OpenAI in op bijna de antwoordgrootte die u verwacht. Sla op Anthropic herhaalde inhoud op in de cache, zoals systeeminstructies. - Voer geleidelijk op. Een scherpe sprong in aanvragenverkeer activeert
slow_downde snelheidslimieten van OpenAI en Anthropic, zelfs binnen uw grenzen. OpenAI suggereert dat wanneer u 1 miljoen invoertokens per minuut hebt bereikt, u elke 15 minuten met niet meer dan 50% groeit. - Een stream die u al hebt geconsumeerd, niet opnieuw afspelen. Een fout nadat een stream is gestart, kan binnenkomen als een streamgebeurtenis, en OpenAI raadt af om een aanvraag automatisch opnieuw af te spelen nadat u de uitvoer hebt verbruikt.
- Laat de gebruiker weten wanneer een aanvraag vastloopt door een 429-fout, in plaats van een spinner weer te geven.
Hoe u kunt testen of uw app LLM-frequentielimieten verwerkt
| Approach | Wat u vindt | Wat u mist |
|---|---|---|
| Mock de SDK client in je tests, of laat je codeeragent de mock schrijven | Of uw foutbranch wordt uitgevoerd | De echte statuscodes, foutcodes en headers van de provider en de eigen herhalingspogingen van uw SDK. Uw app heeft ook een schakelaar alleen voor testdoeleinden nodig om de mock te bereiken. |
| Roep de echte API aan totdat u door de API wordt beperkt in het aantal aanvragen | Werkelijk gedrag | U betaalt voor elk token en u kunt geen slow_down, overbelasting of een bestedingslimiet op aanvraag activeren |
| Onderschep het werkelijke verkeer van uw app en retourneer de fouten van de provider, of pas throttling toe op basis van de tokens die uw app gebruikt | Echte URL's, het beleid voor opnieuw proberen van uw SDK en de foutteksten van de provider, met een limiet die u kiest | Uw code op zichzelf. Bewaar je unittests daarvoor. |
Probeer het in uw app
Dev Proxy onderschept de aanvragen van uw app naar de taalmodel-API en geeft de foutmeldingen van de provider door, terwijl uw app de echte URL blijft aanroepen. Voor OpenAI downloadt u de preset en start u Dev Proxy met deze preset:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
De openai-throttling voorinstelling faalt bij 90% van de aanvragen naar https://api.openai.com/* met een willekeurige fout: rate_limit_exceeded voor TPM of RPM, slow_down, credit_balance_exhausted of 503 server_is_overloaded. De anthropic-throttling voorinstelling doet hetzelfde voor https://api.anthropic.com/* met RPM, invoertoken, uitvoertoken en versnelling 429s en 529 overloaded_error. Beide voorinstellingen bevatten de RetryAfterPlugin, waarmee wordt aangegeven wanneer uw app de API opnieuw aanroept voordat de retry-after wachttijd voor een 429 is verstreken. De 503- en 529-antwoorden worden niet gecontroleerd.
Om te beperken op basis van de tokens die uw app daadwerkelijk gebruikt, gebruikt u de LanguageModelRateLimitingPlugin. Het telt de prompt- en voltooiingstokens die elke respons rapporteert en retourneert 429 met retry-after wanneer uw app over de limieten gaat die u hebt ingesteld. Het werkt met OpenAI-compatibele API's, waaronder Azure OpenAI en lokale modellen:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "LanguageModelRateLimitingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "languageModelRateLimitingPlugin"
}
],
"urlsToWatch": [
"https://api.openai.com/*",
"https://*.openai.azure.com/openai/deployments/*/chat/completions*"
],
"languageModelRateLimitingPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 60
}
}
De invoegtoepassing reproduceert de max_tokens schatting niet. De standaardtekst van 429 gebruikt de insufficient_quota code. Als u de fouttekst wilt retourneren die uw app verwacht voor een frequentielimiet, stelt u whenLimitExceeded in op Custom en wijst u customResponseFile naar uw eigen antwoord. Zie Dev Proxy instellen om Dev Proxy te installeren.