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.
L’API OpenAI retourne 429 avec "Rate limit reached" lorsque votre organisation a envoyé plus de demandes ou plus de jetons par minute que ses limites autorisent. Les limites s’appliquent à votre organisation, et non à chaque utilisateur. Ces erreurs sont temporaires. Si vous attendez et envoyez à nouveau la requête, cela fonctionne généralement. D’autres 429 erreurs d’OpenAI concernent la facturation, et celles-ci ne disparaissent pas lorsque vous attendez. Pour plus d’informations, consultez Codes d’erreur.
À quoi ressemblent les erreurs de limite de débit d’OpenAI
| Status | Error | Ce que cela signifie | Réessayez? |
|---|---|---|---|
429 |
rate_limit_exceeded, demandes par minute (RPM) |
Vous avez envoyé trop de demandes en une minute. | Oui, après Retry-After |
429 |
rate_limit_exceeded, tokens par minute (TPM) |
Vos demandes utilisaient trop de tokens en une minute. Le message affiche votre limite, le nombre de jetons que vous avez utilisés et le nombre de jetons demandés par la requête. | Oui, après Retry-After. Les petites requêtes aident. |
429 |
slow_down (type rate_limit_error) |
Votre trafic a augmenté trop rapidement, même si vous êtes dans vos limites RPM et TPM. | Oui, à un taux inférieur |
503 |
server_is_overloaded (type service_unavailable_error) |
Les serveurs d’OpenAI sont occupés. | Oui, avec des retards plus longs à chaque fois |
429 |
credit_balance_exhausted, erreurs de limite de dépense ou de limite d’utilisation (type insufficient_quota) |
Vous n’avez plus de crédits ou vous avez dépassé une limite. | Non. Consultez openAI insufficient_quota et credit_balance_exhausted. |
La plupart de ces erreurs ont le même statut 429. Vous ne pouvez donc pas les distinguer par leur seul statut. Lisez error.code dans le corps de la réponse.
Comment gérer les erreurs de limite de débit OpenAI
- Vérifiez
error.coded’abord. S’il s’agit d’un code de facturation tel quecredit_balance_exhausted, arrêtez de réessayer et dites-le à l’utilisateur. Réessayer après une erreur de facturation ne rétablira pas l’accès. - Suivez
Retry-Afterquand il est présent. S’il est manquant, utilisez une temporisation exponentielle avec gigue et limitez le nombre de nouvelles tentatives. - Ralentissez après
slow_down. Réduisez votre taux de requêtes, puis augmentez-le progressivement. La règle générale d’OpenAI pour un TPM d’entrée supérieur à 1M consiste à augmenter le trafic de pas plus de 50 % toutes les 15 minutes. - Envoyez moins de tokens après une erreur TPM. Des prompts et des réponses plus courtes permettent à davantage de requêtes d’être traitées chaque minute.
- Reculez davantage après un
503. Augmentez le délai entre les nouvelles tentatives et vérifiez la page d’état OpenAI. - Indiquez à l’utilisateur ce qui se passe. « Occupé, nouvelle tentative dans 5 secondes » vaut mieux qu’un indicateur de chargement qui ne finit jamais.
Le SDK Python d’OpenAI réessaie la requête en cas d’erreurs de connexion et de réponses 408, 409, 429 et 5xx 2 fois par défaut, avec un court délai exponentiel. Vous pouvez le modifier avec max_retries. Lorsque toutes les tentatives ont été épuisées, le Kit de développement logiciel (SDK) déclenche RateLimitError pour un 429 et InternalServerError pour un 503, de sorte que votre code a toujours besoin d’un plan :
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
Comment tester que votre application gère les limites de débit OpenAI
Vous atteignez rarement une limite de débit OpenAI pendant que vous développez. Vous êtes le seul utilisateur et vos invites sont courtes. Ainsi, la façon dont vous testez la gestion des limites de débit détermine si vous trouvez les bogues avant que vos utilisateurs ne le fassent.
| Approach | Ce que vous trouvez | Ce que vous manquez |
|---|---|---|
| Attendre la mise en production | Échecs réels | Tout, jusqu’à ce qu’un utilisateur l’atteigne |
| Simuler l’API dans vos tests ou laisser votre agent de codage écrire la simulation | Si votre branche de nouvelle tentative s’exécute | Corps et codes d’erreur réels d’OpenAI, ainsi que la stratégie de nouvelle tentative de votre Kit de développement logiciel (SDK). Votre application a également besoin d’un commutateur uniquement pour les tests afin d’accéder au mock. |
| Appelez l’API réelle jusqu’à ce qu’elle vous limite | Comportement réel | Vous ne pouvez pas déclencher une erreur spécifique à la demande, et chaque requête coûte des jetons |
| Interceptez le trafic réel de votre application et retourner des erreurs OpenAI à la demande | URL réelles, votre véritable sdk et stratégie de nouvelle tentative et le format d’erreur d’OpenAI | Rien dans votre application ne change, de sorte qu’il ne teste pas votre code en isolation. Conservez vos tests unitaires pour cela. |
Essayez-le dans votre application
Dev Proxy intercepte les requêtes de votre application vers api.openai.com et retourne des erreurs OpenAI, tandis que votre application continue d’appeler les URL réelles. La openai-throttling présélection échoue la plupart des requêtes avec un choix aléatoire à partir de TPM et RPMrate_limit_exceeded, slow_downet credit_balance_exhausted503server_is_overloaded des erreurs, dans le propre format d’OpenAI. Les 429 réponses de limite de débit incluent un Retry-After en-tête et, si votre application réessaye avant que ce délai ne soit écoulé, Dev Proxy le signale.
Téléchargez la présélection et démarrez le proxy de développement avec celui-ci :
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Exécutez ensuite votre application comme d’habitude et regardez ce qu’elle fait. Pour installer le proxy de développement, consultez Configurer le proxy de développement.
Pour tester le comportement de votre application lorsqu’elle manque de jetons par minute, en fonction des jetons d’invite et de saisie semi-automatique utilisés par vos demandes, consultez les limites des jetons de modèle de langage de test.