Anthropic 529 overloaded_error : ce que cela signifie et comment le gérer

L’API Claude retourne 529 avec le type overloaded_error d’erreur lorsque l’API est temporairement surchargée. Selon Anthropic, cela peut se produire lorsque l’API rencontre un trafic élevé pour l’ensemble des utilisateurs. Votre demande est correcte. L’API est occupée, de sorte qu’elle a rejeté la requête. Lorsque votre organisation dépasse ses propres limites de débit, vous recevez un code 429 à la place. Le corps de la réponse a la même structure que pour toutes les autres erreurs de l'API Claude : un champ de premier niveau type dont la valeur est error, un objet error contenant les champs type et message, ainsi qu'un identifiant request_id que vous pouvez communiquer au support Anthropic. Pour plus d’informations, consultez les erreurs de l’API Claude.

529, 429 ou limite de dépense : comment les distinguer

L’API Claude utilise des erreurs d’apparence similaire pour des problèmes très différents. Certaines disparaissent si vous attendez. L'une d'elles ne disparaît qu'au début du mois prochain.

Response error.type retry-after Ce que cela signifie Procédure à suivre
529 overloaded_error Utilisez-le s’il est présent L’API est surchargée pour tous les utilisateurs Attendez un peu plus longtemps avant de réessayer, puis effectuez quelques nouvelles tentatives
429 rate_limit_error Yes Votre organisation a dépassé ses limites de requêtes, de jetons d'entrée ou de jetons de sortie par minute, ou a augmenté son activité trop rapidement et atteint une limite d'accélération Attendez aussi longtemps que retry-after l’indique
429 rate_limit_error, avec error.details.error_code défini sur enforced_spend_limit_reached No Votre organisation a atteint la limite de dépense mensuelle de son niveau d’utilisation Ne réessayez pas. L'utilisation est suspendue jusqu'à 00:00 UTC le premier jour du mois suivant, ou jusqu'à ce que vous passiez à un niveau supérieur.
400 invalid_request_error No L’utilisation a atteint une limite de dépense que vous avez définie sur votre organisation ou votre espace de travail Augmenter ou supprimer la limite

Une erreur 429 liée à un plafond de dépenses présente le même type d'erreur qu'une limitation de débit. Le code qui réessaie systématiquement chaque rate_limit_error continue donc d'échouer. Anthropic remarque que les nouvelles tentatives échouent jusqu'à ce que l'accès reprenne, y compris les nouvelles tentatives automatiques du Kit de développement logiciel (SDK). Pour plus d’informations, consultez Atteindre votre plafond de dépenses.

Comment gérer un 529

  1. Vérifiez le code d’état avant de réessayer. Un 529 et un 429 nécessitent des délais d'attente différents, tandis qu'un 429 sans retry-after ne nécessite aucune nouvelle tentative.
  2. Attendez avant de réessayer en cas d'erreur 529. Réessayez avec une temporisation exponentielle et une gigue aléatoire, puis arrêtez après quelques tentatives. Si la réponse contient un en-tête retry-after, attendez plutôt la durée indiquée.
  3. Laissez le SDK effectuer les premières nouvelles tentatives. Les SDK officiels Anthropic réessaient deux fois par défaut en cas d'erreurs de connexion, de limitations de débit et d'erreurs 5xx, en appliquant un délai exponentiel, et respectent retry-after lorsque cet en-tête est présent. Vous pouvez modifier le nombre avec max_retries (maxRetries en TypeScript). Lorsque le SDK a épuisé ses tentatives, votre code reçoit l'erreur.
  4. Arrêtez les nouvelles tentatives en cas de dépassement du plafond de dépenses. Si une erreur 429 ne comporte pas d'en-tête retry-after, informez l'utilisateur et configurez une alerte pour vous-même.
  5. Gardez l’utilisateur informé. Mettre en file d’attente le travail et réessayer ultérieurement, ou afficher un message clair « occupé, réessayez dans une minute » au lieu d’une erreur générique.

