← Alle Lessons|Workflow-Muster für Agenten – welches wann, und wann keins

Workflow-Muster für Agenten – welches wann, und wann keins

Schritt 1 von 9

Die Grenze: Workflow oder Agent

Warum die meisten Agenten-Probleme Workflow-Probleme sind, wo die Grenze zwischen beiden verläuft und welche fünf Muster du kennen musst.

Lesson-Header: das Innere eines historischen Stellwerks mit einer Reihe von Messinghebeln

Das Angebot ist größer als der Bedarf

Wer heute ein Agenten-System plant, findet Kataloge mit einem Dutzend Architekturen. Die Praxis zeigt in die andere Richtung: Die erfolgreichsten Implementierungen nutzen wenige einfache Muster, die sich kombinieren lassen. Anthropic bestätigt das nach der Arbeit mit Dutzenden Teams. Die meisten Projekte scheitern nicht an zu wenig Komplexität, sondern an zu viel. Jede zusätzliche Schicht kostet Latenz, Geld und Debugbarkeit.

Daraus folgt die Grundregel dieser Lesson: Starte mit der einfachsten Lösung, die funktioniert. Füge Komplexität nur hinzu, wenn sie messbar bessere Ergebnisse liefert. Für viele Aufgaben reicht ein einzelner, gut gebauter Modellaufruf mit Retrieval. Ein Muster ist kein Qualitätsmerkmal. Es ist die Antwort auf ein benanntes Problem. Wer das Problem nicht benennen kann, braucht das Muster nicht.

Wer bestimmt den nächsten Schritt

An dieser einen Frage trennen sich Workflows und Agenten:

WorkflowAgent
Wer bestimmt den nächsten SchrittDein CodeDas Modell, in einer Schleife
Wann steht der Ablauf festVor der ersten EingabeErst zur Laufzeit, Schritt für Schritt
StärkenVorhersagbar, günstig, testbar, auditierbarTrägt auch, wenn der Lösungsweg vorher unbekannt ist
PreisKann nur, was vorgezeichnet istTeurer, langsamer, schwerer zu debuggen

Das ist keine Reifeskala. Workflows sind nicht die Vorstufe von Agenten, sondern eine eigene, oft bessere Wahl. Die Schleife selbst, der Agentic Loop, ist Thema von Vom Prompt zum Loop. Diese Lesson behandelt die Ebene darunter: die Muster, aus denen beide Seiten gebaut werden.

💡
Einordnung aus der Seminar-Praxis (Stand 2026): Rund 80 Prozent dessen, was aktuell als Agent verkauft wird, ist ein deterministischer Workflow mit einzelnen Modellaufrufen. Das ist kein Etikettenschwindel zum Nachteil der Nutzer, sondern oft die richtige Wahl. Wer Automatisierung als eigene Stufe vor dem Agenten begreift, erspart sich einen Großteil der Probleme.

Die Landkarte: fünf Muster

MusterWas passiertNimm es, wenn
Prompt ChainingFeste Stufen, jede verarbeitet den Output der vorigendie Arbeitsschritte für jede Eingabe dieselben sind
RoutingErst klassifizieren, dann in den passenden Spezial-Pfadverschiedene Eingabe-Sorten verschieden behandelt werden müssen
ParallelisierungMehrere Aufrufe gleichzeitig, ein Schritt führt zusammenTeilaufgaben unabhängig sind oder mehrere Blickwinkel zählen
Orchestrator-WorkersEin Modell zerlegt zur Laufzeit und delegiert an Workererst die Eingabe zeigt, welche Teilaufgaben es gibt
Evaluator-OptimizerErzeugen, bewerten, nachbessern, in Schleifees prüfbare Kriterien gibt und Nachbessern messbar hilft
Schaubild: die fünf Workflow-Muster als Mini-Diagramme in einer Reihe

Die Reihenfolge ist keine Rangliste. Sie sortiert nach Kontrolle: Von oben nach unten wächst der Anteil, den das Modell am Ablauf hat. Bei Chaining und Routing steht jeder Pfad im Code. Bei Orchestrator-Workers entscheidet das Modell über die Zerlegung, und genau dort beginnt der Übergang zum Agenten. Die folgenden Steps gehen die Muster in dieser Reihenfolge durch. Am Ende stehen ein Prüfschema für die Entscheidung und ein reales System als Kombinationsbeispiel.

💡
Voraussetzungen: Du solltest TypeScript lesen können. Die Code-Beispiele nutzen das Vercel AI SDK (generateText, generateObject) und Zod-Schemas. Modell-IDs sind bewusst als Rollen benannt (KLEIN, STARK), weil die Rollenverteilung das Muster trägt, nicht die Modellversion.
Takeaway
Regel #0: Starte mit der einfachsten Lösung, die funktioniert, oft ein einzelner Aufruf mit Retrieval. Ein Muster kommt dazu, wenn es ein benanntes Problem löst. Komplexität nur gegen messbare Verbesserung.
Schritt 2 von 9

Prompt Chaining: feste Stufen, geprüfte Übergaben

Das Grundmuster für Aufgaben, deren Zerlegung vor dem ersten Aufruf feststeht, und warum die Prüfung zwischen den Stufen den Unterschied macht.

Step-Header: eine Bahnstrecke führt durch eine Reihe von Signalbrücken

