Erreurs OpenAI « Limite de requêtes atteinte » : ce qu’elles signifient et comment les gérer

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

  1. Vérifiez error.code d’abord. S’il s’agit d’un code de facturation tel que credit_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.
  2. Suivez Retry-After quand 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Étapes suivantes

Voir aussi