Testar como a tua aplicação lida com os limites de utilização da OpenAI

De relance
Objetivo: Teste como a sua aplicação lida com erros de limite de pedidos e de sobrecarga da OpenAI
Tempo: 10 minutos
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Pré-requisitos:Configurar o Proxy de Desenvolvimento

A aplicação funciona em desenvolvimento, mas falha em produção com 429 Too Many Requests. Os limites de taxa de pedidos da OpenAI dependem do nível de utilização da sua organização, do seu modelo e de todos os outros que usam a mesma organização, por isso não pode atingi-los intencionalmente de forma fiável. O Dev Proxy devolve os mesmos erros que a API OpenAI devolve, para que possa ver o que a sua aplicação faz antes de os seus utilizadores o verem.

Saiba o que a OpenAI devolve

Nem todos os erros da OpenAI significam "volte a tentar". A tua aplicação precisa de distingui-los.

Status error.code O que significa O que a sua aplicação deve fazer
429 rate_limit_exceeded Atinges o limite de pedidos por minuto (RPM) ou tokens por minuto (TPM). Aguarde até à hora indicada no cabeçalho Retry-After e depois tente novamente.
429 slow_down A sua taxa de pedidos aumentou demasiado depressa, mesmo que esteja dentro dos seus limites. Espera por Retry-After, reduz a taxa de pedidos e aumenta-a gradualmente.
429 credit_balance_exhausted A sua organização já não tem créditos pré-pagos. Não tente novamente. Voltar a tentar não permitirá recuperar o acesso. Informa o utilizador ou avisa um administrador.
503 server_is_overloaded O modelo não tem capacidade suficiente neste momento. Aguarde, se Retry-After estiver presente, e depois tente novamente com atrasos crescentes.

Para a lista completa, consulte Códigos de erro na documentação da OpenAI.

Important

Todos os 3 erros nas 429 linhas usam o mesmo código de estado. Se a sua aplicação tentar novamente em todas as respostas 429, continua a tentar erros de faturação que nunca se resolvem. Verifica error.code para decidir o que fazer.

Saiba o que o SDK da OpenAI faz por si

Os SDKs oficiais da OpenAI para Python e JavaScript repetem as respostas 408, 409, 429 e 5xx, e erros de ligação, duas vezes por defeito, com backoff exponencial. Podes mudar isto com a max_retries opção em Python e maxRetries JavaScript.

As tentativas do SDK abrangem picos breves. A tua aplicação ainda precisa de decidir o que acontece quando as tentativas acabam e como lidar com erros que retentar não resolve. Em Python, um 429 lança RateLimitError e um 503 lança InternalServerError, por isso trata de ambos.

Tip

Para ver exatamente o que o teu código de gestão de erros recebe, define max_retries=0 (Python) ou maxRetries: 0 (JavaScript) enquanto testas. Volte a ativar as tentativas do SDK depois.

Simular os limites de taxa de pedidos da OpenAI

O Dev Proxy inclui uma predefinição com os erros do OpenAI na tabela. Descarrega-o:

devproxy config get openai-throttling

Inicie o Proxy de Desenvolvimento com a predefinição:

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

O preset falha em 90% dos pedidos para https://api.openai.com/*, com um erro aleatório da tabela. Para respostas de limitação de taxa, define o cabeçalho Retry-After e usa o RetryAfterPlugin para verificar se a tua aplicação espera esse tempo antes de voltar a chamar a API.

Certifique-se de que a sua aplicação envia os pedidos através do Dev Proxy e confia no certificado Dev Proxy. Para Node.js, veja Usar Proxy de Desenvolvimento com Node.js aplicações. Para outros ambientes de execução, veja Troubleshoot Dev Proxy.

Execute a sua aplicação e verifique que:

  • Após um erro rate_limit_exceeded ou slow_down, a sua aplicação espera pelo tempo Retry-After. Se chamar a API demasiado cedo, o Dev Proxy reporta-o e limita o pedido.
  • Após um erro credit_balance_exhausted, a sua aplicação deixa de chamar a API e mostra uma mensagem clara.
  • Após um erro server_is_overloaded, a sua aplicação tenta novamente com um atraso e, quando as tentativas acabam, reverte para uma alternativa ou mostra uma mensagem clara em vez de um rastreio de pilha.
  • A tua aplicação não faz perder o teu trabalho. Por exemplo, uma conversa longa por chat ou um batch job continua após o erro.

Para alterar a frequência com que os pedidos falham, use a opção --failure-rate. Por exemplo, para fazer falhar todos os pedidos:

devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json" --failure-rate 100

Simule limites de tokens para Azure OpenAI e outros fornecedores

O preset devolve erros aleatórios, independentemente de quantos tokens a tua aplicação utilize. Para limitar a taxa dos pedidos com base no uso real de tokens, por exemplo, para ver o que acontece quando uma conversa longa ultrapassa o limite do teu TPM, usa o LanguageModelRateLimitingPlugin. Funciona com qualquer API compatível com OpenAI, incluindo Azure OpenAI e modelos locais. Para mais informações, consulte Limites de tokens do modelo de linguagem de teste.

Passo seguinte

Aprenda a simular limites baseados em tokens.

Ver também