Strukturierte Ausgaben (structured outputs) beschränken Claudes Antworten darauf, einem bestimmten Schema zu folgen, und stellen so gültige, parsbare Ausgaben für die nachgelagerte Verarbeitung sicher. Strukturierte Ausgaben bieten zwei sich ergänzende Funktionen:
output_config.format): Erhalte Claudes Antwort in einem bestimmten JSON-Formatstrict: true): Garantiere Schema-Validierung für Tool-Namen und -EingabenDu kannst diese Funktionen unabhängig voneinander oder zusammen in derselben Anfrage verwenden.
Strukturierte Ausgaben sind in der Claude API allgemein verfügbar für Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 und Claude Haiku 4.5. Auf Amazon Bedrock sind strukturierte Ausgaben allgemein verfügbar für Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 und Claude Haiku 4.5; Claude Sonnet 5, Claude Opus 4.7 und Claude Mythos Preview sind über Claude in Amazon Bedrock (den Messages-API-Bedrock-Endpunkt) verfügbar. Strukturierte Ausgaben sind auf der Claude Platform on AWS verfügbar. Auf Google Cloud sind strukturierte Ausgaben allgemein verfügbar für Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 und Claude Haiku 4.5. Strukturierte Ausgaben sind auf Microsoft Foundry allgemein verfügbar und erfordern ein Hosted-on-Anthropic-Deployment.
Diese Funktion qualifiziert sich für Zero Data Retention (ZDR) mit begrenzter technischer Speicherung. Siehe den Abschnitt Datenspeicherung für Details darüber, was gespeichert wird und warum.
Migrierst du von der Beta? Der Parameter output_format ist zu output_config.format umgezogen, und Beta-Header sind nicht mehr erforderlich. Der alte Beta-Header (structured-outputs-2025-11-13) und der Parameter output_format funktionieren für eine Übergangszeit weiterhin. Siehe die folgenden Codebeispiele für die aktualisierte API-Form.
Ohne strukturierte Ausgaben kann Claude fehlerhafte JSON-Antworten oder ungültige Tool-Eingaben generieren, die deine Anwendungen zum Absturz bringen. Selbst mit sorgfältigem Prompting können folgende Probleme auftreten:
Strukturierte Ausgaben garantieren schemakonforme Antworten durch „constrained decoding" (eingeschränktes Dekodieren):
JSON.parse()-Fehler mehrJSON-Ausgaben steuern Claudes Antwortformat und stellen sicher, dass Claude gültiges JSON zurückgibt, das deinem Schema entspricht. Verwende JSON-Ausgaben, wenn du Folgendes benötigst:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm.",
}
],
output_config={
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"email": {"type": "string"},
"plan_interest": {"type": "string"},
"demo_requested": {"type": "boolean"},
},
"required": ["name", "email", "plan_interest", "demo_requested"],
"additionalProperties": False,
},
}
},
)
print(response.content[0].text)Antwortformat: Gültiges JSON, das deinem Schema entspricht, in response.content[0].text
{
"name": "John Smith",
"email": "[email protected]",
"plan_interest": "Enterprise",
"demo_requested": true
}Definiere dein JSON-Schema
Erstelle ein JSON-Schema, das die Struktur beschreibt, der Claude folgen soll. Das Schema verwendet das Standard-JSON-Schema-Format mit einigen Einschränkungen (siehe JSON-Schema-Einschränkungen).
Füge den Parameter output_config.format hinzu
Füge den Parameter output_config.format mit type: "json_schema" und deiner Schema-Definition in deine API-Anfrage ein.
Parse die Antwort
Claudes Antwort ist gültiges JSON, das deinem Schema entspricht, und wird in response.content[0].text zurückgegeben.
Die SDKs bieten Helfer, die die Arbeit mit JSON-Ausgaben erleichtern, einschließlich Schema-Transformation, automatischer Validierung und Integration mit beliebten Schema-Bibliotheken.
Die client.messages.parse()-Methode des Python-SDK akzeptiert weiterhin output_format als Komfort-Parameter und übersetzt ihn intern in output_config.format. Andere SDKs erfordern output_config direkt. Die folgenden Beispiele zeigen die SDK-Helfer-Syntax.
Anstatt rohe JSON-Schemas zu schreiben, kannst du vertraute Schema-Definitionswerkzeuge in deiner Sprache verwenden:
client.messages.parse()zodOutputFormat() oder typisierte JSON-Schema-Literale mit jsonSchemaOutputFormat()outputConfig(Class<T>)Anthropic::BaseModel-Klassen mit output_config: {format: Model}StructuredOutputModel implementieren, mit outputConfig: ['format' => MyClass::class]Create<T>()-Überladung, die das Schema automatisch ableitetoutput_configoutput_config übergeben werdenfrom pydantic import BaseModel
from anthropic import Anthropic
class ContactInfo(BaseModel):
name: str
email: str
plan_interest: str
demo_requested: bool
client = Anthropic()
response = client.messages.parse(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm.",
}
],
output_format=ContactInfo,
)
print(response.parsed_output)Jedes SDK bietet Helfer, die die Arbeit mit strukturierten Ausgaben erleichtern. Siehe die einzelnen SDK-Seiten für vollständige Details.
Die Python-, TypeScript-, Ruby- und PHP-SDKs transformieren Schemas mit nicht unterstützten Funktionen automatisch. Die C#- und Go-SDKs wenden dieselben Transformationen an, wenn das Schema aus einem nativen Typ abgeleitet wird (Create<T>() in C#; Struct-Reflexion oder BetaJSONSchemaOutputFormat() auf der Go-Beta-API). Die Transformationsschritte:
minimum, maximum, minLength, maxLength)additionalProperties: false zu allen ObjektenDas bedeutet, Claude erhält ein vereinfachtes Schema, aber dein Code erzwingt weiterhin alle Constraints durch Validierung.
Beispiel: Ein Pydantic-Feld mit minimum: 100 wird im gesendeten Schema zu einem einfachen Integer, aber das SDK aktualisiert die Beschreibung auf „Must be at least 100" und validiert die Antwort gegen den ursprünglichen Constraint.
Zur Erzwingung der JSON-Schema-Konformität bei Tool-Eingaben mit grammatikbeschränktem Sampling siehe Strikte Tool-Nutzung.
JSON-Ausgaben und strikte Tool-Nutzung lösen unterschiedliche Probleme und funktionieren zusammen:
In Kombination kann Claude Tools mit garantiert gültigen Parametern aufrufen UND strukturierte JSON-Antworten zurückgeben. Das ist nützlich für agentische Workflows, bei denen du sowohl zuverlässige Tool-Aufrufe als auch strukturierte finale Ausgaben benötigst.
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Help me plan a trip to Paris departing May 15, 2026",
}
],
# JSON-Ausgaben: strukturiertes Antwortformat
output_config={
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"summary": {"type": "string"},
"next_steps": {"type": "array", "items": {"type": "string"}},
},
"required": ["summary", "next_steps"],
"additionalProperties": False,
},
}
},
# Strikte Tool-Nutzung: garantierte Tool-Parameter
tools=[
{
"name": "search_flights",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"destination": {"type": "string"},
"date": {"type": "string", "format": "date"},
},
"required": ["destination", "date"],
"additionalProperties": False,
},
}
],
)
print(response)Strukturierte Ausgaben verwenden eingeschränktes Sampling mit kompilierten Grammatik-Artefakten. Dies bringt einige Leistungsmerkmale mit sich, die du beachten solltest:
name oder description invalidiert den Cache nichtBei der Verwendung strukturierter Ausgaben erhält Claude automatisch einen zusätzlichen System-Prompt, der das erwartete Ausgabeformat erklärt. Das bedeutet:
output_config.format invalidiert jeden Prompt-Cache für diesen Konversations-ThreadStrukturierte Ausgaben unterstützen Standard-JSON-Schema mit einigen Einschränkungen. Sowohl JSON-Ausgaben als auch strikte Tool-Nutzung teilen diese Einschränkungen.
Die Python-, TypeScript-, Ruby- und PHP-SDKs können Schemas mit nicht unterstützten Funktionen automatisch transformieren, indem sie diese entfernen und Constraints zu Feldbeschreibungen hinzufügen. Die C#- und Go-SDKs tun dasselbe, wenn das Schema aus einem nativen Typ abgeleitet wird. Siehe SDK-spezifische Methoden für Details.
Bei der Verwendung strukturierter Ausgaben behalten Eigenschaften in Objekten ihre im Schema definierte Reihenfolge bei, mit einer wichtigen Einschränkung: Pflichteigenschaften erscheinen zuerst, gefolgt von optionalen Eigenschaften.
Zum Beispiel bei diesem Schema:
{
"type": "object",
"properties": {
"notes": { "type": "string" },
"name": { "type": "string" },
"email": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "email"],
"additionalProperties": false
}Die Ausgabe ordnet die Eigenschaften wie folgt:
name (erforderlich, in Schema-Reihenfolge)email (erforderlich, in Schema-Reihenfolge)notes (optional, in Schema-Reihenfolge)age (optional, in Schema-Reihenfolge)Das bedeutet, die Ausgabe könnte so aussehen:
{
"name": "John Smith",
"email": "[email protected]",
"notes": "Interested in enterprise plan",
"age": 35
}Wenn die Eigenschaftsreihenfolge in der Ausgabe für deine Anwendung wichtig ist, markiere alle Eigenschaften als erforderlich oder berücksichtige diese Neuordnung in deiner Parsing-Logik.
Obwohl strukturierte Ausgaben in den meisten Fällen Schema-Konformität garantieren, gibt es Szenarien, in denen die Ausgabe möglicherweise nicht deinem Schema entspricht:
Ablehnungen (stop_reason: "refusal")
Claude behält seine Sicherheits- und Hilfsbereitschaftseigenschaften auch bei der Verwendung strukturierter Ausgaben bei. Wenn Claude eine Anfrage aus Sicherheitsgründen ablehnt:
stop_reason: "refusal"Token-Limit erreicht (stop_reason: "max_tokens")
Wenn die Antwort abgeschnitten wird, weil das max_tokens-Limit erreicht wurde:
stop_reason: "max_tokens"max_tokens-Wert, um die vollständige strukturierte Ausgabe zu erhaltenGroß-/Kleinschreibung von Enum-Werten
Strukturierte Ausgaben garantieren nicht die Groß-/Kleinschreibung von String-enum- und const-Werten: Claude kann einen Wert zurückgeben, der sich von deinem Schema nur in der Groß-/Kleinschreibung unterscheidet, typischerweise im ersten Buchstaben eines Wortes nach einem Leerzeichen. Zum Beispiel bei diesem Schema:
{
"type": "string",
"enum": ["Conversation Topic 1", "Conversation Topic 2", "Conversation topic 3"]
}Die Ausgabe kann "Conversation Topic 3" (großes „T") enthalten, obwohl dieser exakte Wert nicht im Enum enthalten ist. Die Antwort wird normal abgeschlossen, ohne Fehler und ohne speziellen stop_reason. Dies gilt sowohl für JSON-Ausgaben als auch für strikte Tool-Nutzung. Vergleiche Enum-Werte ohne Berücksichtigung der Groß-/Kleinschreibung und vermeide Enum-Werte, die sich nur in der Groß-/Kleinschreibung unterscheiden.
Strukturierte Ausgaben funktionieren, indem deine JSON-Schemas in eine Grammatik kompiliert werden, die Claudes Ausgabe einschränkt. Komplexere Schemas erzeugen größere Grammatiken, deren Kompilierung länger dauert. Zum Schutz vor übermäßigen Kompilierungszeiten erzwingt die API mehrere Komplexitätslimits.
Die folgenden Limits gelten für alle Anfragen mit output_config.format oder strict: true:
| Limit | Wert | Beschreibung |
|---|---|---|
| Strikte Tools pro Anfrage | 20 | Maximale Anzahl von Tools mit strict: true. Nicht-strikte Tools zählen nicht zu diesem Limit. |
| Optionale Parameter | 24 | Gesamtzahl optionaler Parameter über alle strikten Tool-Schemas und JSON-Ausgabe-Schemas hinweg. Jeder Parameter, der nicht in required aufgeführt ist, zählt zu diesem Limit. |
| Parameter mit Union-Typen | 16 | Gesamtzahl der Parameter, die anyOf oder Typ-Arrays verwenden (zum Beispiel "type": ["string", "null"]), über alle strikten Schemas hinweg. Diese sind besonders teuer, da sie exponentielle Kompilierungskosten verursachen. |
Diese Limits gelten für die kombinierte Gesamtzahl über alle strikten Schemas in einer einzelnen Anfrage. Wenn du zum Beispiel 4 strikte Tools mit jeweils 6 optionalen Parametern hast, erreichst du das 24-Parameter-Limit, obwohl kein einzelnes Tool komplex erscheint.
Über die expliziten Limits in der vorstehenden Tabelle hinaus gibt es zusätzliche interne Limits für die Größe der kompilierten Grammatik. Diese Limits existieren, weil sich Schema-Komplexität nicht auf eine einzelne Dimension reduzieren lässt: Funktionen wie optionale Parameter, Union-Typen, verschachtelte Objekte und die Anzahl der Tools interagieren auf eine Weise miteinander, die die kompilierte Grammatik unverhältnismäßig groß machen kann.
Wenn diese Limits überschritten werden, erhältst du einen 400-Fehler mit der Meldung „Schema is too complex for compilation." Diese Fehler bedeuten, dass die kombinierte Komplexität deiner Schemas das überschreitet, was effizient kompiliert werden kann, selbst wenn jedes einzelne Limit in der vorstehenden Tabelle eingehalten wird. Als letzte Absicherung erzwingt die API außerdem ein Kompilierungs-Timeout von 180 Sekunden. Schemas, die alle expliziten Prüfungen bestehen, aber sehr große kompilierte Grammatiken erzeugen, können dieses Timeout erreichen.
Wenn du an Komplexitätslimits stößt, probiere diese Strategien der Reihe nach aus:
Markiere nur kritische Tools als strikt. Wenn du viele Tools hast, reserviere es für Tools, bei denen Schema-Verletzungen echte Probleme verursachen, und verlasse dich bei einfacheren Tools auf Claudes natürliche Einhaltung.
Reduziere optionale Parameter. Mache Parameter wo möglich required. Jeder optionale Parameter verdoppelt ungefähr einen Teil des Zustandsraums der Grammatik. Wenn ein Parameter immer einen sinnvollen Standardwert hat, erwäge, ihn als erforderlich zu markieren und Claude diesen Standardwert explizit angeben zu lassen.
Vereinfache verschachtelte Strukturen. Tief verschachtelte Objekte mit optionalen Feldern verstärken die Komplexität. Flache Strukturen ab, wo möglich.
Teile in mehrere Anfragen auf. Wenn du viele strikte Tools hast, erwäge, sie auf separate Anfragen oder Sub-Agenten aufzuteilen.
Bei anhaltenden Problemen mit gültigen Schemas kontaktiere den Support mit deiner Schema-Definition.
Prompts und Antworten werden bei der Verwendung strukturierter Ausgaben mit ZDR verarbeitet. Das JSON-Schema selbst wird jedoch zu Optimierungszwecken für bis zu 24 Stunden seit der letzten Verwendung temporär zwischengespeichert. Über die API-Antwort hinaus werden keine Prompt- oder Antwortdaten gespeichert.
Strukturierte Ausgaben sind HIPAA-geeignet, aber PHI darf nicht in JSON-Schema-Definitionen enthalten sein. Die API kompiliert JSON-Schemas in Grammatiken, die getrennt vom Nachrichteninhalt zwischengespeichert werden, und diese zwischengespeicherten Schemas erhalten nicht denselben PHI-Schutz wie Prompts und Antworten. Füge keine PHI in Schema-Eigenschaftsnamen, enum-Werte, const-Werte oder pattern-reguläre Ausdrücke ein. PHI sollte nur im Nachrichteninhalt (Prompts und Antworten) erscheinen, wo sie unter HIPAA-Schutzmaßnahmen geschützt ist.
Für ZDR- und HIPAA-Eignung über alle Funktionen hinweg siehe API und Datenspeicherung.
Funktioniert mit:
output_config.format) und strikte Tool-Nutzung (strict: true) zusammen in derselben AnfrageInkompatibel mit:
output_config.format aktiviert sind.Grammatik-Geltungsbereich: Grammatiken gelten nur für Claudes direkte Ausgabe, nicht für Tool-Nutzungs-Aufrufe, Tool-Ergebnisse oder Thinking-Tags (bei Verwendung von erweitertem Denken). Der Grammatik-Zustand wird zwischen Abschnitten zurückgesetzt, sodass Claude frei denken kann und dennoch strukturierte Ausgaben in der finalen Antwort erzeugt.
Lass Claude seine Quellen zitieren, wenn es Fragen zu bereitgestellten Dokumenten beantwortet.
Erzwinge JSON-Schema-Konformität bei Claudes Tool-Eingaben mit grammatikbeschränktem Sampling.
Verbinde Claude mit externen Tools und APIs. Erfahre, wo Tools ausgeführt werden und wie die agentische Schleife funktioniert.
Erfahre mehr über Anthropics Preisstruktur für Modelle und Funktionen.
Was this page helpful?