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:
passExponentielles 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 secondsJitter 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)
continueGesamtdauer 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
- Idempotente Tools und Seiteneffekte
- Wiederholungen mit exponentiellem Backoff
- Timeouts und Circuit Breaker
- Tool-Ausgaben validieren (Pydantic)