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 limitation 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, jetons par minute (TPM) |
Vos requêtes ont consommé trop de jetons en une minute. Le message indique 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. Privilégiez des requêtes plus courtes. |
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 liées au plafond de dépenses ou à la 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. Si cette information est absente, appliquez un backoff exponentiel avec une temporisation aléatoire 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. - Après une erreur TPM, réduisez le nombre de jetons envoyés. Des réponses et des prompts plus courts permettent de traiter davantage de requêtes par minute.
- Augmentez le délai d’attente après une erreur
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 » est préférable à un indicateur de chargement qui tourne indéfiniment.
Le SDK Python d’OpenAI réessaie par défaut deux fois, avec un bref backoff exponentiel, en cas d’erreurs de connexion et 408, 409, 429 et 5xx de réponses. Vous pouvez le modifier avec max_retries. Lorsque les nouvelles tentatives sont épuisées, le SDK lève une exception RateLimitError pour une 429 et une exception InternalServerError pour une 503. Votre code doit donc prévoir une stratégie de gestion de ces situations :
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
Lors du développement, il est rare d’atteindre les limites de débit d’OpenAI. Vous êtes le seul utilisateur et vos invites sont courtes. Par conséquent, la manière dont vous testez la gestion des limites de débit détermine si vous détectez les bogues avant qu’ils n’affectent vos utilisateurs.
| Approach | Ce que vous trouvez | Ce que vous ne pouvez pas vérifier |
|---|---|---|
| Attendre qu’un problème survienne en production | Échecs réels | Tout, jusqu’à ce qu’un utilisateur y soit confronté |
| Simuler l’API dans vos tests ou demander à votre agent de programmation de créer le simulateur | 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 réservé aux tests pour accéder au simulateur. |
| 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 consomme des jetons facturés |
| Intercepter le trafic réel de votre application et renvoyer des erreurs OpenAI à la demande | Des URL réelles, votre véritable SDK et votre stratégie de nouvelle tentative, ainsi que le format d’erreur propre à OpenAI | Rien ne change dans votre application ; ce test ne permet donc pas de tester votre code isolément. Conservez vos tests unitaires pour cela. |
L'essayer sur votre application
Dev Proxy intercepte les requêtes de votre application vers api.openai.com et renvoie des erreurs OpenAI, tandis que votre application continue d’utiliser les URL réelles. La configuration prédéfinie openai-throttling fait échouer la plupart des requêtes en renvoyant aléatoirement des erreurs TPM et RPM rate_limit_exceeded, slow_down, credit_balance_exhausted et 503server_is_overloaded, au format d’erreur propre à OpenAI. Les 429 réponses de limite de débit et la 503 réponse incluent un Retry-After en-tête, et si votre application réessaye avant que ce délai soit écoulé, Dev Proxy le signale.
Téléchargez le préréglage et démarrez Dev Proxy 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 Dev Proxy, consultez Configurer Dev Proxy.
Pour tester le comportement de votre application lorsqu’elle atteint sa limite de jetons par minute, en fonction des jetons utilisés par vos requêtes dans les prompts et les réponses générées, consultez Tester les limites de jetons des modèles de langage.