Evaluation, Deployment und Retrospektive
Führen Sie den vollständigen Evaluation-Harness einschließlich Retrieval-Metriken, Qualitätsbewertungen durch LLM-as-Judge und Lasttests aus, deployen Sie die Anwendung bei einem Cloud-Anbieter und schreiben Sie eine Retrospektive mit den gewonnenen Erkenntnissen.
Evaluation, Deployment und Retrospektive ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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 Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.
Die letzte Meile: Evaluierung vor dem Launch
Ein System ist erst dann bereit für den Launch, wenn es unter realitätsnahen Bedingungen vollständig evaluiert wurde. Die abschließende Evaluierungsphase kombiniert alle in diesem Track erlernten Evaluierungstechniken: Retrieval-Metriken zur Überprüfung, ob die RAG-Pipeline die richtigen Chunks findet, LLM-as-Judge-Bewertungen zur Überprüfung der Antwortqualität, Lasttests zur Überprüfung der Latenz-SLAs und Sicherheitsscans zur Überprüfung der Härtung. Alle Prüfungen müssen bestanden sein, bevor die Bereitstellung beginnt.
Die vollständige Evaluierungssuite ausführen
Führen Sie die vollständige Evaluierungssuite in Ihrer Staging-Umgebung mit einer repräsentativen Stichprobe produktionsnaher Abfragen aus. Erfassen Sie alle Metriken: Trefferquote, MRR und NDCG für das Retrieval; Faithfulness und Antwortrelevanz für die Generierung; Kosten pro Abfrage; p50-, p95- und p99-Latenz. Vergleichen Sie jede Metrik mit den in der Architekturphase definierten Erfolgskriterien. Veröffentlichen Sie das System erst, wenn alle verbindlichen Mindestwerte erreicht sind.
async def final_evaluation(system_url: str, test_set_path: str) -> dict:
test_cases = load_test_set(test_set_path)
results = []
for case in test_cases:
start = time.perf_counter()
response = await query_system(system_url, case['question'])
latency_ms = (time.perf_counter() - start) * 1000
judge_score = await judge(case['question'], response['answer'], case.get('reference'))
hit = any(case['relevant_doc'] in s for s in response.get('sources', []))
results.append({'latency_ms': latency_ms, 'score': judge_score, 'hit': hit, 'cost': response.get('cost_usd', 0)})
return compute_final_metrics(results)Das Produktionssystem einem Lasttest unterziehen
Führen Sie vor dem Go-live einen Lasttest durch, der realistischen Produktionsverkehr simuliert. Verwenden Sie ein Tool wie Locust oder k6, um die erwartete Spitzenparallelität (z. B. 50 gleichzeitige Benutzer) schrittweise zu erreichen, und messen Sie, wie sich die Latenz unter Last verändert. Überprüfen Sie, dass die Circuit Breaker bei normaler Last nicht auslösen, der Rate Limiter bei Burst-Traffic korrekt 429-Antworten zurückgibt und die Trefferquote des semantischen Caches über Ihrem Zielwert bleibt. Beheben Sie alle Regressionen, bevor Sie fortfahren.
# Locust load test (locustfile.py)
from locust import HttpUser, task, between
import random
QUESTIONS = [
'What is the return policy?',
'How do I cancel my subscription?',
'Where are you located?',
]
class AIUser(HttpUser):
wait_time = between(1, 3) # realistic think time
@task
def query(self):
self.client.post(
'/query',
json={'question': random.choice(QUESTIONS), 'tenant_id': 'load_test'},
headers={'Authorization': 'Bearer test_token'}
)
# Run: locust -f locustfile.py --headless -u 50 -r 5 --run-time 5mIn die Produktion deployen
Stellen Sie das System mithilfe eines Blue-Green-Deployments bereit: Starten Sie die neue Version (Green) parallel zur bestehenden Version (Blue), führen Sie Smoke-Tests gegen Green aus und verlagern Sie den Traffic anschließend schrittweise von Blue zu Green. Leiten Sie zunächst 5 % des Traffics an Green weiter, überwachen Sie 10 Minuten lang Fehlerraten und Latenz und erhöhen Sie den Anteil dann auf 25 %, anschließend auf 50 % und schließlich auf 100 %. So ist bei Problemen ein sofortiges Rollback auf Blue ohne Ausfallzeit möglich.
# Deployment steps (pseudocode for AWS ECS or K8s):
# 1. Build and push new Docker image
# docker build -t qa-assistant:v2.0 . && docker push ...
#
# 2. Deploy green (new) version alongside blue (current)
# kubectl apply -f deploy/green.yaml
#
# 3. Run smoke tests against green
# pytest tests/smoke/ --base-url https://green.internal
#
# 4. Canary traffic shift (ALB weighted routing)
# 5% -> green (monitor 10min)
# 25% -> green (monitor 10min)
# 50% -> green (monitor 10min)
# 100% -> green
#
# 5. Decommission blue after 24h stabilityÜberwachung nach dem Deployment
Überwachen Sie nach dem Deployment in den ersten 2 Stunden aktiv die wichtigsten Metriken. Überwachen Sie: Fehlerrate (Ziel <1 %), p95-Latenz (Ziel <8 s), Cache-Trefferrate (Ziel >20 %) und Kosten pro Abfrage (Ziel <$0.05). Richten Sie für das erste Deployment einen War-Room-Slack-Kanal mit allen diensthabenden Engineers ein. Sobald eine Metrik einen Warnschwellwert überschreitet, muss eine Untersuchung eingeleitet werden; beim Überschreiten eines kritischen Schwellwerts erfolgt sofort ein Rollback auf Blue.
# Post-deploy monitoring dashboard queries:
# (Assuming Grafana + Prometheus)
# Error rate (last 5 min):
# rate(http_requests_total{status=~'5..'}[5m]) / rate(http_requests_total[5m])
# p95 latency (last 5 min):
# histogram_quantile(0.95, rate(query_duration_seconds_bucket[5m]))
# Cache hit rate:
# rate(cache_hits_total[5m]) / rate(queries_total[5m])
# Average cost per query:
# rate(llm_cost_usd_total[5m]) / rate(queries_total[5m])Das Architektur-Retrospektivdokument verfassen
Verfassen Sie nach einer Woche im Produktivbetrieb ein Retrospektivdokument, in dem Sie festhalten, was funktioniert hat, was nicht funktioniert hat und was Sie anders machen würden. Eine gute Retrospektive geht ehrlich mit Fehlern um und formuliert Erkenntnisse konkret. Zukünftige Leserinnen und Leser – einschließlich Ihnen selbst in sechs Monaten – profitieren davon, die Gründe für Entscheidungen zu verstehen, die unter Zeitdruck getroffen wurden, sowie die unerwarteten Hindernisse, die dabei aufgetreten sind.
# RETROSPECTIVE.md structure:
#
# ## What Worked Well
# - Hybrid retrieval improved hit rate from 71% to 89%
# - Semantic cache reduced average cost by 31%
# - LangSmith tracing saved 2 days of debugging
#
# ## What Did Not Work
# - Semantic chunking was 4x slower than recursive chunking
# with only 3% hit rate improvement -- not worth it
# - Cohere reranker had 400ms latency -- too slow for p95 target
# Switched to BGE-reranker-v2 running locally
#
# ## What We'd Do Differently
# - Start with pgvector, not Pinecone (migration cost 3 days)
# - Add semantic cache BEFORE building the agent, not afterBetriebliche Runbooks dokumentieren
Verfassen Sie für jeden Alert, der in der Produktion ausgelöst werden kann, ein Runbook. Ein Runbook ist eine Schritt-für-Schritt-Anleitung zur Diagnose und Behebung eines bestimmten Alerts. Es sollte folgende Fragen beantworten: Was bedeutet dieser Alert, was ist die wahrscheinliche Ursache, wie diagnostiziere ich das Problem und wie behebe ich es? Runbooks verkürzen die mittlere Zeit bis zur Behebung (MTTR) von Stunden auf Minuten, da während eines stressigen Incidents keine Diagnoseschritte mehr selbst hergeleitet werden müssen.
# runbooks/latency.md
# ## Alert: p95 Latency > 8000ms
#
# ### Likely Causes
# 1. OpenAI API degraded (check status.openai.com)
# 2. Cohere reranker slow (check Cohere status page)
# 3. pgvector query slow (check DB CPU in CloudWatch)
# 4. Redis cache full (check Redis memory usage)
#
# ### Diagnosis
# curl https://api.openai.com/v1/models -H 'Authorization: Bearer $KEY'
# Check LangSmith traces for which step is slow
# SELECT mean(duration) FROM traces GROUP BY step
#
# ### Fixes
# - If OpenAI slow: circuit breaker should auto-failover to Claude
# - If Cohere slow: disable reranking temporarily (env SKIP_RERANK=1)
# - If DB slow: increase pgvector ef_search from 40 to 20Geschäftliche Auswirkungen messen
Messen Sie nach einem Monat im Produktivbetrieb die geschäftlichen Auswirkungen des Systems, die über technische Metriken hinausgehen. Bei einem Q&A-Assistenten: Wie stark ist das Volumen der Kundensupport-Tickets zurückgegangen? Wie hoch ist die Nutzerzufriedenheit bei von der KI beantworteten Anfragen? Wie viele Anfragen hat das System bearbeitet, für die zuvor menschliche Supportmitarbeiter erforderlich waren? Diese Geschäftsmetriken rechtfertigen die Investition und helfen bei der künftigen Priorisierung zwischen Qualitätsverbesserungen und neuen Funktionen.
# Business impact metrics (month 1):
# Technical:
# - 12,847 queries served, 11,439 (89%) answered without human
# - Avg query cost: $0.031 (within $0.05 budget)
# - System uptime: 99.94%
#
# Business:
# - Support tickets: 1,840/month -> 1,203/month (-35%)
# - Avg resolution time: 4.2h -> 23 seconds for AI-answered
# - User CSAT on AI answers: 4.1/5.0
# - Cost per resolved query: $12 (human) -> $0.031 (AI)
# - ROI: 157% in month 1 at current volumesDie nächste Iteration planen
Ein ausgeliefertes System ist nie fertig – es bildet die Grundlage für kontinuierliche Verbesserungen. Nutzen Sie Ihre Evaluierungsdaten, das Feedback der Nutzerinnen und Nutzer sowie die Erkenntnisse aus der Retrospektive, um die nächste Iteration zu planen. Priorisieren Sie Verbesserungen, die sich am stärksten auf die wichtigsten Metriken auswirken: Wenn die Retrieval-Trefferrate der begrenzende Faktor ist, investieren Sie in besseres Chunking oder ein anderes Embedding-Modell; wenn die Nutzerzufriedenheit trotz guter Retrieval-Ergebnisse niedrig ist, investieren Sie in die Prompt-Qualität.
# Next iteration priorities (based on first month data):
NEXT_SPRINT = [
# High impact / high confidence
{
'feature': 'Sentence-window retrieval',
'expected_impact': 'Hit rate 89% -> 93%',
'effort': 'medium',
'evidence': '11% of failures due to answer split across chunks'
},
# High impact / medium confidence
{
'feature': 'Query decomposition for multi-hop questions',
'expected_impact': 'Multi-hop correctness 61% -> 78%',
'effort': 'high',
'evidence': '23% of failures are multi-hop questions'
},
# Low effort quick win
{
'feature': 'Extend cache TTL from 1h to 24h',
'expected_impact': 'Cache hit rate 31% -> 38%',
'effort': 'trivial',
'evidence': 'Same questions asked daily by different users'
}
]Wissen teilen und dokumentieren
Dokumentieren Sie die wichtigsten, nicht unmittelbar ersichtlichen Implementierungsentscheidungen des Systems. Dazu gehören: warum eine bestimmte Chunk-Größe gewählt wurde (und was die Experimente gezeigt haben), wie der Ähnlichkeitsschwellwert des semantischen Caches kalibriert wurde, welche Injection-Muster der Filter derzeit erkennt und welche nicht und wie dem Agenten neue Tools hinzugefügt werden. Eine gute interne Dokumentation verkürzt die Einarbeitungszeit neuer Mitwirkender und verhindert, dass Entscheidungen versehentlich von Personen rückgängig gemacht werden, die die dahinterstehenden Gründe nicht kennen.
# INTERNALS.md — key non-obvious decisions:
#
# ## Chunk Size: 800 tokens with 100 token overlap
# We tested 400, 600, 800, 1200 tokens.
# 800 tokens maximizes hit rate (89%) while keeping context
# small enough for 5 chunks to fit comfortably in 4096 token prompt.
# Larger chunks improved recall but degraded precision.
#
# ## Cache Similarity Threshold: 0.92
# Tested 0.85, 0.90, 0.92, 0.95.
# 0.92 gives 31% hit rate with <2% incorrect cache hits.
# 0.85 gives 41% hit rate but 8% incorrect hits (too aggressive).
#
# ## Reranker Top-N: 3 (from initial 10)
# More than 3 chunks causes context stuffing without quality gain.Was Sie erstellt haben
Reflektieren Sie über das vollständige System, das Sie in diesem Capstone erstellt haben: eine hybride RAG-Pipeline, die dichte und sparse Retrieval-Verfahren mit Reranking kombiniert, einen Streaming-Agenten mit Function Calling und Sicherheitsleitplanken, einen semantischen Cache, der die Kosten um 30 % senkt, Circuit Breaker für automatisches Failover, eine kontinuierlich in CI/CD ausgeführte LLM-as-Judge-Evaluierung und Schutzmaßnahmen gegen Prompt Injection, die vor adversarialen Eingaben schützen. Das ist AI Engineering für den Produktivbetrieb.
# System capabilities summary:
SYSTEM_CAPABILITIES = {
'retrieval': 'Hybrid BM25+dense with Cohere reranking, 89% hit rate',
'generation': 'GPT-4o with Claude fallback, circuit breaker, streaming',
'caching': 'Semantic cache (Redis+embeddings), 31% cache hit rate',
'security': 'Injection filter (2-stage) + output scanning + tenant isolation',
'observability': 'LangSmith traces + Prometheus metrics + PagerDuty alerts',
'evaluation': 'Automated LLM-as-judge in CI, daily full suite, LangSmith evals',
'reliability': '99.94% uptime, circuit breakers, graceful degradation ladder',
'cost': '$0.031/query average, model routing saves 67% vs GPT-4o only',
}Schnelltest
Testen Sie Ihr Verständnis von Deployment und Evaluierung von KI-Systemen im Produktivbetrieb.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: Die abschließende Evaluierung umfasst Retrieval-Metriken, LLM-as-Judge-Bewertungen, Lasttests und Sicherheitsscans, bevor ein Deployment beginnt. Ein Blue-Green-Deployment mit schrittweiser Traffic-Verlagerung ermöglicht ein sofortiges Rollback ohne Ausfallzeit, und Retrospektiven und Runbooks halten das institutionelle Wissen fest und verkürzen dadurch künftig die Zeit zur Behebung von Incidents. Herzlichen Glückwunsch zum Abschluss des Tracks „AI Engineering: LLM, RAG and Agents“!
Häufig gestellte Fragen
Ist die Lektion „Evaluation, Deployment und Retrospektive“ kostenlos?
Ja — der vollständige Text von „Evaluation, Deployment und Retrospektive“ 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 Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Evaluation, Deployment und Retrospektive“?
Führen Sie den vollständigen Evaluation-Harness einschließlich Retrieval-Metriken, Qualitätsbewertungen durch LLM-as-Judge und Lasttests aus, deployen Sie die Anwendung bei einem Cloud-Anbieter und s… Du übst AI Engineering Academy 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 Engineering Academy zu starten?
Keine Vorkenntnisse erforderlich. AI Engineering Academy 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 4 von 4.
Wie lange dauert die Lektion „Evaluation, Deployment und Retrospektive“?
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 Engineering Academy-Lektion Code schreiben und ausführen?
Ja. Jede AI Engineering Academy-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
- Die Produktionsarchitektur entwerfen
- Zentrale RAG- und Agentenfunktionen implementieren
- Härtung: Sicherheit, Caching und Zuverlässigkeit
- Evaluation, Deployment und Retrospektive