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​