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 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
- Vérifiez le code d’état avant de réessayer. Un
529et un429nécessitent des délais d'attente différents, tandis qu'un429sansretry-afterne nécessite aucune nouvelle tentative. - 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. - 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-afterlorsque cet en-tête est présent. Vous pouvez modifier le nombre avecmax_retries(maxRetriesen TypeScript). Lorsque le SDK a épuisé ses tentatives, votre code reçoit l'erreur. - 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. - 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.