Was ist AI Structured Output? Warum GPT, Gemini und Claude JSON erzwingen

Stand 8. September 2026: Was Structured Output ist, warum GPT, Gemini und Claude schema-beschränktes JSON liefern, und worin der Unterschied zu JSON Mode und Tool Calling liegt.

Vorab: Structured Output ist nicht der Prompt „bitte gib JSON zurück“. Es ist die API, die zur Decode-Zeit mit einem JSON Schema illegale Token blockiert, damit die finale Antwort von einem Programm geparst werden kann. GPT, Gemini und Claude haben es zur First-Class-Funktion gemacht — nicht weil der Begriff auf Folien gut aussieht, sondern weil Agenten, Extraktion und Formularfüllung das Modell in eine Pipeline verdrahten müssen. Prosa scheitert an JSON.parse. Am Downstream-Schema scheitert sie noch härter.

Dieser Artikel ist vom 8. September 2026. Alle drei können jetzt das finale JSON für den Nutzer oder den nächsten Dienst einschränken: OpenAI über response_format.json_schema (strict), Gemini über responseMimeType + responseJsonSchema, Claude über das GA-Feld output_config.format (das ältere Beta-Feld output_format funktioniert in der Übergangszeit weiter). Wie die Felder auszufüllen sind und worin sich die Teilmengen unterscheiden, haben wir im August bereits aufgeschlüsselt. Dieser Text beantwortet zwei Fragen: was es ist, und warum alle drei es liefern mussten. Für das How-to siehe Vom Prompt zu Structured Output. Für OpenAI vs. Gemini siehe den Structured-Output-API-Vergleich.

Was Structured Output ist

Structured Output heißt: Sie liefern ein JSON Schema, und die finale Antwort des Modells muss JSON sein, das dazu passt. Die Garantie gilt, während jedes Token erzeugt wird — nicht erst danach, wenn das Modell „versucht, wie JSON auszusehen“. Die Namen unterscheiden sich: OpenAI sagt Structured Outputs, Google sagt Structured Output, Anthropic schreibt structured outputs / JSON outputs. Das Extra-s ist Branding. Die Aufgabe ist dieselbe.