Dans le sdk Python, une erreur 429 déclenche anthropic.RateLimitError et tout code d’état 500 ou supérieur, y compris 529, déclenche anthropic.InternalServerError:

import anthropic

client = anthropic.Anthropic(max_retries=4)


def summarize(text: str) -> str | None:
    try:
        message = client.messages.create(
            model="claude-sonnet-5",
            max_tokens=1024,
            messages=[{"role": "user", "content": f"Summarize:\n\n{text}"}],
        )
    except anthropic.RateLimitError as e:
        if "retry-after" not in e.response.headers:
            # Spend cap: every retry fails until access resumes
            alert_admin(e)
            return None
        raise
    except anthropic.InternalServerError as e:
        if e.status_code == 529:
            # Overloaded after all SDK retries: queue the job for later
            queue_for_later(text)
            return None
        raise
    return next(block.text for block in message.content if block.type == "text")

Comment tester la gestion d'une erreur 529 par votre application

Vous rencontrez rarement une erreur 529 pendant le développement. Cela dépend du trafic de chaque utilisateur de l’API Claude. Vous ne pouvez donc pas le déclencher. La façon dont vous testez détermine si vous trouvez les bogues avant que vos utilisateurs ne le fassent.

Approach Ce que vous trouvez Ce qui vous échappe
Attendre la mise en production Les surcharges réelles Tout, jusqu'à ce qu'un utilisateur y soit confronté
Simuler l’API dans vos tests ou laisser votre agent de codage écrire la simulation Si votre branche d’erreur s’exécute les codes d'état réels et les corps d'erreurs de Anthropic, 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 atteindre le mock.
Appeler l’API réelle jusqu’à ce qu’elle échoue Comportement réel Vous ne pouvez pas déclencher une erreur 529 à la demande, et vous ne pouvez pas déclencher sans risque un dépassement du plafond de dépenses
Interceptez le trafic réel de votre application et renvoyez des erreurs 529 et 429 à la demande Des URL réelles, votre véritable SDK et votre stratégie de nouvelle tentative, ainsi que le format d'erreur propre à Anthropic Rien dans votre application ne change, de sorte que cela ne teste donc pas votre code de manière isolée. Conservez vos tests unitaires pour cela.

Essayez-le dans votre application

Dev Proxy intercepte les requêtes https://api.anthropic.com de votre application et retourne des erreurs au format d'erreur d'Anthropic, tandis que votre application continue d'appeler l'URL réelle. Téléchargez un preset et démarrez Dev Proxy avec celui-ci :

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Ce qu’il retourne
anthropic-throttling De manière aléatoire, une réponse 429 rate_limit_error sur quatre (requêtes, jetons d'entrée, jetons de sortie et limite d'accélération), ou une erreur 529 overloaded_error. Sur les 429 et les 529, Dev Proxy définit retry-after et vous indique quand votre application appelle à nouveau l’API trop tôt.
anthropic-random-errors Au hasard, l’une des erreurs de la liste d’erreurs de l’API Claude, dont 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 et 529, pour 50% de requêtes

Aucun préréglage n’inclut un plafond de dépenses 429. Pour tester ce scénario, ajoutez une réponse sans en-tête retry-after au fichier anthropic-errors.json du préréglage :

{
  "statusCode": 429,
  "headers": [
    { "name": "content-type", "value": "application/json" }
  ],
  "body": {
    "type": "error",
    "error": {
      "type": "rate_limit_error",
      "message": "You have reached your API usage limits.",
      "details": { "error_code": "enforced_spend_limit_reached" }
    }
  }
}

Pour faire échouer toutes les requêtes et observer ce qui se passe lorsque le SDK a épuisé ses tentatives, démarrez Dev Proxy avec --failure-rate 100. Pour plus d’informations, consultez Le taux d’échec des demandes de modification. Pour installer Dev Proxy, consultez Configurer Dev Proxy.

Étapes suivantes

Voir aussi