Boss Fight: Production-Ready AI System
Das Szenario
Abschnitt betitelt „Das Szenario“Du baust ein Production-Ready AI-System — das ultimative Projekt, das alles vereint was Du in 9 Levels gelernt hast. Das System nimmt ein Thema entgegen, recherchiert autonom, waehlt für jeden Schritt das optimale Modell, schuetzt sich mit Guardrails, und liefert einen qualitaetsgesicherten Report.
Dein System soll sich so anfuehlen:
[Input Guard] "Edge Computing Trends" — Injection Check: OK, PII Check: OK
[Phase 1: Research] Routing: gemini-flash (Research = einfache Suche) Iteration 1: search("Edge Computing Vorteile 2026") — 312 Tokens Iteration 2: search("Edge Computing vs Cloud Computing") — 287 Tokens Iteration 3: Fertig (finishReason: stop)[Phase 1] 3 Iterationen, 1.041 Tokens, Abbruch: complete
[Phase 2: Summarize] Routing: claude-sonnet (Analyse = komplex) 5 Kernaussagen generiert — 423 Tokens
[Phase 3: Format] Routing: claude-sonnet (Formatierung = komplex) Streaming Report... "Edge Computing hat sich als Schluessel-Technologie etabliert..."[Phase 3] 891 Tokens
[Output Guard] Laenge: OK (2.847 Zeichen), Format: OK
[Quality Compare] Gleichen Prompt an 2 Modelle → Judge Score: 8/10
[Stats] Pipeline: 3.2s, 2.355 Tokens, geschaetzte Kosten: $0.023Dieses Projekt verbindet alle 9 Levels:
Anforderungen
Abschnitt betitelt „Anforderungen“Pflicht — das muss Dein System können
Abschnitt betitelt „Pflicht — das muss Dein System können“-
Input Guardrails (Challenge 9.1) — Pruefe jeden User-Input auf Prompt Injection und PII bevor die Pipeline startet. Ungueltige Eingaben werden mit einer klaren Fehlermeldung abgelehnt.
-
Model Router (Challenge 9.2) — Nutze für jede Phase der Pipeline das optimale Modell. Research: guenstiges Flash-Modell. Analyse und Formatierung: starkes Sonnet/Opus-Modell. Klassifikation: kleinstes verfuegbares Modell.
-
Research Loop (Level 3 + Level 8) — Ein Custom Agent Loop mit mindestens einem Tool (search). Der Loop hat drei Break Conditions: Max Iterations (5), Timeout (30s), Cost Guard (5.000 Tokens). Der Agent entscheidet selbst, wann genug recherchiert ist.
-
Workflow (Level 8.1) — Die Processing-Phase verkettet mindestens 2 sequentielle
generateText-Calls. Output von Step N wird Input von Step N+1. Jeder Step hat einen eigenen System Prompt mit XML-strukturiertem Context Engineering (Level 5). -
Output Guardrails (Challenge 9.1) — Pruefe den finalen Report auf Laenge, Format und Inhalt. Leere oder zu lange Outputs werden abgefangen.
-
Usage Tracking (Level 2.2) — Tracke den Token-Verbrauch pro Phase und gesamt. Berechne geschaetzte Kosten.
-
Structured Output (Level 1.5) — Der Report wird als typisiertes Objekt mit Zod Schema zurueckgegeben (Titel, Zusammenfassung, Kernaussagen, Fazit).
Bonus — für den Extra-Kick
Abschnitt betitelt „Bonus — für den Extra-Kick“-
Comparing Outputs (Challenge 9.3) — Für den finalen Report: Generiere die Zusammenfassung mit 2 verschiedenen Modellen parallel und waehle das bessere Ergebnis (per einfachem Scorer oder LLM-as-a-Judge).
-
Streaming (Level 7 + 8.2) — Streame den finalen Report in Echtzeit. Sende Progress Data Parts für jede Phase der Pipeline. (Nutze
createDataStream+writeDatawie in Challenge 8.2.) -
Eval Coverage (Level 6) — Schreibe mindestens 2 Evalite-Tests: einen der prüft ob der Report die erwarteten Abschnitte hat, und einen der die Laenge der Zusammenfassung bewertet.
Starter-Code
Abschnitt betitelt „Starter-Code“import { createDataStream, generateText, streamText, tool, Output } from 'ai';import { anthropic } from '@ai-sdk/anthropic';import { google } from '@ai-sdk/google';import { z } from 'zod';
// --- Schemas ---const ReportSchema = z.object({ title: z.string(), summary: z.string(), keyFindings: z.array(z.string()).min(3).max(7), conclusion: z.string(),});
// --- Guardrails ---// TODO: Input-Guardrails (Injection, PII)// TODO: Output-Guardrails (Laenge, Format)
// --- Model Router ---// TODO: selectModel(phase: 'research' | 'analysis' | 'format' | 'classify')
// --- Tools ---// TODO: search-Tool
// --- Pipeline Phases ---// TODO: researchPhase(topic) — Custom Loop + Tools + Break Conditions// TODO: processingPhase(research, topic) — Workflow + Context Engineering + Structured Output// TODO: qualityPhase(report) — Output Guardrails + Comparing Outputs
// --- Main Pipeline ---// TODO: researchPipeline(topic) — Orchestriert alle Phasen, streamt Fortschritt, trackt Kosten
// --- Evals ---// TODO: evalite('research-pipeline', { ... })Bewertungskriterien
Abschnitt betitelt „Bewertungskriterien“Pflicht — Dein Boss Fight ist bestanden, wenn:
Abschnitt betitelt „Pflicht — Dein Boss Fight ist bestanden, wenn:“- Input-Guardrails prüfen auf Prompt Injection und PII
- Model Router waehlt unterschiedliche Modelle für Research vs. Analysis
- Research Loop nutzt einen Custom while-Loop mit mindestens einem Tool
- Mindestens 2 Break Conditions sind implementiert (Max Iterations + ein weiterer)
- Workflow verkettet mindestens 2 sequentielle
generateText-Calls - System Prompts nutzen XML-Struktur (Context Engineering)
- Output-Guardrails prüfen den finalen Report
- Token-Verbrauch wird pro Phase und gesamt getrackt
- Structured Output mit Zod Schema
Bonus — für die Kuer:
Abschnitt betitelt „Bonus — für die Kuer:“- Comparing Outputs generiert mit mindestens 2 Modellen parallel und waehlt das bessere Ergebnis
- Streaming mit Progress Data Parts für jede Pipeline-Phase
- Mindestens ein Evalite-Test prüft die Pipeline-Qualität
Hinweise
Abschnitt betitelt „Hinweise“Hinweis 1: Pipeline-Struktur
Baue die Pipeline als eine async function researchPipeline(topic: string) die alle drei Phasen nacheinander ausfuehrt. Jede Phase ist eine eigene Funktion die ein Ergebnis-Objekt zurueckgibt. Am Ende: Statistiken sammeln und den Report zurueckgeben.
Hinweis 2: Model Router Integration
Erstelle eine selectModel-Funktion die den Phasen-Namen als Parameter nimmt. Research bekommt ein Flash-Modell, Analysis und Format bekommen Sonnet. Der Router wird in jeder Phase aufgerufen, nicht zentral — so kann jede Phase ihr optimales Modell bekommen.
Hinweis 3: Comparing Outputs einbauen
Der Vergleich muss nicht die gesamte Pipeline doppelt laufen lassen. Es reicht, in der Processing-Phase die Zusammenfassung mit 2 Modellen parallel zu generieren (Promise.all) und dann den laengeren/besseren Output zu waehlen. Der Research-Schritt laeuft nur einmal.
Hinweis 4: Evals separat halten
Schreibe die Evals in eine separate Datei. Importiere die Pipeline-Funktion und teste sie mit Evalite. Ein Scorer prüft ob keyFindings.length >= 3, ein anderer ob summary.length > 100. So bleiben Pipeline und Tests sauber getrennt.