Was this page helpful?
Strukturierte Ausgaben beschränken Claudes Antworten auf ein bestimmtes Schema und gewährleisten gültige, analysierbare Ausgaben für die nachgelagerte Verarbeitung. Strukturierte Ausgaben bieten zwei komplementäre Funktionen:
output_config.format): Claudes Antwort in einem bestimmten JSON-Format abrufenstrict: true): Schemavalidierung für Tool-Namen und Eingaben garantierenSie können diese Funktionen unabhängig voneinander oder zusammen in derselben Anfrage verwenden.
Strukturierte Ausgaben sind allgemein verfügbar auf der Claude API für Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, 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 Mythos Preview, Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 und Claude Haiku 4.5; Claude Opus 4.7 ist über die Amazon Bedrock Research Preview verfügbar. Strukturierte Ausgaben befinden sich in der Beta-Phase auf Microsoft Foundry. Strukturierte Ausgaben werden auf Google Cloud's Vertex AI für Claude Mythos Preview nicht unterstützt.
This feature qualifies for Zero Data Retention (ZDR) with limited technical retention. See the Data retention section for details on what is retained and why.
Migration aus der Beta? Der Parameter output_format wurde zu 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 weiterhin für einen Übergangszeitraum. Siehe Code-Beispiele unten für die aktualisierte API-Form.
Ohne strukturierte Ausgaben kann Claude fehlerhafte JSON-Antworten oder ungültige Tool-Eingaben generieren, die Ihre Anwendungen unterbrechen. Selbst mit sorgfältiger Eingabeaufforderung können Sie auf folgende Probleme stoßen:
Strukturierte Ausgaben garantieren schemakompatible Antworten durch eingeschränkte Dekodierung:
JSON.parse()-Fehler mehrJSON-Ausgaben steuern Claudes Antwortformat und stellen sicher, dass Claude gültiges JSON zurückgibt, das Ihrem Schema entspricht. Verwenden Sie JSON-Ausgaben, wenn Sie:
Antwortformat: Gültiges JSON, das Ihrem Schema in response.content[0].text entspricht
{
"name": "John Smith",
"email": "[email protected]",
"plan_interest": "Enterprise",
"demo_requested": true
}Definieren Sie Ihr JSON-Schema
Erstellen Sie 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ügen Sie den Parameter output_config.format hinzu
Fügen Sie den Parameter output_config.format in Ihrer API-Anfrage mit type: "json_schema" und Ihrer Schema-Definition ein.
Analysieren Sie die Antwort
Claudes Antwort ist gültiges JSON, das Ihrem Schema entspricht und in response.content[0].text zurückgegeben wird.
Die SDKs bieten Hilfsfunktionen, die die Arbeit mit JSON-Ausgaben erleichtern, einschließlich Schemaumwandlung, automatischer Validierung und Integration mit beliebten Schemabibliotheken.
Das Python SDK's client.messages.parse() akzeptiert immer noch output_format als Komfortparameter und übersetzt ihn intern zu output_config.format. Andere SDKs erfordern output_config direkt. Die folgenden Beispiele zeigen die SDK-Hilfssyntax.
Anstatt rohe JSON-Schemas zu schreiben, können Sie vertraute Schemadefinitionswerkzeuge in Ihrer 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]Jedes SDK bietet Hilfsfunktionen, die die Arbeit mit strukturierten Ausgaben erleichtern. Weitere Details finden Sie auf den einzelnen SDK-Seiten.
Die Python-, TypeScript-, Ruby- und PHP-SDKs transformieren Schemas automatisch mit nicht unterstützten Funktionen:
minimum, maximum, minLength, maxLength)additionalProperties: false zu allen ObjektenDies bedeutet, dass Claude ein vereinfachtes Schema erhält, aber Ihr Code erzwingt immer noch alle Einschränkungen durch Validierung.
Beispiel: Ein Pydantic-Feld mit minimum: 100 wird zu einem einfachen Integer im gesendeten Schema, aber das SDK aktualisiert die Beschreibung zu "Muss mindestens 100 sein" und validiert die Antwort gegen die ursprüngliche Einschränkung.
Für die Erzwingung der JSON-Schema-Konformität bei Werkzeugeingaben mit grammatikbeschränkter Stichprobenentnahme siehe Strikte Werkzeugnutzung.
JSON-Ausgaben und striktes Tool-Verwenden lösen unterschiedliche Probleme und funktionieren zusammen:
In Kombination kann Claude Tools mit garantiert gültigen Parametern aufrufen UND strukturierte JSON-Antworten zurückgeben. Dies ist nützlich für agentenbasierte Workflows, bei denen Sie sowohl zuverlässige Tool-Aufrufe als auch strukturierte endgültige Ausgaben benötigen.
Strukturierte Ausgaben verwenden eingeschränktes Sampling mit kompilierten Grammatik-Artefakten. Dies führt zu einigen Leistungsmerkmalen, die Sie beachten sollten:
name- oder description-Feldern invalidiert den Cache nichtBei Verwendung von strukturierten Ausgaben erhält Claude automatisch einen zusätzlichen System-Prompt, der das erwartete Ausgabeformat erklärt. Dies bedeutet:
output_config.format invalidiert jeden Prompt-Cache für diesen Gesprächs-ThreadStrukturierte Ausgaben unterstützen Standard-JSON-Schema mit einigen Einschränkungen. Sowohl JSON-Ausgaben als auch striktes Tool-Verwenden 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 Einschränkungen zu Feldbeschreibungen hinzufügen. Siehe SDK-spezifische Methoden für Details.
Bei Verwendung von strukturierten Ausgaben behalten Eigenschaften in Objekten ihre definierte Reihenfolge aus Ihrem Schema bei, mit einer wichtigen Ausnahme: erforderliche Eigenschaften erscheinen zuerst, gefolgt von optionalen Eigenschaften.
Zum Beispiel, gegeben dieses Schema:
{
"type": "object",
"properties": {
"notes": { "type": "string" },
"name": { "type": "string" },
"email": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "email"],
"additionalProperties": false
}Die Ausgabe wird Eigenschaften wie folgt ordnen:
name (erforderlich, in Schema-Reihenfolge)email (erforderlich, in Schema-Reihenfolge)notes (optional, in Schema-Reihenfolge)age (optional, in Schema-Reihenfolge)Dies bedeutet, dass die Ausgabe wie folgt aussehen könnte:
{
"name": "John Smith",
"email": "[email protected]",
"notes": "Interested in enterprise plan",
"age": 35
}Wenn die Eigenschaftsreihenfolge in der Ausgabe für Ihre Anwendung wichtig ist, markieren Sie alle Eigenschaften als erforderlich, oder berücksichtigen Sie diese Neuordnung in Ihrer 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 Ihrem Schema entspricht:
Ablehnungen (stop_reason: "refusal")
Claude behält seine Sicherheits- und Hilfreichkeitseigenschaften auch bei Verwendung von strukturierten 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 erneut, um die vollständige strukturierte Ausgabe zu erhaltenStrukturierte Ausgaben funktionieren, indem Ihre 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ätsgrenzen.
Die folgenden Grenzen gelten für alle Anfragen mit output_config.format oder strict: true:
| Grenze | Wert | Beschreibung |
|---|---|---|
| Strikte Tools pro Anfrage | 20 | Maximale Anzahl von Tools mit strict: true. Nicht-strikte Tools zählen nicht zu dieser Grenze. |
| Optionale Parameter | 24 | Gesamtzahl optionaler Parameter über alle strikten Tool-Schemas und JSON-Output-Schemas. Jeder Parameter, der nicht in required aufgelistet ist, zählt zu dieser Grenze. |
| Parameter mit Union-Typen | 16 | Gesamtzahl von Parametern, die anyOf oder Typ-Arrays verwenden (z.B. "type": ["string", "null"]) über alle strikten Schemas. Diese sind besonders teuer, da sie exponentielle Kompilierungskosten verursachen. |
Diese Grenzen gelten für die kombinierte Gesamtsumme über alle strikten Schemas in einer einzelnen Anfrage. Zum Beispiel, wenn Sie 4 strikte Tools mit je 6 optionalen Parametern haben, erreichen Sie die 24-Parameter-Grenze, obwohl kein einzelnes Tool komplex zu sein scheint.
Über die oben genannten expliziten Grenzen hinaus gibt es zusätzliche interne Grenzen für die Größe der kompilierten Grammatik. Diese Grenzen existieren, weil Schema-Komplexität sich nicht auf eine einzelne Dimension reduziert: Funktionen wie optionale Parameter, Union-Typen, verschachtelte Objekte und die Anzahl der Tools interagieren auf Weise miteinander, die die kompilierte Grammatik überproportional groß machen können.
Wenn diese Grenzen überschritten werden, erhalten Sie einen 400-Fehler mit der Meldung "Schema is too complex for compilation." Diese Fehler bedeuten, dass die kombinierte Komplexität Ihrer Schemas übersteigt, was effizient kompiliert werden kann, selbst wenn jede einzelne oben genannte Grenze erfüllt ist. Als letzter Ausweg erzwingt die API auch ein Kompilierungs-Timeout von 180 Sekunden. Schemas, die alle expliziten Überprüfungen bestehen, aber sehr große kompilierte Grammatiken erzeugen, können dieses Timeout treffen.
Wenn Sie Komplexitätsgrenzen erreichen, versuchen Sie diese Strategien in dieser Reihenfolge:
Markieren Sie nur kritische Tools als strikt. Wenn Sie viele Tools haben, reservieren Sie es für Tools, bei denen Schema-Verstöße echte Probleme verursachen, und verlassen Sie sich auf Claudes natürliche Einhaltung für einfachere Tools.
Reduzieren Sie optionale Parameter. Machen Sie Parameter required, wo möglich. Jeder optionale Parameter verdoppelt ungefähr einen Teil des Zustandsraums der Grammatik. Wenn ein Parameter immer einen angemessenen Standard hat, erwägen Sie, ihn erforderlich zu machen und Claude diesen Standard explizit bereitstellen zu lassen.
Vereinfachen Sie verschachtelte Strukturen. Tief verschachtelte Objekte mit optionalen Feldern verstärken die Komplexität. Vereinfachen Sie Strukturen, wo möglich.
Teilen Sie in mehrere Anfragen auf. Wenn Sie viele strikte Tools haben, erwägen Sie, diese auf separate Anfragen oder Sub-Agenten aufzuteilen.
Bei anhaltenden Problemen mit gültigen Schemas kontaktieren Sie den Support mit Ihrer Schema-Definition.
Prompts und Antworten werden mit ZDR verarbeitet, wenn strukturierte Ausgaben verwendet werden. Das JSON-Schema selbst wird jedoch für bis zu 24 Stunden seit der letzten Verwendung zu Optimierungszwecken vorübergehend zwischengespeichert. Keine Prompt- oder Antwortdaten werden über die API-Antwort hinaus beibehalten.
Strukturierte Ausgaben sind HIPAA-berechtigt, aber PHI darf nicht in JSON-Schema-Definitionen enthalten sein. Die API kompiliert JSON-Schemas in Grammatiken, die separat vom Nachrichteninhalt zwischengespeichert werden, und diese zwischengespeicherten Schemas erhalten nicht den gleichen PHI-Schutz wie Prompts und Antworten. Fügen Sie PHI nicht in Schema-Eigenschaftsnamen, enum-Werte, const-Werte oder pattern-Regex-Ausdrücke ein. PHI sollte nur in Nachrichteninhalten (Prompts und Antworten) erscheinen, wo es unter HIPAA-Schutzmaßnahmen geschützt ist.
Für ZDR- und HIPAA-Berechtigung über alle Funktionen hinweg siehe API und Datenspeicherung.
Funktioniert mit:
output_config.format) und striktes Tool-Verwenden (strict: true) zusammen in der gleichen AnfrageNicht kompatibel mit:
output_config.format aktiviert sind.Grammatik-Umfang: Grammatiken gelten nur für Claudes direkte Ausgabe, nicht für Tool-Aufrufe, Tool-Ergebnisse oder Thinking-Tags (bei Verwendung von Extended Thinking). Der Grammatik-Status wird zwischen Abschnitten zurückgesetzt, was Claude ermöglicht, frei zu denken, während immer noch strukturierte Ausgabe in der endgültigen Antwort erzeugt wird.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
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)output_configfrom 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-7",
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)response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Help me plan a trip to Paris departing May 15, 2026",
}
],
# JSON outputs: structured response format
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,
},
}
},
# Strict tool use: guaranteed tool parameters
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)