Limites de taxa de LLM: tokens por minuto, solicitações por minuto e o que acontece quando você os atinge

As APIs do modelo de linguagem limitam o tráfego de duas maneiras ao mesmo tempo: quantas solicitações você envia por minuto (RPM) e quantos tokens você usa por minuto (TPM). Você pode ficar bem abaixo do limite de solicitação e ainda ser limitado porque alguns prompts longos usaram seu orçamento de token. Quando você atinge um dos dois limites, a API responde com 429 Too Many Requests e seu aplicativo tem que esperar.

Como OpenAI, Azure OpenAI e Anthropic contam

Provider Limitações O que é preciso saber
OpenAI RPM, solicitações por dia, TPM, tokens por dia e muito mais, por organização e projeto, por modelo Você atinge o primeiro limite atingido. Para o limite de token, uma solicitação conta como o maior valor entre max_tokens e uma estimativa com base em seus caracteres. Contagem de solicitações com falha também.
Azure OpenAI TPM que você atribui a cada implantação, além de um limite de RPM definido proporcionalmente a ela O RPM é verificado em janelas de 1 ou 10 segundos, portanto, um pico recebe um 429 mesmo quando o total por minuto está bom. A estimativa de token inclui max_tokens.
Antrópico RPM, tokens de entrada por minuto (ITPM) e tokens de saída por minuto (OTPM), por modelo A capacidade é recarregada continuamente e 60 RPM podem ser impostas como uma solicitação por segundo. Para a maioria dos modelos, os tokens de entrada armazenados em cache não contam para o ITPM e max_tokens não contam para o OTPM.

Se você definir max_tokens como 4.000 e receber 200 tokens de volta, OpenAI e Azure OpenAI ainda contabilizam os 4.000 no seu limite. É assim que você pode obter 429s enquanto suas métricas de uso ficam bem abaixo da cota.

O que um 429 significa para cada provedor

Nem todo erro 429 desaparece se você esperar.

Provider Aguardar e tentar novamente Pare e diga a alguém
OpenAI 429 para solicitações ou tokens, 429 slow_down (seu tráfego cresceu muito rápido, mesmo dentro de seus limites) e 503 server_is_overloaded. Aguarde Retry-After quando ele estiver presente. 429 com credit_balance_exhausted, organization_spend_limit_exceeded, project_spend_limit_exceededou organization_usage_limit_exceeded em error.code. Tentar novamente não restaurará o acesso.
Azure OpenAI 429 para o TPM ou RPM do deployment, para a capacidade do sistema ou para uma redução temporária do limite de taxa. Aguarde retry-after-ms. 429s sustentados em produção enquanto você está abaixo de sua cota aprovada. Verifique a alocação de TPM da implantação e abra uma solicitação de suporte.
Antrópico 429 rate_limit_error com um cabeçalho retry-after, incluindo limites de taxa após um aumento acentuado no uso e 529 overloaded_error. 429 para o limite de gastos mensais. Ele não tem cabeçalho retry-after , error.details.error_code é enforced_spend_limit_reachede continua falhando até que o acesso seja retomado.

Como lidar com os limites de taxa de LLM

  1. Verifique qual 429 você recebeu. Erros de cobrança, gastos e cotas precisam de uma pessoa, não de uma nova tentativa.
  2. Aguarde o tempo que a API solicitar. OpenAI e Anthropic enviam retry-after em segundos. Azure OpenAI envia retry-after-ms em milissegundos. Sem uma dica, recue com espera exponencial com jitter aleatório e limite o número de tentativas e o tempo total.
  3. Saiba o que seu SDK já faz. Os SDKs Python da OpenAI e da Anthropic tentam novamente erros de conexão e 408, 409, 429 e respostas 5xx 2 vezes por padrão. Se você adicionar seu próprio loop de repetição, desative as novas tentativas do SDK, por exemplo, com max_retries=0 em Python, como recomenda Azure OpenAI; caso contrário, as tentativas se multiplicam.
  4. Reduza o que importa. No OpenAI e no Azure OpenAI, defina max_tokens próximo ao tamanho da resposta que você espera. Em Anthropic, armazene conteúdo repetido em cache, como instruções do sistema.
  5. Aumente gradualmente. Um salto acentuado no tráfego dispara os limites de taxa da OpenAI e da Anthropic, mesmo dentro dos seus limites. O OpenAI sugere que, depois de atingir 1 milhão de tokens de entrada por minuto, você crescerá no máximo 50% a cada 15 minutos.
  6. Não reproduza um stream que você já consumiu. Um erro após o início de um fluxo pode chegar como um evento de fluxo e o OpenAI aconselha a não repetir automaticamente uma solicitação depois que você consumiu a saída.
  7. Avise o usuário quando uma solicitação travar com erro 429, em vez de mostrar um spinner.

Como testar se seu aplicativo lida com limites de taxa de LLM

Approach O que você encontra O que você perdeu
Mockar o cliente do SDK em seus testes ou peça ao seu agente de programação para criar o mock Se o seu branch de erro é executado Códigos de status reais, códigos de erro e cabeçalhos do provedor e as próprias tentativas do SDK. Seu aplicativo também precisa de uma opção somente de teste para acessar o mock.
Faça chamadas à API real até atingir o limite de taxa Comportamento real Você paga por cada token e não pode disparar slow_down, uma sobrecarga ou um limite de gastos quando quiser
Interceptar o tráfego real do aplicativo e retornar os erros do provedor ou aplicar limitação com base nos tokens que seu aplicativo usa URLs reais, a política de repetição do SDK e os corpos de erro do provedor, com um limite que você escolher Seu código de forma isolada. Deixe seus testes unitários para isso.

Experimente em seu aplicativo

Dev Proxy intercepta as solicitações do aplicativo para a API do modelo de linguagem e retorna os próprios erros do provedor, enquanto seu aplicativo continua chamando a URL real. Para o OpenAI, baixe a predefinição e inicie o Proxy de Desenvolvimento com ele:

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

A predefinição openai-throttling falha em 90% das solicitações para https://api.openai.com/* com um erro aleatório: rate_limit_exceeded para TPM ou RPM, slow_down, credit_balance_exhausted ou 503 server_is_overloaded. A anthropic-throttling predefinição faz o mesmo para https://api.anthropic.com/* com RPM, token de entrada, token de saída, 429s de aceleração e 529 overloaded_error. Ambas as predefinições incluem o RetryAfterPlugin, que informa quando seu aplicativo chama a API novamente antes que o tempo retry-after de um 429 se esgote. Ele não verifica as respostas 503 e 529.

Para aplicar limite de taxa com base nos tokens que seu aplicativo realmente usa, use o LanguageModelRateLimitingPlugin. Ele conta os tokens de prompt e de conclusão que cada resposta relata e retorna 429 com retry-after quando seu aplicativo ultrapassa os limites definidos. Ele funciona com APIs compatíveis com OpenAI, incluindo Azure OpenAI e modelos locais:

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

O plug-in não reproduz a estimativa max_tokens. Seu corpo padrão 429 usa o código insufficient_quota. Para retornar o corpo do erro que seu aplicativo espera para um limite de taxa de requisições, defina whenLimitExceeded como Custom e aponte customResponseFile para sua própria resposta. Para instalar o Dev Proxy, consulte Configurar o Dev Proxy.

Próximas Etapas 

Consulte também