Zum Hauptinhalt springen
Grundlagen6–10 Stunden

Resilienter AI-API-Client

Baue einen produktionsreifen LLM-API-Client mit strukturierten Ausgaben, Validierung, Retries, Timeouts, Idempotenz, Tracing und Tests.

Python-TypisierungAsync IOPydanticRetriesObservabilityTesting

Szenario

Aufgabe

Ein interner Dienst soll ein LLM zur Klassifizierung von Support-Anfragen aufrufen. Antworten müssen strukturiert, wiederholte Requests sicher und Fehler messbar sowie reproduzierbar sein.

Schrittweise Umsetzung

1. Vertrag definieren

Ergebnis: Requests und Responses besitzen eine stabile typisierte Form.

Aufgaben

  • Input-Modell beschreiben
  • Output-Schema erstellen
  • Validierungsfehler definieren
  • Correlation ID hinzufügen

Prüfungen

  • Ungültige Antworten passieren nie still
  • Das Schema besitzt Unit Tests

2. Transport-Layer implementieren

Ergebnis: Der Client kontrolliert das Netzwerkverhalten explizit.

Aufgaben

  • Asynchronen Request-Pfad hinzufügen
  • Connect- und Read-Timeout setzen
  • 429- und 5xx-Antworten behandeln
  • Exponentiellen Backoff mit Jitter hinzufügen

Prüfungen

  • Retries sind begrenzt
  • Nicht wiederholbare Fehler werden nicht erneut gesendet

3. Observability hinzufügen

Ergebnis: Jeder Aufruf lässt sich nachträglich erklären.

Aufgaben

  • Request ID loggen
  • Latenz messen
  • Token-Nutzung und Retry-Anzahl erfassen
  • Keine Secrets oder PII loggen

Prüfungen

  • Ein Request ist Ende-zu-Ende nachvollziehbar
  • Sensible Daten landen nicht in Logs

4. Tests und Fehlersimulation bauen

Ergebnis: Bekannte Fehlermodi sind lokal reproduzierbar.

Aufgaben

  • Timeout mocken
  • 429 mocken
  • Fehlerhaftes JSON zurückgeben
  • Doppelten Request prüfen

Prüfungen

  • Alle Fehlerpfade besitzen Assertions
  • Ein idempotent wiederholter Request erzeugt kein Duplikat

Akzeptanzkriterien

  • Typen bestehen die Validierung
  • Alle Tests sind grün
  • Retries sind begrenzt
  • Ungültige strukturierte Ausgabe erzeugt einen expliziten Fehler
  • Ein Latenz-/Retry-/Kostenbericht liegt vor

Bewertungsraster

Wie das Ergebnis bewertet wird

Bestehensgrenze: 70/100 · Auszeichnung: 90/100

Verträge und Validierung

Requests, Responses und Fehler besitzen eine explizite typisierte Form.

25 Punkte

Unzureichend

Das Schema ist unvollständig oder Fehler werden verschluckt.

Kompetent

Die Kernverträge sind typisiert und getestet.

Stark

Verträge sind versioniert und Fehlermodi besitzen eigene Typen und Tests.

Erforderliche Nachweise

  • ✓ Link zu Code oder Artefakt
  • ✓ Kurzes README mit den Entscheidungen
  • ✓ Testausgabe oder Runtime-Evidenz
  • ✓ Beispiele für gültige und ungültige Antworten

Zuverlässigkeit des Transport-Layers

Timeouts, Retries, Backoff, Rate Limits und Idempotenz sind mit sicheren Grenzen umgesetzt.

30 Punkte

Unzureichend

Retries sind unbegrenzt oder retryable und non-retryable Fehler werden vermischt.

Kompetent

Retry- und Timeout-Policies sind begrenzt und getestet.

Stark

Jitter, Circuit Breaker oder Multi-Model-Fallback werden mit Evidenz nachgewiesen.

Erforderliche Nachweise

  • ✓ Link zu Code oder Artefakt
  • ✓ Kurzes README mit den Entscheidungen
  • ✓ Testausgabe oder Runtime-Evidenz
  • ✓ Fehlersimulation für Timeout, 429 und 5xx

Observability

Jeder Aufruf ist über Request ID, Latenz, Retries, Usage und sichere Logs erklärbar.

20 Punkte

Unzureichend

Es gibt keine Ende-zu-Ende-Korrelation oder sensible Daten stehen in Logs.

Kompetent

Request ID, Latenz, Usage und Redaction sind umgesetzt.

Stark

Distributed Traces, Dashboards oder Alert-Schwellen sind umgesetzt.

Erforderliche Nachweise

  • ✓ Link zu Code oder Artefakt
  • ✓ Kurzes README mit den Entscheidungen
  • ✓ Testausgabe oder Runtime-Evidenz
  • ✓ Beispiel-Trace oder strukturierter Log

Tests und Reproduzierbarkeit

Erfolgs- und Fehlerpfade lassen sich automatisch reproduzieren.

25 Punkte

Unzureichend

Nur der Happy Path ist getestet.

Kompetent

Unit- und Integrationstests decken die wichtigsten Fehlermodi ab.

Stark

Concurrency-/Lasttests und stabile Regression Fixtures sind enthalten.

Erforderliche Nachweise

  • ✓ Link zu Code oder Artefakt
  • ✓ Kurzes README mit den Entscheidungen
  • ✓ Testausgabe oder Runtime-Evidenz
  • ✓ Testmatrix für Schlüsselszenarien