AI Agents · Leçon

Nouvelles tentatives avec temporisation exponentielle

Utilisez tenacity pour retenter les opérations en échec temporaire avec des délais croissants de manière exponentielle et une variation aléatoire.

Leçon 2 sur 415 étapes

Nouvelles tentatives avec temporisation exponentielle est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.

Pourquoi effectuer des nouvelles tentatives ?

Les appels externes (LLM, API de recherche, bases de données vectorielles) échouent de manière transitoire. Une simple nouvelle tentative permet de récupérer après la plupart des erreurs intermittentes sans déranger l’utilisateur.

Ce qu’il ne faut NOT faire

N’effectuez pas de nouvelle tentative instantanément dans une boucle serrée : vous martèlerez le service et le limiteur de débit vous bloquera :

# BAD
for _ in range(10):
    try:
        return call_api()
    except Exception:
        pass

Temporisation exponentielle

Attendez plus longtemps après chaque échec. La puissance de 2 est la convention :

import time

def call_with_backoff(fn, attempts=5):
    for i in range(attempts):
        try:
            return fn()
        except TransientError:
            if i == attempts - 1:
                raise
            time.sleep(2 ** i)   # 1, 2, 4, 8, 16 seconds

Ajouter une variation aléatoire

Sans variation aléatoire, les nouvelles tentatives de nombreux clients s’alignent, ce qui crée un trafic massif simultané. Ajoutez un décalage aléatoire :

import random
sleep = (2 ** i) + random.uniform(0, 1)
time.sleep(sleep)

Utiliser Tenacity

La bibliothèque tenacity implémente cela pour vous :

from tenacity import retry, wait_exponential_jitter, stop_after_attempt, retry_if_exception_type
import requests

@retry(
    wait=wait_exponential_jitter(initial=1, max=30),
    stop=stop_after_attempt(5),
    retry=retry_if_exception_type((requests.Timeout, requests.ConnectionError))
)
def search(query):
    return requests.get('https://api.tavily.com/search', timeout=10).json()

Réessayer uniquement les erreurs transitoires

N’effectuez jamais de nouvelle tentative pour :

  • les erreurs 4xx (requête incorrecte — une nouvelle tentative n’aidera pas)
  • les échecs d’authentification
  • les erreurs de validation

Effectuez une nouvelle tentative pour :

  • les dépassements de délai
  • les erreurs serveur 5xx
  • les limites de débit (avec des attentes plus longues)

Nouvelles tentatives sensibles aux limites de débit

Respectez l’en-tête Retry-After :

if response.status_code == 429:
    wait = int(response.headers.get('Retry-After', 5))
    time.sleep(wait)
    continue

Limiter la durée totale des nouvelles tentatives

Limitez la durée totale des nouvelles tentatives — généralement à 30 à 60 secondes pour un appel destiné à l’utilisateur :

from tenacity import stop_after_delay

@retry(
    wait=wait_exponential_jitter(initial=1, max=10),
    stop=stop_after_delay(60)
)
def call_api():
    ...

En-têtes d’idempotence

Pour les API non idempotentes (Stripe, etc.), incluez une clé d’idempotence à chaque nouvelle tentative afin de regrouper les doublons :

headers = {'Idempotency-Key': f'agent-call-{run_id}-{tool_id}'}

Réessayer aussi l’appel au LLM

Les SDK OpenAI et Anthropic effectuent automatiquement 1 à 2 nouvelles tentatives. Vous pouvez configurer :

client = OpenAI(max_retries=5, timeout=30.0)

Nouvelles tentatives asynchrones

Pour le code asynchrone :

from tenacity import AsyncRetrying

async for attempt in AsyncRetrying(wait=wait_exponential_jitter(), stop=stop_after_attempt(5)):
    with attempt:
        result = await call_api()

Journaliser les nouvelles tentatives

Chaque nouvelle tentative doit journaliser : le numéro de tentative, la durée de la pause et la raison de l’erreur. Sinon, il est impossible de déboguer la question « pourquoi est-ce si lent ? ».

Nouvelles tentatives ou délais d’attente

Définissez un délai d’attente court pour chaque tentative (par exemple 10 s) et une limite totale avec stop_after_delay (par exemple 60 s). Sans ces deux limites, une connexion bloquée peut rester suspendue indéfiniment.

Pourquoi une variation aléatoire ?

Pourquoi ajouter une variation aléatoire aux délais entre les nouvelles tentatives ?

Récapitulatif

Temporisation exponentielle + variation aléatoire + durée totale limitée + nouvelles tentatives uniquement pour les erreurs transitoires. Utilisez tenacity pour éviter le code répétitif.

Gratuit pour commencer

Apprends AI Agents avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
60
Leçons
239

Questions Fréquemment Posées

La leçon « Nouvelles tentatives avec temporisation exponentielle » est-elle gratuite ?

Oui — le texte complet de « Nouvelles tentatives avec temporisation exponentielle » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Nouvelles tentatives avec temporisation exponentielle » ?

Utilisez tenacity pour retenter les opérations en échec temporaire avec des délais croissants de manière exponentielle et une variation aléatoire. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer AI Agents ?

Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Nouvelles tentatives avec temporisation exponentielle » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?

Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Outils idempotents et effets de bord
  2. Nouvelles tentatives avec temporisation exponentielle
  3. Délais d’expiration et disjoncteurs
  4. Valider les sorties des outils (Pydantic)
← Retour à AI Agents