0Pricing
AI Agents · Lektion

Wiederholungen mit exponentiellem Backoff

Verwenden Sie tenacity, um vorübergehende Fehler mit exponentiell steigenden Verzögerungen und Jitter erneut zu versuchen.

Wiederholungen mit exponentiellem Backoff ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Warum Wiederholungen?

Externe Aufrufe (LLMs, Such-APIs, Vektordatenbanken) schlagen vorübergehend fehl. Eine einfache Wiederholung behebt die meisten vorübergehenden Fehler, ohne den Benutzer zu belasten.

Was Sie NICHT tun sollten

Wiederholen Sie einen Aufruf nicht sofort in einer engen Schleife — dadurch überlasten Sie den Dienst, und der Rate Limiter sperrt Sie möglicherweise:

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

Exponentielles Backoff

Warten Sie nach jedem Fehler länger. Die Potenzierung mit 2 ist dabei üblich:

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

Jitter hinzufügen

Ohne Jitter werden die Wiederholungen vieler Clients zeitlich synchron — dadurch entsteht ein Ansturm nach dem Thundering-Herd-Muster. Fügen Sie einen zufälligen Versatz hinzu:

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

Tenacity verwenden

Die Bibliothek tenacity übernimmt dies für Sie:

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()

Nur vorübergehende Fehler wiederholen

Wiederholen Sie niemals bei:

  • 4xx-Fehlern (fehlerhafte Anfrage — eine Wiederholung hilft nicht)
  • Authentifizierungsfehlern
  • Validierungsfehlern

Wiederholen Sie bei:

  • Timeouts
  • 5xx-Serverfehlern
  • Rate Limits (mit längeren Wartezeiten)

Rate-Limit-bewusste Wiederholungen

Berücksichtigen Sie den Header Retry-After:

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

Gesamtdauer der Wiederholungen begrenzen

Begrenzen Sie die Gesamtdauer der Wiederholungen — für einen benutzerbezogenen Aufruf üblicherweise auf 30–60 Sekunden:

from tenacity import stop_after_delay

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

Idempotenz-Header

Fügen Sie bei nicht idempotenten APIs (Stripe usw.) bei jeder Wiederholung einen Idempotenzschlüssel hinzu, damit Duplikate zusammengeführt werden:

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

Auch den LLM-Aufruf wiederholen

Die OpenAI- und Anthropic-SDKs wiederholen Aufrufe automatisch ein- bis zweimal. Sie können dies konfigurieren:

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

Asynchrone Wiederholungen

Für asynchronen Code:

from tenacity import AsyncRetrying

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

Wiederholungen protokollieren

Jede Wiederholung sollte Folgendes protokollieren: Versuchsnummer, Wartezeit und Fehlerursache. Andernfalls lässt sich die Frage „Warum ist das so langsam?“ nicht beantworten.

Wiederholungen und Timeouts

Setzen Sie für jeden Versuch ein knappes Timeout (z. B. 10 s) und über stop_after_delay eine Obergrenze für die Gesamtdauer (z. B. 60 s). Ohne beides kann eine feststeckende Verbindung unbegrenzt hängen.

Warum Jitter?

Warum sollten Sie den Verzögerungen bei Wiederholungen einen zufälligen Jitter hinzufügen?

Zusammenfassung

Exponentielles Backoff + Jitter + begrenzte Gesamtdauer + Wiederholungen nur bei vorübergehenden Fehlern. Verwenden Sie tenacity, um Standardcode zu vermeiden.

Häufig gestellte Fragen

Ist die Lektion „Wiederholungen mit exponentiellem Backoff“ kostenlos?

Ja — der vollständige Text von „Wiederholungen mit exponentiellem Backoff“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Wiederholungen mit exponentiellem Backoff“?

Verwenden Sie tenacity, um vorübergehende Fehler mit exponentiell steigenden Verzögerungen und Jitter erneut zu versuchen. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Wiederholungen mit exponentiellem Backoff“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Idempotente Tools und Seiteneffekte
  2. Wiederholungen mit exponentiellem Backoff
  3. Timeouts und Circuit Breaker
  4. Tool-Ausgaben validieren (Pydantic)
← Zurück zu AI Agents