Prompt Chaining zerlegt eine Aufgabe in feste Stufen. Jeder Aufruf verarbeitet den Output des vorherigen, und der Ablauf steht komplett im Code. Der Tausch dahinter: etwas mehr Latenz, dafür weniger Fehler. Mehrere fokussierte Aufrufe schlagen einen einzelnen, der alles auf einmal soll. Ein Aufruf, der zugleich zusammenfassen, prüfen und umformulieren soll, macht alle drei Dinge mittelmäßig.

Schaubild Prompt Chaining: drei Aufrufe in Reihe, zwischen ihnen je ein Gate, am Ende ein Haken
Nimm Chaining, wennLass es, wenn
Die Arbeitsschritte für jede Eingabe dieselben sindDie Schritte je nach Eingabe wechseln. Dann brauchst du Routing oder Orchestrator-Workers
Jede Stufe für sich prüfbar istZwischen den Stufen nichts zu prüfen ist. Dann addiert die Kette nur Latenz

Typische Ketten aus dem Coding-Alltag: Diff zusammenfassen, dann Release-Note formulieren. Text erzeugen, dann gegen Kriterien prüfen, dann übersetzen. Anforderung strukturieren, dann Code generieren.

TypeScript
import { generateText } from "ai";

// Modell-IDs kommen aus der Konfiguration, hier zählt die Rolle:
declare const KLEIN: string;  // schnell, günstig, fürs Verdichten
declare const STARK: string;  // stärkstes verfügbares, fürs Formulieren

async function releaseNote(diff: string): Promise<string> {
  // Stufe 1: technisches Änderungsprotokoll aus dem Diff
  const protokoll = await generateText({
    model: KLEIN,
    prompt: `Fasse die Änderungen dieses Diffs als Stichpunkte zusammen.\nNenne pro Punkt die betroffene Ticket-Nummer:\n${diff}`,
  });

  // Gate: Code prüft den Zwischenstand, bevor Stufe 2 läuft
  if (!/#\d+/.test(protokoll.text)) {
    throw new Error("Kein Ticket-Bezug gefunden. Abbruch statt Weitergabe.");
  }

  // Stufe 2: Nutzertext aus dem geprüften Zwischenstand
  const note = await generateText({
    model: STARK,
    prompt: `Formuliere aus diesen Stichpunkten eine Release-Note für Endnutzer:\n${protokoll.text}`,
  });
  return note.text;
}

Das Gate: die Kontrollstelle zwischen den Stufen

Ein Gate ist eine Kontrollstelle zwischen zwei Stufen: ein Stück normaler Code, der den Zwischenstand prüft, bevor die nächste Stufe startet. Wie ein Signal zwischen zwei Streckenabschnitten: Erst wenn es Fahrt zeigt, geht es weiter. Im Code-Beispiel oben ist das Gate die Regex-Zeile. Das Änderungsprotokoll muss eine Ticket-Nummer enthalten, sonst bricht die Kette ab, und Stufe 2 läuft gar nicht erst. Solche Prüfungen können ein Regex sein, ein Schema-Check oder ein Abgleich gegen eine Liste. Entscheidend ist, dass Code urteilt und kein weiterer Modellaufruf: Die Prüfung kostet praktisch nichts, ist immer gleich streng und lässt sich nicht überreden. So werden Fehler dort gefangen, wo sie entstehen, statt in die teuerste Stufe weiterzuwandern.

💡
Aus der Praxis: In der Chat-Plattform build.jetzt läuft im Business-Modus vor jedem Modellaufruf eine PII-Prüfung mit Maskierung, als fester, deterministischer Schritt. Ein Ketten-Glied, das nie ein Modell sieht, also ein Gate am Eingang der Kette.
⚠️
Der häufigste Fehler ist die Kette ohne Gates. Fünf Stufen hintereinander, keine Prüfung dazwischen: Ein Fehler in Stufe 1 wandert ungehindert durch, und die Endkontrolle kann nicht mehr sagen, wo er entstand. Die zweite Falle ist die zu lange Kette: Jede Stufe addiert Latenz und einen möglichen Fehlerort. Die Kette ist so lang wie die Zerlegung trägt, nicht länger.
Übung: Einen Mega-Prompt zerlegen

Aufgabe: Nimm einen Prompt aus deinem Alltag, der mehrere Dinge gleichzeitig soll (z.B. zusammenfassen, bewerten und umformulieren).

  1. Zerlege ihn in zwei bis drei Stufen mit je einem klaren Auftrag.
  2. Definiere ein deterministisches Gate zwischen zwei Stufen: Was lässt sich mit Code prüfen, bevor die nächste Stufe läuft?
  3. Gegenprobe: Welcher Fehler, der dir bisher erst am Ende auffiel, wird jetzt am Gate gefangen?

Zeitaufwand: ~10 Minuten

Takeaway
Regel #1: Chaining passt, wenn die Zerlegung vor dem ersten Aufruf feststeht. Der Wert liegt in den Gates: Zwischen den Stufen prüft Code, nicht das Modell.
Schritt 3 von 9

Routing: erst klassifizieren, dann spezialisieren

Ein kleines Modell sortiert, spezialisierte Pfade antworten. Das Muster für Eingaben, die in klar trennbare Fälle zerfallen.

Step-Header: eine Weiche teilt ein Gleis in mehrere abzweigende Gleise

