Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A API da OpenAI devolve 429 com "Limite de pedidos atingido" quando a sua organização enviou mais pedidos ou mais tokens por minuto do que os seus limites permitem. Os limites aplicam-se à sua organização, não a cada utilizador. Estes erros são temporários. Se esperar e enviar o pedido novamente, normalmente é bem-sucedido. Alguns outros 429 erros da OpenAI são relacionados com a faturação, e esses não desaparecem quando se espera. Para mais informações, consulte Códigos de erro.
Como se apresentam os erros de limite de taxa de pedidos da OpenAI
| Status | Erro | O que significa | Tentar novamente? |
|---|---|---|---|
429 |
rate_limit_exceeded, requisições por minuto (RPM) |
Enviaste demasiadas solicitações num minuto. | Sim, depois Retry-After |
429 |
rate_limit_exceeded, tokens por minuto (TPM) |
Os teus pedidos usaram tokens a mais num minuto. A mensagem mostra o teu limite, quantos tokens usaste e quantos o pedido solicitou. | Sim, depois de Retry-After. Pedidos mais pequenos ajudam. |
429 |
slow_down (tipo rate_limit_error) |
O teu tráfego cresceu demasiado depressa, mesmo estando dentro dos teus limites de RPM e TPM. | Sim, a uma taxa mais baixa |
503 |
server_is_overloaded (tipo service_unavailable_error) |
Os servidores da OpenAI estão ocupados. | Sim, com atrasos maiores a cada vez |
429 |
credit_balance_exhausted, erros de limite de gastos ou de utilização (tipo insufficient_quota) |
Já não tens créditos ou ultrapassaste um limite. | Não. Veja a OpenAI insufficient_quota e credit_balance_exhausted. |
A maioria destes erros partilha o 429 mesmo estado, por isso não os consegue distinguir apenas pelo estado. Leia error.code no corpo da resposta.
Como lidar com erros de limite de pedidos da OpenAI
- Confirma
error.codeprimeiro. Se for um código de faturação comocredit_balance_exhausted, pare de repetir a tentativa e informe o utilizador. Tentar novamente após um erro de faturação não restaura o acesso. - Siga
Retry-Afterquando estiver presente. Se estiver em falta, usa recuo exponencial com jitter e limita o número de tentativas. - Abrandar após
slow_down. Reduz a taxa de pedidos e depois aumenta gradualmente. A regra geral da OpenAI acima de 1M de TPM de entrada é aumentar o tráfego em no máximo 50% a cada 15 minutos. - Envie menos tokens após um erro TPM. Prompts e respostas mais curtas permitem que mais pedidos caibam em cada minuto.
- Afaste-se ainda mais depois de um
503. Aumenta o atraso entre tentativas e consulta a página de estado do OpenAI. - Diz ao utilizador o que está a acontecer. "Ocupado, a tentar novamente em 5 segundos" é melhor do que um spinner que nunca acaba.
O SDK OpenAI Python repete as tentativas após erros de ligação e respostas 408, 409, 429 e 5xx 2 vezes por defeito, com um curto backoff exponencial. Pode mudá-lo com max_retries. Quando as tentativas acabam, o SDK lança RateLimitError para uma 429 e InternalServerError para um 503, por isso o teu 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 a sua aplicação lida com os limites de taxa da OpenAI
Raramente atinges o limite de taxa do OpenAI enquanto desenvolves. És o único utilizador, e os teus prompts são curtos. Assim, a forma como testas a gestão de rate limits decide se encontras os bugs antes dos teus utilizadores.
| Approach | O que encontra | Do que sente falta |
|---|---|---|
| Aguardar a produção | Fracassos reais | Tudo, até que um utilizador clique nele |
| Simula a API nos teus testes, ou deixa o teu agente de programação escrever o mock | Se o seu branch de retry correr | Os corpos e códigos de erro reais do OpenAI, e a política de retentativas do teu SDK. A tua aplicação também precisa de um switch só de teste para chegar ao mock. |
| Faz pedidos à API real até que te limite | Comportamento real | Não podes ativar um erro específico a pedido, e cada pedido custa tokens |
| Intercete o tráfego real da sua aplicação e devolva erros OpenAI quando solicitado | URLs reais, o seu SDK real e política de retentativa, e o próprio formato de erro da OpenAI | Nada na tua aplicação muda, por isso não testa o teu código isoladamente. Guarda os testes unitários para isso. |
Experimente na sua app
O Proxy de desenvolvimento interceta os pedidos da sua aplicação para api.openai.com e devolve erros do OpenAI, enquanto a sua aplicação continua a chamar os URLs reais. A openai-throttling predefinição falha na maioria dos pedidos com um erro escolhido aleatoriamente de entre os erros TPM e RPM rate_limit_exceeded, slow_down, credit_balance_exhausted e 503server_is_overloaded, no próprio formato da OpenAI. As respostas de limitação de taxa 429 incluem um cabeçalho Retry-After, e se a sua aplicação tentar novamente antes de esse tempo terminar, o Dev Proxy assinala-o.
Descarregue a predefinição e inicie o Dev Proxy com ela:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Depois executa a tua aplicação como de costume e vê o que faz. Para instalar Dev Proxy, consulte Configurar Dev Proxy.
Para testar como a sua aplicação se comporta quando fica sem tokens por minuto, com base no prompt e nos tokens de conclusão que os seus pedidos utilizam, consulte Testar os limites de tokens do modelo de linguagem.