LLM-ratelimieten: tokens per minuut, aanvragen per minuut en wat er gebeurt wanneer u ze bereikt

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

  1. Controleer welke 429 je hebt. Facturerings-, bestedings- en quotumfouten vereisen menselijke tussenkomst, geen nieuwe poging.
  2. Wacht zolang als de API aangeeft. OpenAI en Anthropic verzenden retry-after in seconden. Azure OpenAI stuurt retry-after-ms in milliseconden. Zonder hint moet u de wachttijd exponentieel verhogen met een willekeurige variatie, en zowel het aantal pogingen als de totale tijd beperken.
  3. Weet wat uw SDK al doet. De OpenAI- en Anthropic-Python SDK's proberen verbindingsfouten en 408, 409, 429 en 5xx-antwoorden standaard 2 keer opnieuw. Als u uw eigen retrylus toevoegt, schakelt u de retry's van de SDK uit, bijvoorbeeld met max_retries=0 in Python, zoals Azure OpenAI aanbeveelt, anders wordt het aantal pogingen vermenigvuldigd.
  4. Verklein wat ertoe doet. Stel max_tokens op OpenAI en Azure OpenAI in op bijna de antwoordgrootte die u verwacht. Sla op Anthropic herhaalde inhoud op in de cache, zoals systeeminstructies.
  5. Voer geleidelijk op. Een scherpe sprong in aanvragenverkeer activeert slow_down de 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.
  6. 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.
  7. 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.

Volgende stappen 

Zie ook