Routing stellt der Verarbeitung eine Klassifikation voran. Ein kleiner Aufruf ordnet die Eingabe einer Kategorie zu. Jede Kategorie hat ihren eigenen Pfad: eigener Prompt, eigene Tools, eigenes Modell. Der Grund ist Trennung der Anliegen. Ein einzelner Prompt, der Bug-Reports, Feature-Wünsche und Rechnungsfragen gleichzeitig behandeln soll, wird bei jeder Optimierung für einen Falltyp in den anderen schlechter.

Schaubild Routing: ein Router verteilt auf drei Pfade, ein vierter Ausgang führt zum Menschen (Unklar)
SignalRouting passtRouting passt nicht
KategorienKlar trennbar, ein Mensch könnte sicher zuordnenUnscharf, viele Eingaben passen in mehrere
BehandlungPro Kategorie wirklich verschieden (Prompt, Tools, Modell)Am Ende läuft doch überall derselbe Prompt
VolumenGenug Fälle pro Kategorie, um die Pfade zu pflegenKategorien mit einer Handvoll Fällen im Monat
TypeScript
import { generateObject } from "ai";
import { z } from "zod";

const route = z.object({
  kategorie: z.enum(["bugreport", "featurewunsch", "rechnungsfrage", "unklar"]),
  konfidenz: z.number().min(0).max(1),
});

async function bearbeite(anfrage: string) {
  // Routing ist ein Klassifikationsjob: kleines Modell, strukturierter Output
  const { object } = await generateObject({
    model: KLEIN,
    schema: route,
    prompt: `Ordne diese Support-Anfrage einer Kategorie zu:\n${anfrage}`,
  });

  // Der wichtigste Ausgang ist der unscheinbarste
  if (object.konfidenz < 0.7 || object.kategorie === "unklar") {
    return uebergabeAnMensch(anfrage);
  }

  switch (object.kategorie) {
    case "bugreport":      return bugPfad(anfrage);       // eigene Tools: Repo, Issues
    case "featurewunsch":  return backlogPfad(anfrage);   // kleines Modell reicht
    case "rechnungsfrage": return rechnungsPfad(anfrage); // starkes Modell, enge Regeln
  }
}

Die wichtigste Zeile ist der Konfidenz-Ausgang. Ein Router ohne Unklar-Pfad zwingt jede Eingabe in die nächstbeste Kategorie. Der falsch geroutete Fall bekommt dann den falschen Prompt, die falschen Tools und die falschen Grenzen. Damit ist die Fehlklassifikation teurer als im Ein-Prompt-System, denn der Spezialpfad wurde für andere Fälle gebaut. In Sicherheit in der Generierung trägt genau dieses Muster die Architektur: Ein Guard klassifiziert die Risikoklasse, und die Prüftiefe folgt der Klasse, nicht dem System.

Routing ist auch ein Kostenhebel. Die Klassifikation läuft auf einem kleinen Modell, und nur die harten Pfade bekommen das starke. Miss die Verteilung: Wenn 80 Prozent der Anfragen auf dem günstigen Pfad landen, hat sich der Router über die Modellkosten bezahlt gemacht, bevor er die Qualität verbessert.
Übung: Deinen Router entwerfen

Aufgabe: Nimm einen Anfragestrom aus deinem Umfeld (Support-Postfach, interne Anfragen, Formular-Eingaben).

  1. Definiere drei bis fünf Kategorien und schreibe das Zod-Schema mit konfidenz.
  2. Lege pro Kategorie fest, was wirklich anders ist: Prompt, Tools, Modell.
  3. Gegenprobe: Nimm eine echte Anfrage, die in zwei Kategorien passt. Was macht dein Router mit ihr, und ist das vertretbar?

Zeitaufwand: ~10 Minuten

Takeaway
Regel #2: Routing passt, wenn Eingaben in trennbare Kategorien zerfallen, die unterschiedlich behandelt werden. Jeder Router braucht einen Unklar-Ausgang, sonst wird falsch einsortiert statt nachgefragt.
Schritt 4 von 9

Parallelisierung: Sectioning und Voting

Mehrere Modellaufrufe gleichzeitig, ein Aggregator führt zusammen. Zwei Spielarten mit unterschiedlichem Zweck.

Step-Header: mehrere parallele Gleise laufen in der Ferne zu einem zusammen

Parallelisierung lässt mehrere Aufrufe gleichzeitig laufen und führt die Ergebnisse in einem Aggregationsschritt zusammen. Dahinter stecken zwei Spielarten mit verschiedenem Zweck. Sectioning zerlegt in unabhängige Teilaufgaben und kauft Zeit: drei Dokumente gleichzeitig zusammenfassen statt nacheinander. Voting bearbeitet dieselbe Aufgabe mehrfach aus verschiedenen Blickwinkeln und kauft Verlässlichkeit: drei Prüfungen desselben Codes, jede mit eigenem Fokus.

Schaubild Parallelisierung: links Sectioning mit drei verschiedenen Teilaufgaben, rechts Voting mit drei gleichen, beide münden im Aggregator
Nimm Parallelisierung, wennLass es, wenn
Teilaufgaben unabhängig voneinander sind (Sectioning)Ein Ergebnis das nächste braucht. Abhängigkeit erzwingt Reihenfolge, das ist Chaining
Mehrere Blickwinkel auf dieselbe Aufgabe zählen (Voting)Ein Blickwinkel reicht. Voting kauft Verlässlichkeit, nie Geschwindigkeit
TypeScript
const PERSPEKTIVEN = [
  "Prüfe diesen Code ausschließlich auf Sicherheitslücken.",
  "Prüfe diesen Code ausschließlich auf Performance-Probleme.",
  "Prüfe diesen Code ausschließlich auf Verständlichkeit und Wartbarkeit.",
];

