Limity LLM: tokeny za minutu, žádosti za minutu a co se stane, když jich dosáhnete

Rozhraní API jazykového modelu omezují vaše využití 2 způsoby najednou: kolik požadavků odesíláte za minutu (RPM) a kolik tokenů použijete za minutu (TPM). Můžete zůstat hluboko pod limitem požadavků a přesto vám může být omezen přístup, protože několik dlouhých promptů vyčerpalo váš tokenový rozpočet. Když dosáhnete některého z limitů, rozhraní API odpoví pomocí 429 Too Many Requests a vaše aplikace musí počkat.

Jak OpenAI, Azure OpenAI a Anthropic počítají

Provider Co je omezeno Co byste měli vědět
OpenAI RPM, požadavky za den, TPM, tokeny za den a další, na organizaci a projekt, na model Narazíte na ten limit, na který narazíte jako první. V případě limitu tokenů se požadavek počítá podle vyšší z hodnot max_tokens a odhadu na základě počtu znaků. Počet neúspěšných požadavků také.
Azure OpenAI TPM, který přiřadíte každému nasazení, a limit RPM nastavený v poměru k němu RpM se kontroluje přes okna 1 nebo 10 sekund, takže krátká špička dostane 429, i když je celkový počet za minutu v pořádku. Odhad tokenu zahrnuje max_tokens.
Anthropic RPM, vstupní tokeny za minutu (ITPM) a výstupní tokeny za minutu (OTPM) na model Kapacita se průběžně doplňuje a 60 RPM se může vynucovat jako 1 požadavek za sekundu. U většiny modelů se vstupní tokeny uložené v mezipaměti nezapočítávají do ITPM a max_tokens se nezapočítává do OTPM.

Pokud nastavíte max_tokens hodnotu 4 000 a získáte zpět 200 tokenů, OpenAI a Azure OpenAI stále počítají 4 000 do vašeho limitu. Takto můžete dostávat chyby 429, zatímco metriky využití vypadají výrazně pod vaší kvótou.

Co znamená 429 u jednotlivých poskytovatelů

Ne každá chyba 429 zmizí, pokud čekáte.

Provider Počkejte a zkuste to znovu Zastavte se a řekněte někomu
OpenAI 429 pro požadavky nebo tokeny, 429 slow_down (objem vašich požadavků narostl příliš rychle, i v rámci vašich limitů) a 503 server_is_overloaded. Počkejte na Retry-After, když je k dispozici. 429 s credit_balance_exhausted, organization_spend_limit_exceeded, project_spend_limit_exceedednebo organization_usage_limit_exceeded v error.code. Opakováním se neobnoví přístup.
Azure OpenAI 429 pro TPM nebo RPM nasazení, pro systémovou kapacitu nebo pro dočasné snížení limitu požadavků. Počkejte na retry-after-ms. Opakované chyby 429 v produkčním prostředí, zatímco jste pod schválenou kvótou. Zkontrolujte přidělení čipu TPM nasazení a otevřete žádost o podporu.
Anthropic 429 rate_limit_error s hlavičkou retry-after, včetně limitů akcelerace po prudkém nárůstu využití, a 529 overloaded_error. 429 pro měsíční limit útraty. Nemá žádné retry-after záhlaví, je enforced_spend_limit_reacheda stále selhává, error.details.error_code dokud se přístup neobnoví.