Denken Sie an Compiler und Type-Checker. Ein Prompt ist ein Kommentar — das Modell hört vielleicht. Ein Schema ist das Typsystem — ein falscher Feldname, ein fehlendes required, ein String dort, wo eine Zahl hingehört, werden nie emittiert. Was Ihr Programm bekommt, ist ein Objekt, nicht Prosa in einem ```json-Zaun.

BegriffTatsächliche BedeutungHäufige Fehldeutung
Structured OutputConstrained Decoding der finalen Antwort gegen ein JSON SchemaDas Modell wurde klüger, oder „es kann JSON schreiben“
JSON SchemaDer Vertrag für Felder, Typen, Pflichtfelder, EnumsEin längerer Prompt
Constrained DecodingIllegale Token werden gefiltert, während sie erzeugt werdenRegex-Aufräumen hinterher
strict / harte EinschränkungDie API garantiert die Form auf einer strengeren Schema-TeilmengeFakten stimmen und Zahlen sind nicht erfunden

Ein Schema, das alle drei lesen können, ist meist flach: Wurzel object, explizite properties / required, additionalProperties: false. Unter OpenAI strict ist „optional“ oft nullable, statt aus required zu fehlen. Die Teilmengen sind nicht identisch; nehmen Sie zuerst die Schnittmenge.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "task": { "type": "string", "enum": ["extract", "classify", "summarize"] },
    "ok": { "type": "boolean" },
    "fields": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "orderId": { "type": "string" },
        "total": { "type": "number" },
        "note": { "type": ["string", "null"] }
      },
      "required": ["orderId", "total", "note"]
    }
  },
  "required": ["task", "ok", "fields"]
}

Es ist nicht JSON Mode und nicht Tool Calling

Drei Namen werden oft zu einem zusammengezogen. Sie liegen nicht auf derselben Schicht:

FähigkeitWas sie garantiertWas sie nicht garantiert
Prompt: „return JSON“Eine höhere WahrscheinlichkeitSyntax, Feldnamen, Pflichtlisten
JSON ModeDer Text ist parsebares JSONForm, Typen, Enums
Structured OutputDie finale Antwort entspricht dem SchemaSemantische Wahrheit, oder dass ein Tool gelaufen ist
Tool CallingTool-Argumente passen zum Schema, und der Host führt sie ausDie Form der nutzerseitigen Antwort

JSON Mode garantiert nur passende Klammern und ein erfolgreiches JSON.parse. Das Modell kann trotzdem order_id erfinden, wenn Sie orderId verlangt haben, oder den Betrag als String ausgeben. In Produktion ist „es parst“ nicht „es lässt sich einfügen“.

Tool Calling / Function Calling beschränkt die Hand, die nach einem Tool greift — nicht den letzten Satz an den Nutzer. Bestandsabfragen, Dateischreiben, MCP tools/call gehören auf das Tool-Schema. E-Mails extrahieren, ein Ticket klassifizieren, JSON für eine Downstream-API ausgeben gehören auf Structured Output. Ein voller Agent schaltet oft beides ein — Argumente auf Tools, die finale Antwort auf ein Output-Schema. Zur Schichtung siehe Was MCP ist und den Agent-JSON-Datenfluss.

Warum alle drei es unterstützen

2023 konnten Sie noch auf einen Prompt wetten. 2026 bettet ein Agent das Modell in eine Schleife: die Ausgabe trifft eine Datenbank, das nächste Tool oder das Modell eines anderen Anbieters. Die drei Labs haben keinen Pressezyklus abgesprochen. Sie sind auf denselben Produktdruck und denselben Vertrag gestoßen — JSON Schema.

  1. Der Downstream-Konsument ist ein Programm, kein Leser. Chat darf Prosa sein. Eine Pipeline braucht Objekte. Ein fehlendes Komma, ein umbenanntes Feld — und die nächtliche Retry-Warteschlange läuft voll. Anbieter schneiden lieber illegale Pfade im Decoder ab, als zuzusehen, wie jeder Kunde einen Reparierer schreibt.
  2. Agenten haben stabile Form zur Pflicht gemacht. In einer mehrstufigen Schleife ist das JSON der letzten Runde der Input dieser Runde. Einmal driftet die Form — und alles danach ist falsch. Tool Calling beantwortet „wie man hinausgreift“. Structured Output beantwortet „wie man die Schlussfolgerung zurückgibt“. Beide brauchen ein Schema — siehe ob JSON Schema der Agent-Contract wird.
  3. Prompts haben bewiesen, dass sie nicht reichen. „Nur JSON, kein Markdown“ sieht auf der Bench gut aus, lässt dann Felder weg, setzt Zäune hinzu und umschreibt Enums, sobald der Kontext lang ist, Tools zurückfließen oder Sprachen sich mischen. Constrained Decoding macht aus „manchmal“ einen API-400 oder einen wiederholbaren Schema-Fehler.
  4. JSON Schema war bereits der kleinste gemeinsame Nenner. OpenAPI, MCP inputSchema, Pydantic- / Zod-Exporte — alles dasselbe. Eine private IDL auf der Modellseite zwänge den Host, zweimal zu übersetzen. Die finale Antwort an dasselbe Schema zu hängen macht den Anbieterwechsel billig.
  5. Das Rennen heißt „kommt das in Produktion“, nicht „kann es chatten“. Sobald ein Anbieter eine harte Einschränkung auslieferte, schrieben Gateways, Agent-Frameworks und Beschaffungslisten sie als Pflicht fest. Die anderen beiden folgen — oder sie stecken nicht in denselben Graphen. Im September 2026 ist eine Flaggschiff-API ohne Structured Output schwer an Kunden zu verkaufen, die Zeilen einfügen.

Deshalb liegen die Daten so dicht beieinander: OpenAI hat Structured Outputs im August 2024 GA gemacht; Gemini hat MIME + Schema in die Generierungskonfiguration gezogen; Claude hing Ende 2025 noch an einem Beta-Header und liefert jetzt output_config.format als stabiles Feld. Die Namen haben nie gepasst. Der Druck schon.

Wie GPT, Gemini und Claude es einschalten

Richten Sie das Konzept aus. Felder nicht über Anbieter hinweg kopieren. Die Tabelle ist das, was Sie am 8. September 2026 in ein Dokument schreiben können — kein vollständiges SDK-Tutorial.

AnbieterEinstiegWo das Schema hängtWorauf 2026 zu achten ist
OpenAI (GPT-5.5 und Verwandte)response_format bei Chat Completions; text.format bei der Responses APItype: json_schema + strict: trueUnter strict will jedes Objekt additionalProperties: false, und Properties sitzen meist alle in required; optional wird nullable
Google (Gemini 3.7 Flash und Verwandte)MIME + Schema in der GenerierungskonfigurationresponseMimeType: application/json + responseJsonSchema (SDK oft response_schema)Kein Schalter namens strict; älteres responseSchema nutzte OpenAPI-Großschreibung; der neuere Kanal nutzt kleingeschriebenes JSON Schema
Anthropic (Claude 4.6 / 4.8 und Verwandte)output_config.format bei der Messages APItype: json_schema + schemaGA — kein Header structured-outputs-2025-11-13 nötig; altes output_format funktioniert in der Übergangszeit weiter. Tool-seitiges strict: true ist Tool Calling, nicht die finale Antwort

Die Hüllen unterscheiden sich. Der Schema-Körper sollte dieselbe Datei sein. Beim Modellwechsel ändert sich der Umschlag, nicht orderId und required. Eine Claude-Skizze (Spezifikationsfelder; tauschen Sie Ihr Business-Schema ein):

{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "messages": [
    {"role": "user", "content": "Extract orderId and total from the order text"}
  ],
  "output_config": {
    "format": {
      "type": "json_schema",
      "schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "orderId": { "type": "string" },
          "total": { "type": "number" }
        },
        "required": ["orderId", "total"]
      }
    }
  }
}

OpenAI legt dasselbe schema in response_format.json_schema und schaltet strict ein. Gemini legt es in responseJsonSchema und deklariert den JSON-MIME-Typ. Der vollständige Python-Vergleich steht weiter in OpenAI vs Gemini. Produktoberflächen (ChatGPT / claude.ai / die Gemini-Web-App) legen nicht immer dieselbe harte Einschränkung offen. Schreiben Sie das SLA gegen die API, die Sie tatsächlich aufrufen.

Was Constrained Decoding tatsächlich blockiert

Ohne Structured Output sampelt das Modell das volle Vokabular und hofft, dass der Prompt es wie JSON aussehen lässt. Mit Structured Output hält der Decoder aus dem Schema ein legales Präfix: das nächste Token darf nur noch etwas Gültiges sein — ein ", orderId, true oder }. Illegale Pfade bekommen Wahrscheinlichkeit null.

Es blockiert die Form: nachgestellte Kommas, Markdown-Zäune, fehlende Pflichtfelder, Typdrift, Extra-Keys wenn additionalProperties false ist. Es blockiert nicht das Erfinden: total ist eine Zahl, und die Zahl kann erfunden sein; ein legaler enum-Wert kann trotzdem der falsche sein. Produktion jagt dasselbe Schema weiter durch einen Validator; bei Fehler wiederholen, degradieren oder an einen Menschen. Constrained Decoding senkt Parse-Unfälle, nicht Halluzinationen.

Ein größeres Fenster ändert das nicht. 1M Token verbreitern nur, was sichtbar ist; sie beschränken nicht die Ausgabeform. Wenn Sie einen Dump stopfen, brauchen Sie trotzdem ein Schema — siehe 1M-Token-Kontextfenster.

Was Sie jetzt tun sollten

  1. Schreiben Sie das Schema, bevor Sie ein Modell wählen. Feldnamen, Pflichtlisten und Enums sind der Produktvertrag. GPT / Gemini / Claude sind austauschbare Backends. Halten Sie den Vertrag im Repo, nicht im Prompt.
  2. Extraktion, Klassifikation, Formularfüllung → Structured Output. Seiteneffekte → Tool Calling. Tun Sie nicht so, als hätte Structured Output schon die Bestands-API getroffen. Prozessübergreifende Wiederverwendung ist der Moment für MCP.
  3. Nehmen Sie die Schema-Schnittmenge über Anbieter hinweg: flache Objekte, additionalProperties: false, flache $ref, kein Wurzel-anyOf. OpenAI strict macht aus „optional“ nullable. Pflegen Sie nicht drei driftende Feldtabellen.
  4. Dass die API durchgeht, ist nicht die letzte Prüfung. Legen Sie das Schema und zwei oder drei gute / schlechte Fixtures als JSON ab; validieren und Diffen Sie auf dieser Seite. Nichts wird hochgeladen. Das ist das zweite Tor nach Constrained Decoding.
  5. Führen Sie Fehler als Struktur zurück: scheitert Parse oder der zweite Validator, geben Sie ein Objekt zurück (welches Feld, erwarteter Typ). Gießen Sie keinen rohen Stack in die nächste Runde.

FAQ

Ist Structured Output nur „das Modell soll JSON zurückgeben“?

Nein. Ein Prompt oder JSON Mode kann JSON-Text ausgeben. Structured Output filtert Token zur Decode-Zeit gegen ein JSON Schema. Feldnamen, Typen und Pflichtlisten erzwingt die API — nicht das Wohlverhalten des Modells.

Warum haben GPT, Gemini und Claude das alle ausgeliefert — reicht nicht ein Anbieter?

Kunden wollen Multi-Modell-Failover und Preisvergleich. Gateways und Agent-Frameworks verdrahten bereits „Schema rein, JSON raus“. Ein Anbieter ohne harte Einschränkung steckt nicht in diese Pipeline. Wettbewerbsdruck und Engineering-Bedarf sind dieselbe Tatsache.

Braucht Claude noch ein Schein-Tool, um Structured Output vorzutäuschen?

Nicht als Hauptweg. 2026 liefert die Messages API JSON-Schema-Ausgabe über output_config.format. Tool-level strict deckt weiter nur Tool-Argumente ab. Der alte Beta-Header und output_format bleiben in einem Übergangsfenster; neuer Code sollte output_config nutzen.

Wenn Structured Output an ist, muss ich trotzdem validieren?

Ja. Es garantiert Form und Typen, nicht wahre Werte oder Geschäftsregeln. Führen Sie dasselbe Schema in der App noch einmal aus; bei Fehler wiederholen oder eskalieren. Im Browser prüfen Sie Fixtures zuerst mit der JSON-Toolbox.

Wie wähle ich zwischen Structured Output, MCP und Tool Calling?

Finale Antwort für ein Programm: Structured Output. Externe Aktion: Tool Calling. Tools in einem anderen Prozess, wiederverwendet über Hosts: MCP. Sie können die drei stapeln. Lassen Sie keine Schicht eine andere imitieren.

Kann ein JSON Schema unverändert an alle drei?

Der Körper kann geteilt werden; der Request-Wrapper nicht. Ein flaches Objekt, keine Extra-Properties, Optionals als Nullables — das gewinnt am häufigsten. Die strict-Teilmenge von OpenAI ist die engste — bestehen Sie die zuerst, dann dieselbe Datei an Gemini / Claude, statt drei driftender Schemas.

Fazit

Structured Output ist die Flaggschiff-API-Buchse 2026: die finale Antwort wird gegen ein JSON Schema decodiert, damit Programme nicht mehr auf Klammern in einem Prompt wetten. GPT, Gemini und Claude haben es alle ausgeliefert, weil Agenten und Extraktion „stabile Form“ in die Abnahmetests geschrieben haben und JSON Schema der Vertrag war, den alle drei schon sprachen. Es ist nicht JSON Mode. Es ersetzt weder Tool Calling noch MCP.

Tauschen Sie das Modell, tauschen Sie nur die Hüllenfelder. Halten Sie Feldnamen und required im Repo und validieren Sie Samples lokal gegen dasselbe Schema, bevor Sie live gehen. Wie jede API zu konfigurieren ist und wie sich das von der Tool-Schicht trennt, hat diese Seite bereits behandelt. Dieser Artikel macht nur „was“ und „warum“ unmissverständlich.