async function review(code: string): Promise<string> {
  // Voting: drei unabhängige Prüfungen, gleichzeitig
  const befunde = await Promise.all(
    PERSPEKTIVEN.map((auftrag) =>
      generateText({ model: KLEIN, prompt: `${auftrag}\n\n${code}` })
    )
  );

  // Aggregation: zusammenführen, deduplizieren, priorisieren
  const bericht = await generateText({
    model: STARK,
    prompt: `Führe diese drei Review-Befunde zu einem Bericht zusammen.\nDedupliziere und priorisiere nach Schwere:\n${befunde
      .map((b, i) => `[Perspektive ${i + 1}]\n${b.text}`)
      .join("\n---\n")}`,
  });
  return bericht.text;
}

Warum drei Aufrufe statt ein Prompt mit drei Aufträgen? Aus demselben Grund wie beim Chaining: Jede Perspektive bekommt die volle Aufmerksamkeit eines eigenen Aufrufs. Ein zweiter verbreiteter Einsatz ist die Guardrail-Prüfung parallel zur Antwortgenerierung. Sie kostet keine zusätzliche Latenz, weil sie neben der Antwort läuft statt nach ihr.

Voting in groß: der Modell-Rat

Wie weit sich Voting treiben lässt, zeigt das LLM-Council-Muster, bekannt geworden durch Andrej Karpathy. Drei Stufen: Erst beantworten mehrere Modelle verschiedener Anbieter dieselbe Frage parallel. Dann bewertet jedes Modell alle Antworten, anonymisiert als Antwort A, B und C, damit keines den eigenen Anbieter bevorzugt. Zuletzt fasst ein benanntes Chairman-Modell aus Antworten und Bewertungen die beste Fassung zusammen. Die ehrliche Rechnung: Vier Modelle bedeuten vierfache Token-Kosten, plus Review-Runde, plus Synthese. Das lohnt für einzelne Fragen, bei denen Qualität über Kosten steht, nicht als Standardpfad.

⚠️
Der Unabhängigkeits-Test: Kannst du die Aufrufe in beliebiger Reihenfolge starten, ohne dass sich ein Ergebnis ändert? Wenn nein, ist die Parallelität nur behauptet, und du baust in Wahrheit eine Kette.
Übung: Das Drei-Perspektiven-Review

Aufgabe: Baue das Review aus dem Code-Beispiel nach und füttere es mit einem eigenen Pull Request oder Code-Ausschnitt.

  1. Wähle drei Perspektiven, die zu deinem Code passen (z.B. Fehlerbehandlung, Typsicherheit, Naming).
  2. Lass alle drei parallel laufen und lies die Rohbefunde, bevor der Aggregator sie zusammenfasst.
  3. Gegenprobe: Welcher Befund taucht in zwei Perspektiven auf, und behandelt dein Aggregations-Prompt das als Bestätigung oder als Dublette?

Zeitaufwand: ~15 Minuten

Takeaway
Regel #3: Parallelisiere unabhängige Teilaufgaben (Sectioning) oder hole mehrere Blickwinkel auf dieselbe Aufgabe ein (Voting). Der Aggregator ist Teil des Musters, kein Nachgedanke.
Schritt 5 von 9

Orchestrator-Workers: zerlegen zur Laufzeit

Ein Modell plant, viele führen aus. Das erste Muster, bei dem das Modell die Kontrolle über die Zerlegung bekommt, und damit die Brücke zum Agenten.

Step-Header: der Arbeitsplatz des Stellwerksmeisters mit Hebelbank und Blick auf den Rangierbahnhof

Orchestrator-Workers dreht die Rollen. Ein zentrales Modell, der Orchestrator, zerlegt die Aufgabe zur Laufzeit in Teilaufträge, delegiert sie an Worker und führt die Ergebnisse zusammen. Der Unterschied zur Parallelisierung liegt in einer einzigen Frage: Wer definiert die Teilaufgaben? Beim Sectioning stehen sie im Code. Hier entscheidet das Modell, wie viele es werden und welche, denn das hängt von der Eingabe ab.

Schaubild Orchestrator-Workers: der Orchestrator delegiert an drei Worker, deren Ergebnisse in die Synthese laufen
Nimm Orchestrator-Workers, wennLass es, wenn
Erst die Eingabe zeigt, welche und wie viele Teilaufgaben es gibtDu die Teilaufgaben vorher aufzählen kannst. Dann reicht Parallelisierung
Rohmaterial die Hauptarbeit belasten würde und in Worker-Kontexte gehörtEin einzelner Aufruf mit Tools die Aufgabe schon trägt

Der Klassiker aus dem Coding-Alltag: eine Änderung, die eine vorher unbekannte Zahl von Dateien betrifft. Oder eine Recherche, deren Quellenmenge erst die Suche ergibt.

TypeScript
const plan = z.object({
  teilauftraege: z.array(
    z.object({ datei: z.string(), auftrag: z.string() })
  ),
});

const MAX_WORKER = 12; // Budget-Grenze: setzt der Code, nicht das Modell