Zpracování limitů přenosové rychlosti LLM

  1. Zkontrolujte, kterou chybu 429 jste obdrželi. Chyby fakturace, útraty a kvóty vyžadují osobu, nikoli opakovaný pokus.
  2. Počkejte tak dlouho, jak rozhraní API vyžaduje. OpenAI a Anthropic odesílají retry-after v sekundách. Azure OpenAI odesílá retry-after-ms v milisekundách. Bez nápovědy se exponenciálně vypněte s náhodným zpožděním a zapněte počet pokusů i celkový čas.
  3. Zjistěte, co vaše sada SDK už dělá. OpenAI a Anthropic Python SDK ve výchozím nastavení 2krát opakují pokusy při chybách připojení a odpovědích 408, 409, 429 a 5xx. Pokud přidáte vlastní smyčku opakování, vypněte opakování sady SDK, například max_retries=0 v Python, jak Azure OpenAI doporučuje nebo se pokusy násobí.
  4. Zmenšete to, na čem záleží. U OpenAI a Azure OpenAI nastavte max_tokens blízko očekávané velikosti odpovědi. Na Anthropic ukládáte do mezipaměti opakovaný obsah, jako jsou systémové instrukce.
  5. Postupně zvyšujte. Prudký nárůst provozu spustí limity akcelerace OpenAI slow_down a Anthropicu, a to i v rámci vašich limitů. OpenAI naznačuje, že jakmile dosáhnete 1 milionu vstupních tokenů za minutu, zvýšíte se o ne více než 50 % každých 15 minut.
  6. Nepřehrávejte stream, který jste už přehráli. Chyba po spuštění datového proudu může dorazit jako událost datového proudu a OpenAI nedoporučuje po spotřebovaném výstupu automaticky opakovat požadavek.
  7. Řekněte uživateli, když se požadavek zasekne kvůli chybě 429, místo zobrazení indikátoru načítání.

Jak otestovat, že aplikace zpracovává limity počtu požadavků LLM

Approach Co najdete Co vám chybí
Mockujte klienta SDK ve svých testech nebo nechte svého programovacího agenta napsat mock Zda se spustí vaše chybová větev Skutečné stavové kódy, kódy chyb a hlavičky poskytovatele a vlastní opakované pokusy sady SDK. Vaše aplikace také potřebuje testovací přepínač pro přístup k mocku.
Volejte skutečné rozhraní API, dokud vás nezačne omezovat Reálné chování Platíte za každý token a nemůžete na požádání vyvolat slow_down, přetížení ani limit útraty.
Zachyťte skutečný provoz vaší aplikace a vraťte chyby poskytovatele nebo omezte na základě tokenů, které vaše aplikace používá Skutečné adresy URL, zásady opakovaných pokusů vaší sady SDK a těla chybových odpovědí poskytovatele s limitem, který zvolíte Váš kód samostatně. Na to si nechte jednotkové testy.

Vyzkoušejte si ji ve své aplikaci

Dev Proxy zachycuje požadavky vaší aplikace na rozhraní API jazykového modelu a vrací vlastní chyby poskytovatele, zatímco vaše aplikace pořád volá skutečnou adresu URL. V případě OpenAI si stáhněte předvolbu a spusťte s ní Dev Proxy:

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

openai-throttling Předvolba selže u 90 % požadavků na https://api.openai.com/* s náhodnou chybou: rate_limit_exceeded pro TPM nebo RPM, slow_down, credit_balance_exhausted nebo 503 server_is_overloaded. Předvolba anthropic-throttling dělá totéž pro https://api.anthropic.com/* s RPM, vstupními tokeny, výstupními tokeny a akceleračními 429 a 529 overloaded_error. Obě přednastavení zahrnují RetryAfterPlugin, který vám řekne, kdy aplikace znovu volá rozhraní API, než vyprší doba retry-after u odpovědi 429. Nekontroluje odpovědi 503 a 529.

Pro omezení rychlosti podle tokenů, které vaše aplikace skutečně používá, použijte LanguageModelRateLimitingPlugin. Spočítá tokeny výzvy a dokončení, které každá odpověď hlásí, a vrací 429 s retry-after, když vaše aplikace překročí nastavené limity. Funguje s rozhraními API kompatibilními s OpenAI, včetně Azure OpenAI a místních modelů:

{
  "$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
  }
}

Plugin nereprodukuje odhad max_tokens. Jeho výchozí text odpovědi 429 používá kód insufficient_quota. Pokud chcete vrátit text chyby, kterou vaše aplikace očekává při omezení rychlosti, nastavte whenLimitExceeded na Custom a namiřte customResponseFile na vlastní odpověď. Pokud chcete nainstalovat Dev Proxy, přečtěte si téma Nastavení Dev Proxy.

Další kroky

Viz také