Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
- Verifique qual 429 você recebeu. Erros de cobrança, gastos e cotas precisam de uma pessoa, não de uma nova tentativa.
- Aguarde o tempo que a API solicitar. OpenAI e Anthropic enviam
retry-afterem segundos. Azure OpenAI enviaretry-after-msem milissegundos. Sem uma dica, recue com espera exponencial com jitter aleatório e limite o número de tentativas e o tempo total. - Saiba o que seu SDK já faz. Os SDKs Python da OpenAI e da Anthropic tentam novamente erros de conexão e
408,409,429e 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, commax_retries=0em Python, como recomenda Azure OpenAI; caso contrário, as tentativas se multiplicam. - Reduza o que importa. No OpenAI e no Azure OpenAI, defina
max_tokenspróximo ao tamanho da resposta que você espera. Em Anthropic, armazene conteúdo repetido em cache, como instruções do sistema. - 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.
- 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.
- 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.