Testar como seu aplicativo lida com os limites de taxa do OpenAI

Visão geral
Meta: Testar como seu aplicativo lida com o limite de taxa OpenAI e erros de sobrecarga
Tempo: 10 minutos
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Pré-requisitos:Configurar o Proxy de Desenvolvimento

Seu aplicativo funciona em desenvolvimento e, em seguida, falha na produção com 429 Too Many Requests. Os limites de requisição da OpenAI dependem do nível de uso da sua organização, do modelo e de todos os outros que usam a mesma organização, portanto, não é possível atingi-los intencionalmente de forma confiável. O Proxy de Desenvolvimento retorna os mesmos erros que a API OpenAI retorna, para que você possa ver o que seu aplicativo faz antes que seus usuários vejam o que ele faz.

Saiba o que a OpenAI retorna

Nem todos os erros do OpenAI significam "tente novamente". Seu aplicativo precisa diferenciá-los.

Status error.code O que significa O que seu aplicativo deve fazer
429 rate_limit_exceeded Você atingiu o limite de solicitações por minuto (RPM) ou tokens por minuto (TPM). Aguarde o tempo indicado no cabeçalho Retry-After e tente novamente.
429 slow_down Sua taxa de solicitação aumentou muito rapidamente, mesmo que você esteja dentro de seus limites. Aguarde Retry-After, reduza a taxa de solicitação e aumente-a gradualmente.
429 credit_balance_exhausted Sua organização não tem mais créditos pré-pagos. Não tente novamente. Tentar novamente não restaurará o acesso. Informe ao usuário ou alerte um administrador.
503 server_is_overloaded O modelo não tem capacidade suficiente no momento. Aguarde Retry-After se estiver presente e tente novamente com atrasos crescentes.

Para obter a lista completa, consulte códigos de erro na documentação do OpenAI.

Important

Todos os 3 erros nas 429 linhas usam o mesmo código de status. Se o aplicativo tentar novamente após cada resposta 429, ele continuará repetindo erros de cobrança irrecuperáveis. Verifique error.code para decidir o que fazer.

Saiba o que o SDK do OpenAI faz para você

Os SDKs oficiais da OpenAI para Python e JavaScript tentarão novamente as respostas 408, 409, 429 e 5xx, além de erros de conexão, 2 vezes por padrão com recuo exponencial. Você pode alterá-lo com a opção max_retries em Python e maxRetries em JavaScript.

As novas tentativas do SDK cobrem rajadas curtas. Seu aplicativo ainda precisa decidir o que acontece quando as tentativas se esgotam e como lidar com erros que novas tentativas não corrigem. Em Python, 429 gera RateLimitError e 503 gera InternalServerError, portanto, manipule ambos.

Tip

Para ver exatamente o que o código de tratamento de erros recebe, defina max_retries=0 (Python) ou maxRetries: 0 (JavaScript) durante o teste. Ative novamente as tentativas do SDK depois.

Simular limites de taxa OpenAI

O Proxy de Desenvolvimento tem uma predefinição com os erros OpenAI na tabela. Baixe-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"

A predefinição faz com que 90% das solicitações para https://api.openai.com/* falhem com um erro aleatório da tabela. Para respostas de limitação de taxa, ele define o cabeçalho Retry-After e usa o RetryAfterPlugin para verificar se seu aplicativo aguarda esse tempo antes de chamar a API novamente.

Verifique se seu aplicativo envia suas solicitações por meio do Dev Proxy e confia no certificado do Dev Proxy. Para Node.js, consulte Usar o Proxy de Desenvolvimento com aplicativos Node.js. Para outros runtimes, consulte Solucionar problemas do Dev Proxy.

Execute seu aplicativo e verifique se:

  • Após um rate_limit_exceeded erro ou slow_down erro, seu aplicativo aguarda o Retry-After tempo. Se ela chamar a API muito cedo, o Dev Proxy reportará isso e limitará a solicitação.
  • Após um credit_balance_exhausted erro, seu aplicativo para de chamar a API e mostra uma mensagem clara.
  • Após um erro server_is_overloaded, seu aplicativo tenta novamente com um atraso e, quando as novas tentativas se esgotam, recorre a uma alternativa ou mostra uma mensagem clara em vez de um rastreamento de pilha.
  • Seu aplicativo não faz você perder seu trabalho. Por exemplo, uma longa conversa de chat ou um trabalho em lote continua após o erro.

Para alterar a frequência com que as solicitações falham, use a opção --failure-rate . Por exemplo, para falhar em todas as solicitações:

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

Simular limites de token para Azure OpenAI e outros provedores

A predefinição retorna erros aleatoriamente, independentemente de quantos tokens seu aplicativo usa. Para limitar solicitações com base no uso real de token, por exemplo, para ver o que acontece quando uma conversa longa ultrapassa o limite do TPM, use o LanguageModelRateLimitingPlugin. Ele funciona com qualquer API compatível com OpenAI, incluindo Azure OpenAI e modelos locais. Para obter mais informações, consulte Limites de token do modelo de linguagem de teste.

Próxima etapa

Saiba como simular limites baseados em token.

Consulte também