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 forme que toutes les autres erreurs de l’API Claude : un niveau type supérieur de error, un objet error avec type et message, et un request_id que vous pouvez donner à Anthropic prise en charge. 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. Ça ne partira pas avant le 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 puis réessayez quelques fois
429 rate_limit_error Yes Votre organisation a dépassé ses demandes, jetons d’entrée ou jetons de sortie par minute, ou a augmenté trop vite et a 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 s’interrompt 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 limite de dépense 429 a le même type d’erreur qu’une limite de débit, de sorte que le code qui réessaie toutes les rate_limit_error continue 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, et un 429 sans retry-after n’a pas besoin de réessayer du tout.
  2. Renoncer à un 529. Réessayez avec une temporisation exponentielle et une gigue aléatoire, puis arrêtez après quelques tentatives. Si la réponse comporte un en-tête retry-after, attendez aussi longtemps à la place.
  3. Laissez le Kit de développement logiciel (SDK) effectuer les premiers réessais. Les kits de développement logiciel (SDK) officiels Anthropic retentent les erreurs de connexion, les limites de débit et les erreurs 5xx deux fois par défaut, avec repli exponentiel, et prennent en compte retry-after lorsqu'il est présent. Vous pouvez modifier le nombre avec max_retries (maxRetries en TypeScript). Lorsque le Kit de développement logiciel (SDK) n’a plus de tentatives, votre code reçoit l’erreur.
  4. Arrêtez de réessayer en cas d’atteinte du plafond de dépenses. Si un 429 n’a pas d’en-tête retry-after, indiquez-le à l’utilisateur et déclenchez une alerte.
  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 que votre application gère un 529

Vous voyez rarement une erreur 529 pendant que vous développez. 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 manque
Attendre la mise en production Surcharges effectives Tout, jusqu’à ce qu’un utilisateur appuie dessus
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 un 529 à la demande, et vous ne pouvez pas déclencher un plafond de dépenses en toute sécurité du tout
Interceptez le trafic réel de votre application et retournez des 529 et 429 à la demande URL réelles, votre véritable SDK et politique de réessai, et 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, 1 sur 4 429 rate_limit_error réponses (demandes, jetons d’entrée, jetons de sortie et limite d’accélération) ou un 529 overloaded_error. Sur les 429, le proxy de développement définit retry-after et vous indique quand votre application réessaie d’appeler 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 chemin d’accès, ajoutez une réponse sans en-tête retry-after au fichier du anthropic-errors.json 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 chaque requête, de sorte que vous voyez ce qui se passe lorsque le SDK manque de nouvelles 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