async function refactoring(ziel: string, repoUebersicht: string) {
  // Der Orchestrator zerlegt zur Laufzeit:
  // wie viele Worker es werden, steht erst jetzt fest
  const { object } = await generateObject({
    model: STARK,
    schema: plan,
    prompt: `Ziel: ${ziel}\nRepo-Struktur:\n${repoUebersicht}\nZerlege in unabhängige Teilaufträge pro Datei.`,
  });

  if (object.teilauftraege.length > MAX_WORKER) {
    throw new Error(`Plan mit ${object.teilauftraege.length} Teilaufträgen abgelehnt. Ziel enger fassen.`);
  }

  // Worker laufen vordefiniert: gleicher Rahmen, eigener Kontext
  const ergebnisse = await Promise.all(
    object.teilauftraege.map((t) => worker(t))
  );

  // Der Orchestrator prüft die Summe gegen das Ziel
  return synthese(ziel, ergebnisse);
}

Das zweite Argument für dieses Muster ist der Kontext. Worker sind Sub-Agents mit eigenem Kontextfenster. Das Rohmaterial, lange Dateien, Suchtreffer, Zwischenstände, bleibt beim Worker. Der Orchestrator sieht nur Ergebnisse. Genau so arbeiten Coding-Agents, wenn sie für eine breite Suche einen Subagenten losschicken, der hundert Treffer liest und drei Fundstellen zurückmeldet. Der Hauptkontext bleibt sauber, und das hält lange Läufe stabil.

⚠️
Ab hier gibst du Vorhersagbarkeit ab. Der Orchestrator plant wie ein Agent, die Worker führen aus wie ein Workflow. Das ist die Brücke zwischen beiden Welten, und sie hat einen Preis: Kosten und Laufzeit hängen von der Zerlegung ab, die das Modell wählt. Deshalb gehört die Budget-Grenze in den Code. Das Modell entscheidet über das Was, nie über das Wieviel.
💡
Einordnung: In Architektur-Übersichten begegnen dir Plan-and-Execute und ReWOO, kurz für Reasoning Without Observation. Beide gehören zu dieser Familie: erst planen, dann ausführen. Plan-and-Execute darf nach jedem Schritt neu planen. ReWOO plant alle Schritte vorab, setzt Platzhalter für Zwischenergebnisse und führt dann ohne Neuplanung aus, das spart Tokens. Wer Orchestrator-Workers verstanden hat, liest beide als Stellschrauben, nicht als neue Muster.
Übung: Plan-Schema mit Budget

Aufgabe: Nimm ein Refactoring-Ziel aus deinem aktuellen Projekt (z.B. eine Umbenennung über das ganze Repo oder ein Import-Umbau).

  1. Schreibe das Zod-Schema für den Plan des Orchestrators: Welche Felder braucht ein Teilauftrag, damit ein Worker ihn ohne Rückfrage ausführen kann?
  2. Lege die Budget-Grenze fest und begründe die Zahl.
  3. Gegenprobe: Was tut dein Code, wenn der Orchestrator 40 Teilaufträge liefert? Ablehnen, stutzen oder nachverhandeln, und warum?

Zeitaufwand: ~10 Minuten

Takeaway
Regel #4: Orchestrator-Workers passt, wenn die Zerlegung erst zur Laufzeit feststeht. Gib die Kontrolle über das Was ab, nie über das Wieviel: Budget-Grenzen setzt der Code.
Schritt 6 von 9

Evaluator-Optimizer: die Schleife mit Budget

Ein Modell erzeugt, ein zweites bewertet gegen explizite Kriterien. Wann sich die Schleife lohnt und warum sie ein Budget braucht.

Step-Header: eine Drehscheibe im Ringlokschuppen führt eine Lok zurück zum Prüfstand

Evaluator-Optimizer trennt Erzeugen und Bewerten. Ein Modell liefert einen Entwurf. Ein zweiter Aufruf bewertet ihn gegen Kriterien und gibt konkrete Beanstandungen zurück. Die fließen in den nächsten Versuch, und die Schleife läuft, bis die Qualität reicht oder das Budget erschöpft ist.

Schaubild Evaluator-Optimizer: Generator und Evaluator in einer Schleife mit Budget-Zähler, Ausgang zum Haken
Nimm Evaluator-Optimizer, wennLass es, wenn
Es prüfbare Kriterien gibt, gegen die ein Modell verlässlich urteilen kannDie Bewertung auf ist das gut? hinausläuft. Das produziert Zustimmung, keine Befunde
Nachbessern das Ergebnis messbar verbessertDer erste Versuch schon trägt. Dann ist die Schleife nur eine Kostenstelle

Der menschliche Vergleich für die zweite Bedingung: Würde ein Lektor mit konkreten Anmerkungen den Text wirklich besser machen? Bei einer literarischen Übersetzung ja. Bei einer Betreffzeile eher nicht.

TypeScript
const urteil = z.object({
  bestanden: z.boolean(),
  befunde: z.array(z.string()), // konkrete, behebbare Beanstandungen
});

const MAX_RUNDEN = 2;

