Erros de "Rate limit reached" da OpenAI: o que eles significam e como lidar com eles

A API da OpenAI retorna 429 com "Limite de taxa atingido" quando sua organização enviou mais solicitações ou mais tokens por minuto do que seus limites permitem. Os limites se aplicam à sua organização, não a cada usuário. Esses erros são temporários. Se você aguardar e enviar a solicitação novamente, ela geralmente terá êxito. Alguns outros 429 erros do OpenAI são sobre cobrança e esses não desaparecem quando você espera. Para obter mais informações, consulte códigos de erro.

Como são os erros de limite de requisições da OpenAI

Status Erro O que significa Tentar novamente?
429 rate_limit_exceeded, solicitações por minuto (RPM) Você enviou solicitações demais em um minuto. Sim, depois de Retry-After
429 rate_limit_exceeded, tokens por minuto (TPM) Suas solicitações excederam o limite de tokens por minuto. A mensagem mostra seu limite, quantos tokens você usou e quantos a solicitação pediu. Sim, depois de Retry-After. Solicitações menores ajudam.
429 slow_down (tipo rate_limit_error) Seu tráfego cresceu muito rapidamente, mesmo que você esteja dentro dos limites de RPM e TPM. Sim, com uma taxa menor
503 server_is_overloaded (tipo service_unavailable_error) Os servidores do OpenAI estão ocupados. Sim, com atrasos mais longos a cada vez
429 credit_balance_exhausted limite de gastos ou erros de limite de uso (tipo insufficient_quota) Você está sem créditos ou ultrapassou um limite. No. Consulte OpenAI insufficient_quota e credit_balance_exhausted.

A maioria desses erros compartilha o 429 status, portanto, você não pode diferenciá-los apenas pelo status. Leia error.code no corpo da resposta.

Como lidar com erros de limite de taxa do OpenAI

  1. Verifique error.code primeiro. Se for um código de cobrança como credit_balance_exhausted, pare de tentar novamente e informe ao usuário. Tentar novamente após um erro de cobrança não restaurará o acesso.
  2. Siga Retry-After quando ele estiver presente. Se estiver ausente, use backoff exponencial com jitter e limite o número de tentativas.
  3. Diminua a velocidade depois de slow_down. Reduza a taxa de requisições e, depois, aumente-a gradualmente. A regra geral da OpenAI para TPM de entrada acima de 1M é aumentar o tráfego em no máximo 50% a cada 15 minutos.
  4. Enviar menos tokens após um erro do TPM. Prompts e respostas mais curtos permitem que mais solicitações se ajustem a cada minuto.
  5. Afaste-se ainda mais depois de um 503. Aumente o intervalo entre tentativas e verifique a página de status da OpenAI.
  6. Diga ao usuário o que está acontecendo. "Sistema ocupado, tentando novamente em 5 segundos" é melhor do que um spinner que nunca termina.

O OpenAI Python SDK tenta novamente após erros de conexão e respostas 408, 409, 429 e 5xx 2 vezes por padrão, com um backoff exponencial curto. Você pode alterá-lo com max_retries. Quando as novas tentativas se esgotam, o SDK gera RateLimitError para um 429 e InternalServerError para um 503, portanto, seu código ainda precisa de um plano:

import openai
from openai import OpenAI

client = OpenAI(max_retries=3)

BILLING_CODES = {
    "credit_balance_exhausted",
    "organization_spend_limit_exceeded",
    "project_spend_limit_exceeded",
    "organization_usage_limit_exceeded",
}


def summarize(text: str) -> str | None:
    try:
        response = client.responses.create(model="gpt-4.1", input=text)
        return response.output_text
    except openai.RateLimitError as error:
        if error.code in BILLING_CODES:
            raise  # Retrying won't help: alert and tell the user
        return None  # Still throttled after retries: show "busy, try again"
    except openai.InternalServerError:
        return None

Como testar se seu aplicativo lida com limites de taxa openai

Você raramente atinge um limite de taxa de requisições da OpenAI durante o desenvolvimento. Você é o único usuário e seus prompts são curtos. Portanto, a maneira como você testa o tratamento do limite de taxa decide se você encontra os bugs antes que seus usuários os encontrem.

Approach O que você encontra O que você perde
Aguardar a produção Falhas reais Tudo, até que um usuário o atinja
Fazer mock da API em seus testes ou deixar seu agente de codificação escrever o mock Se o branch de repetição é executado Os códigos e os corpos de erro reais do OpenAI e a política de repetição do SDK. Seu aplicativo também precisa de uma opção somente de teste para acessar o mock.
Chame a API real até que ela limite você Comportamento real Você não pode disparar um erro específico sob demanda e cada solicitação custa tokens
Interceptar o tráfego real do aplicativo e retornar erros openai sob demanda URLs reais, seu SDK real e política de repetição e o próprio formato de erro do OpenAI Nada no aplicativo muda, portanto, ele não testa seu código isoladamente. Mantenha seus testes de unidade para isso.

Experimente em seu aplicativo

O Proxy de Desenvolvimento intercepta as solicitações do seu aplicativo para api.openai.com e retorna erros da OpenAI, enquanto seu aplicativo continua chamando as URLs reais. A configuração predefinida openai-throttling falha na maioria das solicitações com uma escolha aleatória de erros de TPM e RPM rate_limit_exceeded, slow_down, credit_balance_exhausted e 503server_is_overloaded, no próprio formato da OpenAI. As 429 respostas de limite de taxa incluem um Retry-After cabeçalho e, se o aplicativo tentar novamente antes que esse tempo expire, o Proxy de Desenvolvimento o relatará.

Baixe o preset e inicie o Dev Proxy com ele:

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

Em seguida, execute seu aplicativo como de costume e observe o que ele faz. Para instalar o Dev Proxy, consulte Configurar o Dev Proxy.

Para testar como seu aplicativo se comporta quando ele fica sem tokens por minuto, com base nos tokens de prompt e de conclusão que suas solicitações usam, consulte Testar os limites de tokens do modelo de linguagem.

Próximas Etapas 

Consulte também