Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En un clin d’œil
Objectif : Testez la façon dont votre application gère la limite de requêtes OpenAI et les erreurs de surcharge
Heure : 10 minutes
Plugins :GenericRandomErrorPlugin, RetryAfterPlugin
Prérequis :configurer le proxy de développement
Votre application fonctionne en développement, puis échoue en production avec 429 Too Many Requests. Les limites de débit OpenAI dépendent du niveau d’utilisation de votre organisation, de votre modèle et de tous les autres utilisateurs de la même organisation. Vous ne pouvez donc pas les atteindre de manière fiable exprès. Le proxy de développement retourne les mêmes erreurs que celles retournées par l’API OpenAI. Vous pouvez donc voir ce que fait votre application avant que vos utilisateurs ne le fassent.
Savoir ce que retourne OpenAI
Toutes les erreurs OpenAI ne signifient pas qu'il faut réessayer. Votre application doit les distinguer.
| Status | error.code |
Ce que cela signifie | Ce que votre application doit faire |
|---|---|---|---|
| 429 | rate_limit_exceeded |
Vous avez atteint la limite de requêtes par minute (RPM) ou de jetons par minute (TPM). | Attendez l’heure indiquée dans l’en-tête Retry-After, puis réessayez. |
| 429 | slow_down |
Votre taux de requête a augmenté trop rapidement, même si vous êtes dans vos limites. | Attendez Retry-After, réduisez votre taux de requête et augmentez-le progressivement. |
| 429 | credit_balance_exhausted |
Votre organisation n’a plus de crédits prépayés. | Ne réessayez pas. Une nouvelle tentative ne rétablira pas l’accès. Indiquez à l’utilisateur ou alertez un administrateur. |
| 503 | server_is_overloaded |
Le modèle n’a pas suffisamment de capacité pour l’instant. | Attendez le délai indiqué par Retry-After, s'il est présent, puis réessayez en augmentant progressivement les délais d'attente. |
Pour obtenir la liste complète, consultez les codes d’erreur dans la documentation OpenAI.
Important
Toutes les 3 erreurs dans les 429 lignes utilisent le même code d’état. Si votre application effectue une nouvelle tentative à chaque erreur 429, elle continue de réessayer des requêtes qui échouent pour des raisons de facturation et qui ne pourront jamais aboutir. Vérifiez error.code pour décider quoi faire.
Découvrez ce que le SDK OpenAI peut faire pour vous
Les SDK OpenAI officiels pour Python et JavaScript effectuent par défaut 2 nouvelles tentatives en cas de réponses 408, 409, 429 et 5xx, ainsi que d’erreurs de connexion, avec une temporisation exponentielle. Vous pouvez changer cela avec l’option max_retries en Python et maxRetries en JavaScript.
Les nouvelles tentatives du SDK couvrent les pics de courte durée. Votre application doit toujours déterminer ce qui se passe lorsque les tentatives de nouvelle exécution sont épuisées et comment gérer les erreurs que les nouvelles tentatives ne corrigent pas. En Python, une erreur 429 déclenche RateLimitError et une erreur 503 déclenche InternalServerError ; vous devez donc gérer les deux.
Tip
Pour voir exactement ce que votre code de gestion des erreurs reçoit, définissez max_retries=0 (Python) ou maxRetries: 0 (JavaScript) lors de vos tests. Réactivez ensuite les tentatives automatiques du SDK.
Simuler des limites de débit OpenAI
Dev Proxy propose un préréglage contenant les erreurs OpenAI répertoriées dans le tableau. Téléchargez-le :
devproxy config get openai-throttling
Démarrez le proxy de développement avec le préréglage :
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Ce préréglage fait échouer 90 % des requêtes vers https://api.openai.com/* en renvoyant une erreur aléatoire parmi celles du tableau. Pour les réponses de limitation de débit, il définit l'en-tête Retry-After et utilise RetryAfterPlugin pour vérifier que votre application attend bien la durée indiquée avant d'appeler à nouveau l'API.
Assurez-vous que votre application envoie ses requêtes via Dev Proxy et fait confiance au certificat Dev Proxy. Pour Node.js, consultez Utiliser le proxy de développement avec des applications Node.js. Pour d’autres runtimes, consultez Résoudre les problèmes liés au proxy de développement.
Exécutez votre application et vérifiez que :
- Après une erreur
rate_limit_exceededouslow_down, votre application attend pendant la duréeRetry-After. Si elle appelle l'API trop tôt, Dev Proxy le signale et limite le débit de la requête. - Après une
credit_balance_exhaustederreur, votre application cesse d’appeler l’API et affiche un message clair. - Après une
server_is_overloadederreur, votre application attend leRetry-Aftertemps avant de réessayer. Si elle appelle l'API trop tôt, Dev Proxy le signale et limite le débit de la requête. Lorsque les tentatives sont épuisées, votre application bascule sur une solution de repli ou affiche un message clair au lieu d’une trace de pile. - Votre application ne vous fait pas perdre votre travail. Par exemple, une longue conversation de chat ou un travail de traitement par lots se poursuit après l’erreur.
Pour modifier la fréquence à laquelle les requêtes échouent, utilisez l’option --failure-rate . Par exemple, pour faire échouer chaque requête :
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json" --failure-rate 100
Simuler des limites de jetons pour Azure OpenAI et d’autres fournisseurs
Le préréglage retourne des erreurs au hasard, quel que soit le nombre de jetons que votre application utilise. Pour limiter les demandes en fonction de l’utilisation réelle du token, par exemple pour voir ce qui se passe quand une longue conversation dépasse votre limite TPM, utilisez LanguageModelRateLimitingPlugin. Il fonctionne avec n’importe quelle API compatible OpenAI, notamment Azure OpenAI et les modèles locaux. Pour plus d’informations, consultez Limites des jetons de modèle de langage de test.
Étape suivante
Découvrez comment simuler des limites basées sur les tokens.
Voir aussi
- Tester mon application avec des défaillances de modèles de langage – Simuler des réponses inattendues de modèles de langage
- Simuler des erreurs à partir d’API OpenAI - Générer votre propre fichier d’erreurs OpenAI
- Vérifier que mon application gère correctement la limitation du débit - Limitation du débit sur n’importe quelle API
- Utiliser des configurations prédéfinies - Travailler avec des préréglages
- RetryAfterPlugin - Vérifier le comportement de nouvelle tentative