async function uebersetze(text: string): Promise<string> {
  let entwurf = await generateText({ model: STARK, prompt: auftrag(text) });

  for (let runde = 0; runde < MAX_RUNDEN; runde++) {
    const { object } = await generateObject({
      model: KLEIN,
      schema: urteil,
      // Explizite Kriterien, nicht "ist das gut?"
      prompt: kriterien(text, entwurf.text),
    });
    if (object.bestanden) return entwurf.text;

    // Die Beanstandungen reisen als Auftrag in den nächsten Versuch
    entwurf = await generateText({
      model: STARK,
      prompt: `${auftrag(text)}\n\nVorfassung:\n${entwurf.text}\n\nBehebe genau diese Punkte:\n${object.befunde.join("\n")}`,
    });
  }
  // Budget erschöpft: definierter Ausgang statt Endlosschleife
  return fallback(entwurf.text);
}

Warum getrennte Rollen und explizite Kriterien

Der Generator steht unter dem Auftrag zu liefern. Dieser Druck färbt jede Selbsteinschätzung. Ein separater Prüfaufruf mit eng gefasstem Auftrag urteilt ohne ihn. Genauso wichtig sind die Kriterien. Die Frage ist das gut? produziert wohlwollendes Nicken. Die Frage sind alle Zahlen aus der Vorlage übernommen, ist der Ton konsistent, fehlt eine Pflichtangabe? produziert Befunde. Und wenn Generator und Evaluator dieselbe Schwäche teilen, bestätigt die Schleife sich selbst. Dagegen helfen Kriterien aus der Domäne statt aus dem Modell, und wo es geht, deterministische Checks als Ergänzung.

Das Budget gehört zum Muster wie die Schleife selbst. Sicherheit in der Generierung rechnet das für den Produktionsfall durch: genau ein Wiederholungslauf mit der konkreten Beanstandung als Zusatzanweisung, danach ein vorab freigegebener Fallback. Die Begründung trägt über den Einzelfall hinaus: Wird eine präzise benannte Beanstandung im zweiten Versuch nicht behoben, liegt das Problem nicht in der Formulierung, sondern in der Faktenlage oder im Prompt. Weitere Runden kosten dann Geld, ohne die Wahrscheinlichkeit nennenswert zu heben.

💡
Einordnung: Reflexion, ebenfalls ein Übersichts-Klassiker, ist die Selbstkritik-Variante dieser Familie: Dasselbe Modell kritisiert den eigenen Output und überarbeitet ihn. Das ist billiger, aber schwächer, weil Kritiker und Erzeuger dieselben blinden Flecken teilen. Wenn die Qualität trägt, nimm sie mit. Wenn nicht, ist der getrennte Evaluator der nächste Schritt.
Übung: Kriterien statt Bauchgefühl

Aufgabe: Wähle einen Texttyp, den du regelmäßig mit KI erzeugst (Doku-Abschnitt, Commit-Message, Kundenantwort).

  1. Schreibe fünf prüfbare Kriterien, jedes als Ja/Nein-Frage.
  2. Baue die Schleife aus dem Code-Beispiel mit MAX_RUNDEN = 2 und lass sie gegen ein echtes Beispiel laufen.
  3. Gegenprobe: Ersetze die Kriterien einmal durch "Bewerte, ob der Text gut ist" und vergleiche die Befunde beider Läufe.

Zeitaufwand: ~15 Minuten

Takeaway
Regel #5: Evaluator-Optimizer lohnt nur mit expliziten Kriterien und messbarem Iterationsgewinn. Die Schleife braucht ein Budget und einen definierten Ausgang, sonst ist sie eine Kostenstelle.
Schritt 7 von 9

Multi-Agent: Eskalationsstufe, kein Ziel

Multi-Agent ist eine Koordinations-Wahl, keine Auszeichnung. Vier Stufen nach aufsteigender Komplexität und die Faustregeln, die vor Overengineering schützen.

Step-Header: ein weitläufiger Rangierbahnhof bei Nacht mit mehreren Stellwerken

Ein Multi-Agent-System ist keine eigene Systemklasse, sondern eine Entscheidung darüber, wie mehrere Agenten koordiniert werden. Jeder Sub-Agent für sich ist ein gewöhnlicher Agent. Neu ist nur die Koordination, und die gibt es in vier Stufen aufsteigender Komplexität, nach Philipp Schmid:

StufeWas passiertWas das Modell können muss
1 – Inline-ToolDer Haupt-Agent ruft den Sub-Agent wie eine Funktion: Auftrag rein, Ergebnis rausTool Use, mehr nicht
2 – Fan-OutMehrere Sub-Agents parallel, die Ergebnisse werden eingesammelt und zusammengeführtEntscheiden, wann es auf alle wartet
3 – Agent-PoolSub-Agents bleiben bestehen, der Haupt-Agent koordiniert und beendet sieMehrere Zustände über Zeit verfolgen
4 – TeamsSub-Agents reden direkt miteinander, der Haupt-Agent tritt zurückFrontier-Qualität in jedem einzelnen Agenten
Schaubild: die vier Multi-Agent-Stufen als Struktur-Diagramme, vom Inline-Tool bis zum Team ohne Zentrale

Die Stufen bringen dabei kaum neue Bauformen mit. Es sind die Formen aus den fünf Mustern, nur wandert die Steuerung vom Code ins Modell: Fan-Out ist Parallelisierung, bei der der Haupt-Agent zur Laufzeit entscheidet, wann er auffächert und wann er einsammelt. Ein Inline-Tool ist ein gewöhnlicher Tool-Aufruf, hinter dem ein ganzer Agent steckt. Wirklich neu sind erst zwei Dinge weiter oben auf der Treppe: Ab dem Pool bleiben Sub-Agents über den einzelnen Auftrag hinaus bestehen und tragen eigenen Zustand, und bei Teams reden sie direkt miteinander, ohne Zentrale. Genau deshalb steigen Kosten und Risiko die Treppe hinauf: Je mehr Steuerung im Modell liegt, desto weniger lässt sich vorhersagen und testen.

