Aller au contenu principal

Erreurs, limites de débit et fiabilité

Intermédiaire
What you'll learn
  • Lire la carte des erreurs HTTP et savoir quels statuts réessayer plutôt que corriger
  • Réessayer les erreurs transitoires avec un backoff exponentiel et du jitter, plafonné
  • Gérer les limites de débit avec retry-after, lissage, traitement par lots et modèles moins chers
  • Isoler votre code des dépréciations et migrations de modèles

Le code de production dialogue avec un service réseau ; il doit donc s'attendre aux échecs. Un peu de structure ici, c'est la différence entre une intégration instable et une intégration fiable.

La carte des erreurs

Les statuts HTTP typiques que vous gérerez :

StatutSignificationQue faire
400Requête invalideCorrigez la charge utile ; ne réessayez pas telle quelle
401Clé API absente/incorrecteVérifiez les identifiants
403Non autoriséVérifiez l'accès/les permissions
429Limite de débit atteinteFaites un backoff et réessayez (respectez retry-after)
500/529Erreur serveur / surchargeRéessayez avec backoff
Pro tip
  • Les SDK exposent ces erreurs comme des exceptions typées, ce qui vous permet de brancher proprement au lieu d'analyser des chaînes de caractères.

Nouvelles tentatives avec backoff

Pour les erreurs transitoires (429, 5xx), réessayez avec un backoff exponentiel + jitter, plafonné :

import time, random
for attempt in range(5):
try:
return client.messages.create(...)
except (RateLimitError, APIStatusError) as e:
if attempt == 4 or not should_retry(e):
raise
time.sleep(min(2 ** attempt + random.random(), 30))
Watch out
  • De nombreux SDK réessaient automatiquement les erreurs transitoires — connaissez le comportement par défaut de votre client avant d'ajouter le vôtre, sinon vous risquez de doubler les tentatives.

Limites de débit

Les limites s'appliquent par compte/palier (requêtes et tokens par minute). Quand vous en atteignez une, vous obtenez un 429 avec des indications de timing. Stratégies pour rester sous le plafond :

Guided walkthrough1 of 4
  1. Quand vous obtenez un 429, lisez l'indication de timing dans la réponse et attendez d'autant avant de réessayer.

Voir Choisir un modèle pour sélectionner le bon modèle pour les étapes à fort volume.

Migration de modèle

Les identifiants de modèle sont datés/versionnés et finissent dépréciés. Isolez-vous :

Key takeaways
  • 400/401/403 sont de votre fait — corrigez la requête ou les identifiants, ne réessayez pas à l'aveugle. 429 et 500/529 sont réessayables.
  • Réessayez les erreurs transitoires avec un backoff exponentiel + jitter, plafonné (p. ex. min(2 ** attempt + random(), 30)).
  • Sur un 429 : respectez retry-after, lissez les pics, traitez le travail hors ligne par lots, et routez les étapes à fort volume vers un modèle moins cher.
  • Lisez les identifiants de modèle depuis la configuration, surveillez les dépréciations, et relancez les évaluations lors d'une migration de modèle.

Testez-vous

0/4
  1. Vous obtenez un 400 Requête invalide. Que devriez-vous faire ?
  2. Quels statuts sont ceux que vous devriez réessayer avec backoff ?
  3. Pourquoi ajouter du jitter au backoff exponentiel ?
  4. Lequel n'est PAS une stratégie de limite de débit suggérée ?

Ensuite