Strukturierte Ausgaben (Structured Outputs)
Ein LLM antwortet von Natur aus in Fließtext — auch wenn man es bittet, „bitte nur JSON” zurückzugeben. Structured Outputs drehen das um: Statt einer Bitte an das Modell wird ein JSON-Schema technisch erzwungen. Das Modell kann während der Generierung gar keine Tokens mehr ausgeben, die gegen das Schema verstoßen. Für jede Pipeline, die das Ergebnis maschinell weiterverarbeitet — in eine Datenbank schreibt, an ein anderes System übergibt, in einem Agenten-Loop parst — ist das der Unterschied zwischen „meistens valide” und „garantiert valide”.
Drei Stufen: Freitext, JSON-Mode, Structured Outputs
Die Verwirrung entsteht, weil drei unterschiedlich strenge Dinge oft in einen Topf geworfen werden:
- Freitext mit Bitte um JSON. Der Prompt sagt „Antworte als JSON-Objekt mit den Feldern x und y”. Das Modell hält sich meistens daran, aber „meistens” reicht nicht für einen Produktions-Parser. Ein Markdown-Codefence, ein erklärender Satz davor, ein fehlendes Komma — jede dieser Kleinigkeiten lässt
JSON.parse()scheitern. - JSON-Mode. Ein Flag wie
response_format: {"type": "json_object"}garantiert syntaktisch valides JSON — die Klammern stimmen, die Anführungszeichen stimmen. Was JSON-Mode nicht garantiert: dass die richtigen Felder existieren, dass die Typen stimmen, dass keine zusätzlichen Felder auftauchen. Valides JSON mit dem falschen Schema ist immer noch valides JSON. - Structured Outputs. Hier wird nicht nur JSON-Syntax erzwungen, sondern das komplette Schema: exakte Feldnamen, exakte Typen, keine zusätzlichen Properties, alle Pflichtfelder gefüllt. Das ist die Stufe, die Pipelines tatsächlich brauchen.
Wie es technisch funktioniert: Grammatik statt Bitte
Der Trick heißt grammatik-constrained decoding. Das JSON-Schema wird vor der Generierung in eine formale Grammatik übersetzt, die vorschreibt, welches Token an welcher Stelle überhaupt erlaubt ist. Steht das Modell an der Stelle, wo laut Schema ein Boolean folgen muss, sind nur die Tokens für true und false überhaupt zulässig — alles andere wird während der Generierung ausgeschlossen, nicht erst hinterher per Validierung verworfen.
Das erklärt auch die Latenz-Eigenheit aller drei Anbieter: Der erste Request mit einem neuen Schema braucht etwas länger, weil die Grammatik erst kompiliert werden muss. Danach wird die kompilierte Grammatik zwischengespeichert (bei Anthropic 24 Stunden) und folgende Requests mit demselben Schema sind wieder schnell.
Anthropic: JSON-Format und Strict Tool Use
Anthropic bietet Structured Outputs in zwei Varianten an, die sich kombinieren lassen:
- JSON-Output-Modus über den
output_format-Parameter (Python-SDK:client.messages.parse()mit einem Pydantic-Modell) — für reine Datenextraktion, ohne dass ein Tool involviert ist. - Strict Tool Use über
strict: trueauf der Tool-Definition — hier greift der Grammatik-Zwang direkt auf die Argumente, die das Modell beim Function Calling liefert. Das ist der Fall, der für Agenten am relevantesten ist: Ein Agent, der ein Tool falsch befüllt, bricht die ganze Kette ab.
from pydantic import BaseModel
from anthropic import Anthropic
class Ticket(BaseModel):
titel: str
prioritaet: str
zugewiesen_an: str
client = Anthropic()
response = client.messages.parse(
model="claude-sonnet-5",
max_tokens=512,
messages=[{"role": "user", "content": "Erstelle ein Ticket aus: ..."}],
output_format=Ticket,
)
print(response.parsed_output)
OpenAI: response_format mit json_schema und strict
Bei OpenAI läuft dasselbe über response_format: {"type": "json_schema", "json_schema": {...}, "strict": true}. Ohne strict: true bleibt man im schwächeren JSON-Mode — die Option muss aktiv gesetzt werden, sie ist nicht automatisch dabei, nur weil ein Schema mitgeschickt wird. Unterstützt wird das seit den gpt-4o-2024-08-06-Snapshots und durchgängig in der aktuellen GPT-5.x- und GPT-6-Astra-Modellfamilie.
Google Gemini: responseSchema und responseMimeType
Gemini erzwingt das Format über zwei Felder in der generationConfig: responseMimeType: "application/json" schaltet JSON überhaupt erst frei, responseSchema (ein Subset des OpenAPI-3.0-Schemas) definiert die exakte Struktur. Seit 2026 versteht die Gemini-API zusätzlich reguläres JSON-Schema-Format, wodurch Bibliotheken wie Pydantic oder Zod ihre Schemas direkt durchreichen können, ohne Übersetzung ins OpenAPI-Subset.
Faustregel
Freier Prompt für Chat-Antworten an Menschen. JSON-Mode, wenn nur die Syntax zählt und ein Mensch das Ergebnis noch mal überfliegt. Structured Outputs immer dann, wenn eine Maschine das Ergebnis ungeprüft weiterverarbeitet — Pipeline, Datenbank-Insert, Tool-Argument, nächster Agenten-Schritt.
Der Zuverlässigkeitsgewinn für Pipelines
Ohne Structured Outputs braucht jede Extraktions-Pipeline eine Fallback-Schleife: parsen, bei Fehler erneut anfragen, nach drei Fehlversuchen abbrechen und eskalieren. Das kostet Tokens, Latenz und Code für einen Sonderfall, der eigentlich nie hätte auftreten dürfen. Mit erzwungenem Schema entfällt diese Schleife komplett — das Ergebnis ist beim ersten Versuch entweder da oder der Request selbst schlägt fehl (z. B. wegen eines ungültigen Schemas), nie „technisch valides JSON mit falscher Form”. Das macht Structured Outputs zur Grundlage jeder LLM-API-Integration, die Daten statt Prosa produzieren soll — von der Klassifikations-Pipeline bis zum Tool-Aufruf im KI-Agenten.
Grenzen und Stolperfallen
Der Grammatik-Zwang hat bei allen drei Anbietern ähnliche Einschränkungen:
- Nur Form, keine Wahrheit. Ein erzwungenes Schema garantiert die Struktur, nicht den Inhalt. Ein Modell kann ein syntaktisch perfektes JSON-Objekt mit erfundenen Werten liefern — das Problem der Halluzination verschwindet dadurch nicht.
- Eingeschränktes Schema-Vokabular. Bei Anthropic und OpenAI im strict-Modus sind Feinheiten wie
minLength,maxLength,minimumodermaximumnicht erlaubt, rekursive Schemas ebenfalls nicht, undadditionalProperties: falseplus ein vollständigesrequired-Array sind Pflicht auf jedem Objekt. Wer ein bestehendes, freizügigeres Schema mitbringt, muss es zuerst auf diesen Standard zurechtstutzen. - Erster Aufruf ist langsamer. Die Grammatik-Kompilierung beim ersten Request mit einem neuen Schema kostet spürbar Zeit — bei häufig wechselnden Schemas (z. B. dynamisch generiert) verpufft der Caching-Vorteil.
- Kein Ersatz für Server-seitige Validierung. Ein garantiert schema-konformes Objekt kann trotzdem fachlich falsch sein (eine Prioritätsstufe, die es im Zielsystem nicht gibt). Business-Regeln bleiben Aufgabe der eigenen Anwendung.
FAQ
- Nein. JSON-Mode garantiert nur syntaktisch valides JSON, ohne Rücksicht auf Feldnamen oder Typen. Structured Outputs erzwingt zusätzlich das komplette Schema — falsche oder fehlende Felder sind während der Generierung gar nicht erst möglich.
- Normalerweise nicht. Der Nutzen entsteht, wenn eine Maschine die Antwort ungeprüft weiterverarbeitet — bei reinem Chat-Text ist ein freier Prompt einfacher und der Grammatik-Zwang unnötiger Overhead.
- Nein. Das Schema erzwingt nur die Form — welche Felder existieren und welchen Typ sie haben. Ob die Werte darin stimmen, ist eine andere Frage; Halluzination ist damit nicht ausgeschlossen.
- Das Schema wird vor der ersten Nutzung in eine Grammatik kompiliert, die den Token-Sampling-Prozess einschränkt. Diese Kompilierung kostet einmalig Zeit, wird danach aber für einen bestimmten Zeitraum zwischengespeichert.
- Ja, jedes Tool bekommt sein eigenes strict-Flag und sein eigenes Schema. Das Modell wählt weiterhin frei, welches Tool es aufruft — erzwungen wird nur, dass die Argumente des gewählten Tools exakt zum hinterlegten Schema passen.
Ist Structured Outputs dasselbe wie JSON-Mode?
Brauche ich Structured Outputs auch für Chat-Antworten an Menschen?
Garantiert das Schema auch inhaltlich richtige Antworten?
Warum ist der erste Request mit einem Schema langsamer?
Funktioniert Strict Tool Use auch bei mehreren Tools gleichzeitig?
Entdecke mehr
Function Calling / Tool Use
Wie ein LLM Werkzeuge aufruft: Tool-Definition als Schema, Modell wählt Funktion und Argumente, Ergebnis zurück ins Gespräch — der Grundbaustein jedes Agenten.
LexikonMit der LLM-API arbeiten — Streaming, Caching, Rate Limits
Praktische API-Mechanik jenseits des Pricings: Streaming für UX, Prompt Caching gegen Token-Kosten, Batch-API für Massenjobs, Rate Limits ohne 429-Drama.
LexikonKI-Agenten bauen — vom Tool Use zum Multi-Agent-System
Wie KI-Agenten funktionieren: vom einfachen Tool-Call über MCP, Strukturierte Outputs und LangGraph bis zur Frage, wann Multi-Agent-Setups sinnvoll sind.