Schaubild: die vier Multi-Agent-Stufen als aufsteigende Treppe

Stufe 1 ist unspektakulär, und genau das ist ihr Wert. Der Sub-Agent ist aus Sicht des Haupt-Agenten ein Funktionsaufruf mit eigenem Kontext dahinter:

TypeScript
import { tool } from "ai";

const rechercheAgent = tool({
  description:
    "Recherchiert eine abgegrenzte Frage und liefert ein knappes, belegtes Ergebnis.",
  inputSchema: z.object({ frage: z.string() }),
  execute: async ({ frage }) => {
    // Innen ein vollständiger Agent mit eigenem Loop, eigenen Tools,
    // eigenem Kontext. Außen: Auftrag rein, Ergebnis raus.
    const ergebnis = await rechercheLoop(frage);
    return ergebnis.zusammenfassung; // Rohmaterial bleibt im Sub-Kontext
  },
});
  1. Starte bei Stufe 1. Das meiste, was sich nach Multi-Agent anfühlt, funktioniert als gut gepromptetes Inline-Tool. Die Stufen 2 bis 4 sind Eskalationen für benannte Grenzen, nicht der Ausgangspunkt.
  2. Multi-Agent ist nicht automatisch besser. Token-Kosten vervielfachen sich, Debugging wird härter, und Fehler propagieren zwischen Agenten: Eine schiefe Zwischenausgabe wird zur Arbeitsgrundlage des nächsten.
  3. Die Grenze verschiebt sich. Eine Aufgabe, die heute vier koordinierte Agenten braucht, löst mit der nächsten Modellgeneration oft ein einziger besserer Agent. Wer früh auf Stufe 4 baut, pflegt Koordinations-Code, den die Zeit entwertet.
💡
Abgrenzung: Dirigent oder Orchestrator aus Vom Vibe Coding zum Agentic Coding beschreibt deinen Arbeitsmodus: wie eng du selbst am Agenten arbeitest. Die vier Stufen hier beschreiben Systemarchitektur: wie Agenten einander koordinieren. Beide Fragen stellen sich unabhängig voneinander, und keine beantwortet die andere.
Übung: Die Idee auf Stufe 1 herunterbrechen

Aufgabe: Nimm eine Multi-Agent-Idee, die dir begegnet ist oder die du selbst hattest, etwa das klassische Trio Researcher, Writer, Reviewer.

  1. Baue sie gedanklich auf Stufe 1 um: ein Haupt-Agent, Recherche und Review als Inline-Tools.
  2. Notiere, was dabei wirklich verloren geht, und was nur an Inszenierung verloren geht.
  3. Gegenprobe: Welche konkrete, benannte Grenze müsste auftreten, damit Stufe 2 gerechtfertigt ist?

Zeitaufwand: ~10 Minuten

Takeaway
Regel #6: Multi-Agent ist die letzte Eskalationsstufe, keine Auszeichnung. Starte bei Stufe 1 und eskaliere nur, wenn eine benannte Grenze erreicht ist, nicht weil die Architektur beeindruckender aussieht.
Schritt 8 von 9

Das Prüfschema

Die Entscheidungsfragen in Reihenfolge, ein reales System als durchgerechnetes Kombinationsbeispiel und die Regeln der Lesson.

Step-Header: ein aufgeräumter Rangierbahnhof im Abendlicht, alle Signale zeigen frei

Einzeln ist jedes Muster einfach. Schwierig ist die Auswahl. Darum stellst du die Fragen in fester Reihenfolge, von der einfachsten Architektur zur komplexesten. Jedes Ja gibt dir genau ein Muster. Jedes Nein führt zur nächsten Frage. Was am Ende kein Ja bekommen hat, wird nicht gebaut.

#FrageBei Ja
1Reicht ein einzelner, gut gebauter Aufruf, notfalls mit Retrieval?Fertig. Kein Muster nötig
2Sind die Arbeitsschritte für jede Eingabe dieselben?Prompt Chaining, mit Gates zwischen den Stufen
3Gibt es verschiedene Sorten von Eingaben, die verschieden behandelt werden müssen?Routing davor, mit Unklar-Ausgang
4Können Teile der Arbeit unabhängig voneinander laufen, oder zählen mehrere Blickwinkel?Parallelisierung, mit Aggregator
5Zeigt erst die Eingabe, welche Teilaufgaben es gibt?Orchestrator-Workers, mit Budget-Grenze im Code
6Gibt es prüfbare Kriterien, und macht Nachbessern das Ergebnis messbar besser?Evaluator-Optimizer dazu, mit Runden-Budget
7Stößt ein einzelner Agent an eine Grenze, die du benennen kannst?Multi-Agent, eine Stufe nach der anderen

Ein reales System, drei Muster

Dass die Muster Bausteine sind und keine Konkurrenten, zeigt die Prüfpipeline aus Sicherheit in der Generierung. Dort steht ein Versicherungs-Assistent, dessen Architektur sich vollständig auf diese Lesson abbilden lässt:

