Strukturierte Ausgaben beschränken Claudes Antworten darauf, einem bestimmten Schema zu folgen, und gewährleisten so eine gültige, parsbare Ausgabe für die nachgelagerte Verarbeitung. 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 allgemein verfügbar in der Claude API 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 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 allgemein verfügbar auf Microsoft Foundry 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.
Migration von der Beta? Der Parameter output_format wurde nach output_config.format verschoben, und Beta-Header sind nicht mehr erforderlich. Der alte Beta-Header (structured-outputs-2025-11-13) und der Parameter output_format funktionieren während einer Übergangsphase weiterhin. Die folgenden Code-Beispiele zeigen die aktualisierte API-Struktur.
Ohne strukturierte Ausgaben kann Claude fehlerhafte JSON-Antworten oder ungültige Tool-Eingaben generieren, die deine Anwendungen zum Absturz bringen. Selbst bei sorgfältigem Prompting kannst du auf Folgendes stoßen:
Strukturierte Ausgaben garantieren schemakonforme Antworten durch „constrained decoding" (eingeschränktes Decodieren):
JSON.parse()-Fehler mehrJSON-Ausgaben steuern das Antwortformat von Claude und stellen sicher, dass Claude gültiges JSON zurückgibt, das deinem Schema entspricht. Verwende JSON-Ausgaben, wenn du:
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 in deine API-Anfrage ein, mit type: "json_schema" und deiner Schema-Definition.
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 Hilfsfunktionen, die die Arbeit mit JSON-Ausgaben erleichtern, einschließlich Schema-Transformation, automatischer Validierung und Integration mit beliebten Schema-Bibliotheken.
Die Methode client.messages.parse() des Python-SDK akzeptiert weiterhin output_format als Convenience-Parameter und übersetzt ihn intern in output_config.format. Andere SDKs erfordern output_config direkt. Die folgenden Beispiele zeigen die SDK-Helper-Syntax.
Anstatt rohe JSON-Schemas zu schreiben, kannst du vertraute Schema-Definitions-Tools 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 Hilfsfunktionen, die die Arbeit mit strukturierten Ausgaben erleichtern. Vollständige Details findest du auf den einzelnen SDK-Seiten.
Die Python-, TypeScript-, Ruby- und PHP-SDKs transformieren Schemas mit nicht unterstützten Features automatisch. Die C#- und Go-SDKs wenden dieselben Transformationen an, wenn das Schema aus einem nativen Typ abgeleitet wird (Create<T>() in C#; Struct-Reflection oder BetaJSONSchemaOutputFormat() auf der Go-Beta-API). Die Transformationsschritte:
minimum, maximum, minLength, maxLength)additionalProperties: false zu allen Objekten hinzuDas 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 „Muss mindestens 100 sein" und validiert die Antwort gegen den ursprünglichen Constraint.
Zum Erzwingen von 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 arbeiten zusammen:
In Kombination kann Claude Tools mit garantiert gültigen Parametern aufrufen UND strukturierte JSON-Antworten zurückgeben. Dies 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 Performance-Eigenschaften 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 Features 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 Properties in Objekten ihre definierte Reihenfolge aus deinem Schema bei, mit einer wichtigen Einschränkung: Erforderliche Properties erscheinen zuerst, gefolgt von optionalen Properties.
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 Properties 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 Property-Reihenfolge in der Ausgabe für deine Anwendung wichtig ist, markiere alle Properties als erforderlich oder berücksichtige diese Neuordnung in deiner Parsing-Logik.
Während 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 aufgrund des Erreichens des max_tokens-Limits abgeschnitten wird:
stop_reason: "max_tokens"max_tokens-Wert, um die vollständige strukturierte Ausgabe zu erhaltenStrukturierte 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. Um vor übermäßigen Kompilierungszeiten zu schützen, 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 einzige Dimension reduzieren lässt: Features wie optionale Parameter, Union-Typen, verschachtelte Objekte und Anzahl der Tools interagieren miteinander auf Weisen, die die kompilierte Grammatik unverhältnismäßig groß machen können.
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 erfüllt ist. 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 auf Komplexitätslimits stößt, probiere diese Strategien der Reihe nach aus:
Markiere nur kritische Tools als strikt. Wenn du viele Tools hast, reserviere dies 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 erforderlich zu machen 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 bis zu 24 Stunden seit der letzten Verwendung temporär gecacht. Keine Prompt- oder Antwortdaten werden über die API-Antwort hinaus gespeichert.
Strukturierte Ausgaben sind HIPAA-fähig, aber PHI darf nicht in JSON-Schema-Definitionen enthalten sein. Die API kompiliert JSON-Schemas in Grammatiken, die getrennt vom Nachrichteninhalt gecacht werden, und diese gecachten Schemas erhalten nicht denselben PHI-Schutz wie Prompts und Antworten. Füge kein PHI in Schema-Property-Namen, enum-Werte, const-Werte oder pattern-Reguläre-Ausdrücke ein. PHI sollte nur im Nachrichteninhalt (Prompts und Antworten) erscheinen, wo es unter HIPAA-Schutzmaßnahmen geschützt ist.
Für ZDR- und HIPAA-Fähigkeit über alle Features 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-Scope: 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, während es in der finalen Antwort dennoch strukturierte Ausgabe 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 Features.
Was this page helpful?