Seit meinem Einstieg in die Softwareentwicklung in den 80er-Jahren habe ich mich kontinuierlich in der jeweils aktuellen Technologie bewegt: von Assembler über C++ und Lisp/Common Lisp in den 1980er-Jahren, gefolgt von Java und Python in den 1990er-Jahren, später C# und .NET. Seit 2024 widme ich mich verstärkt wieder der Softwareentwicklung, nun im Kontext von KI-gestützten Systemen.
Als Anthropic-Certified Claude Developer setze ich moderne KI-Entwicklungsmethoden produktiv ein: Aufgaben, die früher Wochen an Entwicklungszeit beansprucht hätten, lassen sich heute in Stunden umsetzen. Aktuelles Beispiel ist Kontor, eine von mir entwickelte Handelsoberfläche mit Claude-API-Anbindung und einem eigenständigen Trader-Agent für KI-gestützte Marktanalyse, inklusive eines öffentlichen Wirtschaftskalenders mit allen Terminen.
Engineering is a Passion
Als System-Engineer (MCITP, CCP-V und AI Fluency & Claude Expert) betreue ich Netzwerkinfrastrukturen, führe Planungen durch, schule Mitarbeiter und führe Migrationen von Netzwerk, Server- als auch Client Infrastrukturen bis zum mittleren Enterprise Umfeld durch. Mein Aufgabengebiet umfasste der IT Support von mittelständischen Unternehmen als auch die Umsetzung von Projekten in Server und Clientnetzwerken unter den Betriebssystemen Microsoft, Mac OS und Linux resp. den Hypervisoren VMware, Hyper V und Citrix.
Mein Knowhow und Wissen sammelte ich in Projekten im Bereich öffentlicher und privater Auftraggeber.
Schulungen
CCAR-F Kapitel 4: Prompts und strukturierte Ausgabe
WKI-1288-ch-de
Schulungen
Explizite Kriterien statt vager Wünsche, Beispiele im Prompt, JSON-Schemas mit Werkzeugen, Prüf- und Wiederholschleifen, Batch-Verarbeitung und mehrstufige Reviews.
Dieses Kapitel deckt den Prüfungsbereich „Prompt Engineering & Structured Output“ ab (20 % der CCAR-F). Es zeigt, wie du Claude dazu bringst, präzise, gleichbleibend und maschinenlesbar zu antworten.
Ziel
Nach dem Kapitel kannst du
Prompts mit klaren Kriterien formulieren, die Fehlalarme senken,
Beispiele (Few-shot) gezielt einsetzen,
strukturierte Ausgaben über Schemas erzwingen und deren Grenzen benennen,
Prüf- und Wiederholschleifen für Extraktion entwerfen,
entscheiden, wann sich die Batch-Verarbeitung lohnt,
einen mehrstufigen Review aufbauen.
Das Wichtigste in Kürze
Klar und direkt wirkt. Sage, was du willst, für wen, in welchem Format und woran du einen guten Treffer erkennst. „Sei gründlich“ ist keine Anweisung; „melde nur Fehler, die zu falschen Ergebnissen führen, und überspringe Stilfragen“ schon.
Kriterien senken Fehlalarme. Bei Prüfaufgaben zählt die Abgrenzung: Was gehört in den Befund, was ausdrücklich nicht? Nenne Beispiele für beides.
Beispiele stabilisieren. Zwei bis fünf gut gewählte Beispiele (Few-shot) zeigen Format und Grenzfälle besser als Beschreibungen. Wähle Beispiele mit unterschiedlicher Struktur (etwa Fliesstext und Tabelle), damit Claude nicht nur eine Form lernt.
Schemas erzwingen die Form. Mit strukturierten Ausgaben (output_config.format) oder mit strikten Werkzeugen (strict: true) erhältst du gültiges JSON mit den richtigen Typen und allen Pflichtfeldern. Das Schema garantiert die Syntax, nicht die Wahrheit: Falsche Inhalte in gültiger Form bleiben möglich.
Das Schema muss ehrlich sein. Fehlt eine Angabe im Dokument, soll sie leer bleiben dürfen. Erlaube deshalb null für optionale Felder und eine Auswahl „sonstiges“ mit Freitext bei Aufzählungen. Pflichtfelder für Angaben, die es nicht gibt, verleiten zum Erfinden.
Die Unterstützung von JSON Schema hat Grenzen. Bestimmte Einschränkungen wie Mindest- und Höchstwerte oder Längenangaben werden nicht erzwungen; sie wandern in die Beschreibung. Sehr komplexe Schemas lehnt der Dienst ab. Halte Schemas schlank und prüfe fachliche Bedingungen im eigenen Code.
Prüfen und mit Rückmeldung wiederholen. Schlägt die Prüfung fehl, sende eine Folgeanfrage mit dem Dokument, der fehlerhaften Extraktion und der konkreten Fehlermeldung. Das hilft bei Formatfehlern. Wo die Information im Dokument schlicht fehlt, hilft kein neuer Versuch; markiere solche Fälle, statt sie endlos zu wiederholen.
Batch für alles, was Zeit hat. Die Message Batches API verarbeitet viele Anfragen asynchron und kostet 50 % weniger. Die meisten Batches sind laut Dokumentation innerhalb einer Stunde fertig; sie verfallen aber, wenn die Verarbeitung nach 24 Stunden nicht abgeschlossen ist. Ergebnisse bleiben 29 Tage abrufbar. Nicht geeignet ist sie für Antworten, auf die jemand wartet.
Mit custom_id zuordnen. Jede Anfrage im Batch trägt eine eigene Kennung (1 bis 64 Zeichen aus Buchstaben, Ziffern, Bindestrich, Unterstrich). Über sie ordnest du Ergebnisse zu und wiederholst gezielt nur die gescheiterten Anfragen, gegebenenfalls in veränderter Form (zum Beispiel ein zu grosses Dokument in Teilen).
Mehrere Durchgänge statt eines grossen. Prüfe grosse Änderungen erst Datei für Datei und danach einmal übergreifend. Das verhindert, dass die Aufmerksamkeit über zu viel Material verdünnt wird. Eine zweite, unabhängige Instanz als Prüfer verhindert, dass sich der Autor selbst bestätigt.
Ketten für Vorhersehbares. Zerlege Aufgaben mit festen Schritten in verkettete Prompts; der Ausgang des einen speist den nächsten.
Kernaussagen im Detail
Aus vagen Wünschen werden Kriterien
Schwach: „Prüfe den Code auf Probleme.“ Stärker: „Melde Fehler, die zu falschen Ergebnissen oder Abstürzen führen. Nenne Datei, Zeile und Auswirkung. Melde keine Stil- oder Benennungsfragen. Gib bei Unsicherheit eine Einschätzung der Sicherheit an.“ Die zweite Fassung ist prüfbar, und Abweichungen lassen sich erkennen.
Werkzeug oder Ausgabeformat?
Für Extraktion hast du zwei Wege: ein Werkzeug mit Schema, dessen Eingabe das Ergebnis ist (tool_use), oder die strukturierte Ausgabe über output_config.format. Beide erzwingen die Form. Bei neuen Modellen funktioniert das Erzwingen eines bestimmten Werkzeugs per tool_choice nicht mehr in jedem Fall (siehe Kapitel 2); die strukturierte Ausgabe ist dann der geradlinige Weg.
Wiederholen mit Verstand
Unterscheide drei Fehlerklassen: Format (per Wiederholung behebbar), Inhalt (per besserem Prompt oder Beispiel behebbar) und fehlende Information (nicht behebbar, also zur Prüfung durch Menschen). Mit dieser Einteilung vermeidest du endlose Schleifen.
Wann Batch, wann direkt?
Eine nächtliche Auswertung von tausend Dokumenten, eine Evaluierung oder eine Massenklassifikation profitieren vom Preisnachlass. Ein Dialog oder ein Zwischenschritt in einer Kette, auf den ein Mensch wartet, gehört in die direkte Schnittstelle. Plane bei Fristen die Obergrenze von 24 Stunden ein, nicht die typische Stunde.
Verständnisfragen
Ein Extraktionsschema verlangt das Feld „Rechnungsnummer“ als Pflichtfeld. Bei einem Dokument ohne Nummer erfindet Claude eine. Wie änderst du das Schema, und warum?
Ein Nachtlauf soll 5000 Verträge klassifizieren, das Ergebnis wird morgens gebraucht. Schnittstelle direkt oder Batch? Was musst du bei einzelnen Fehlschlägen tun?
Deine Review-Aufgabe meldet bei jedem Durchlauf Stilkleinigkeiten und übersieht gelegentlich Fehler in Zusammenspiel mehrerer Dateien. Welche zwei Änderungen am Aufbau helfen?
Kurzantworten
Das Feld optional und nullbar machen. Wer immer einen Wert liefern muss, liefert im Zweifel einen erfundenen. Der Code prüft danach, ob das Feld fehlt, und leitet solche Fälle an einen Menschen.
Batch, denn niemand wartet und der Preisnachlass lohnt. Fehlgeschlagene Anfragen erkennst du an der custom_id und reichst sie gezielt erneut ein, falls nötig angepasst (zum Beispiel in Teilen).
Die Kriterien schärfen (Stilfragen ausdrücklich ausschliessen) und in zwei Durchgänge aufteilen: je Datei lokal, danach ein eigener Durchgang für das Zusammenspiel.