Baustein der PipelineMuster dieser Lesson
Vorfilter, dann Guard, dann Generierung, dann Validierung: feste Stufen mit deterministischen Prüfungen dazwischenPrompt Chaining mit Gates
Der Guard bestimmt die Risikoklasse, und die Prüftiefe folgt der KlasseRouting
Der Validator weist zurück, ein Wiederholungslauf mit konkreter Beanstandung, danach Safe-FallbackEvaluator-Optimizer mit Budget 1

Bemerkenswert ist, was dieses System nicht ist: Es ist kein Agent. Der Pfad steht vollständig im Code, jede Stufe ist auditierbar, und trotzdem stecken drei Muster darin. Das ist der Normalfall produktiver Systeme, und er bestätigt die Grundregel aus Step 1: Die Muster kamen nacheinander dazu, jedes als Antwort auf ein benanntes Problem.

Die Regeln auf einen Blick

#Regel
0Starte mit der einfachsten Lösung, die funktioniert. Muster nur für benannte Probleme, Komplexität nur gegen messbare Verbesserung
1Chaining, wenn die Zerlegung vorher feststeht. Der Wert liegt in den Gates: Code prüft zwischen den Stufen
2Routing, wenn Eingaben in trennbare Kategorien zerfallen. Jeder Router braucht einen Unklar-Ausgang
3Parallelisierung für unabhängige Teilaufgaben oder mehrere Blickwinkel. Der Aggregator gehört zum Muster
4Orchestrator-Workers, wenn die Zerlegung erst zur Laufzeit feststeht. Budget-Grenzen setzt der Code
5Evaluator-Optimizer nur mit expliziten Kriterien und messbarem Iterationsgewinn, mit Budget und definiertem Ausgang
6Multi-Agent als letzte Eskalationsstufe: bei Stufe 1 starten, nur gegen benannte Grenzen eskalieren
💡
Wie diese Lesson zu den anderen steht: Vom Prompt zum Loop behandelt die Ebene darüber: den Loop und seine Engpässe. Agent Design Space vermisst den Entwurfsraum eines einzelnen Agenten. Vom Vibe Coding zum Agentic Coding beantwortet die Arbeitsmodus-Frage, nicht die Architektur-Frage. Und Sicherheit in der Generierung ist das Kombinationsbeispiel dieser Lesson im vollen Detail.
Übung: Dein System durchs Prüfschema

Aufgabe: Nimm ein KI-System, das du gebaut hast oder planst.

  1. Geh die sieben Fragen von oben nach unten durch und notiere jedes Ja.
  2. Schreibe für jedes Muster, das du einsetzen willst, das benannte Problem auf, das es löst. Ein Satz pro Muster.
  3. Streiche jedes Muster, für das du keinen Satz hast. Was übrig bleibt, ist deine Architektur.

Zeitaufwand: ~10 Minuten

Takeaway
Der Kern in einem Satz: Muster sind Antworten auf benannte Probleme, nicht Ausgangspunkte. Die richtige Architektur ist fast immer die einfachste, die funktioniert.
Schritt 9 von 9

Begriffe & Fragen

Die Begriffe und Fragen unten sind redaktionell gepflegt und verlinken zu ausführlichen Erklärungen im Glossar und FAQ. Nutze sie zum Nachschlagen und zur Vertiefung.

Begriffe aus dieser Lesson

  • Agentic Loop — Die Agentic Loop ist der Kernmechanismus eines KI-Agenten: Planen, Handeln, Beobachten, Anpassen. Der Agent iteriert in dieser Schleife, bis die Aufgabe erledigt ist oder ein Limit erreicht wird.
  • Multi-Agent-System — Ein Multi-Agent-System besteht aus mehreren spezialisierten KI-Agenten, die zusammenarbeiten. Jeder Agent hat eine eigene Rolle, eigene Tools und eigene Verantwortung. Sinnvoll nur bei echtem Parallelitätsbedarf.
  • Orchestrator — Ein Orchestrator koordiniert mehrere Agenten oder Arbeitsschritte in einem komplexen KI-Workflow. Er entscheidet, welcher Agent wann aktiv wird und wie die Ergebnisse zusammengeführt werden.
  • Prompt-Chaining — Prompt-Chaining zerlegt eine komplexe Aufgabe in mehrere aufeinander aufbauende Prompts. Der Output von Schritt 1 wird zum Input von Schritt 2. Das verbessert Qualität und Kontrolle bei anspruchsvollen Aufgaben.
  • Sub-Agent — Ein Sub-Agent ist ein untergeordneter KI-Agent, der einen Teilauftrag in seinem eigenen Kontext bearbeitet und nur das Ergebnis zurückgibt, damit Rohmaterial den Hauptdurchlauf nicht belastet.
Rico Loschke

Rico Loschke

KI-Stratege & Übersetzer zwischen Tech und Business

15+ Jahre Digitalisierung, 4+ Jahre KI. Ich übersetze zwischen Technologie und Unternehmensstrategie, berate und trainiere Organisationen auf ihrem KI-Weg. Hier teile ich, was ich dabei lerne.

loschke.ai.Visionen, Konzepte, Meinungen →
unlearn.how

Diese Lessons gibt es auch als Team-Training.

Workshops, Seminare und Begleitung für Unternehmen, die KI nicht nur verstehen, sondern anwenden wollen.

Mehr erfahren →