Was this page helpful?
Strukturierte Ausgaben schränken Claudes Antworten ein, um einem bestimmten Schema zu folgen, und gewährleisten so gültige, parsierbare Ausgaben für die nachgelagerte Verarbeitung. Zwei ergänzende Funktionen sind verfügbar:
output_config.format): Claudes Antwort in einem bestimmten JSON-Format erhaltenstrict: true): Schema-Validierung für Tool-Namen und -Eingaben garantierenDiese Funktionen können unabhängig voneinander oder zusammen in derselben Anfrage verwendet werden.
Strukturierte Ausgaben sind generell verfügbar auf der Claude API und Amazon Bedrock für Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 und Claude Haiku 4.5. Strukturierte Ausgaben befinden sich weiterhin in der öffentlichen Beta auf Microsoft Foundry.
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 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 werden für einen Übergangszeitraum weiterhin funktionieren. Siehe die 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 zum Absturz bringen. Selbst mit sorgfältigem Prompting können folgende Probleme auftreten:
Strukturierte Ausgaben garantieren schema-konforme Antworten durch eingeschränktes Decoding:
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 Folgendes benötigen:
Antwortformat: Gültiges JSON, das Ihrem Schema entspricht, in response.content[0].text
{
"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 Ihre API-Anfrage ein mit type: "json_schema" und Ihrer Schema-Definition.
Parsen Sie die Antwort
Claudes Antwort wird gültiges JSON sein, das Ihrem Schema entspricht, zurückgegeben in response.content[0].text.
Die SDKs bieten Hilfsmethoden, die die Arbeit mit JSON-Ausgaben erleichtern, einschließlich Schema-Transformation, automatischer Validierung und Integration mit gängigen Schema-Bibliotheken.
SDK-Hilfsmethoden (wie .parse() und Pydantic/Zod-Integration) akzeptieren output_format weiterhin als Komfortparameter. Das SDK übernimmt die Übersetzung zu output_config.format intern. Die folgenden Beispiele zeigen die SDK-Hilfssyntax.
Anstatt rohe JSON-Schemas zu schreiben, können Sie vertraute Schema-Definitionswerkzeuge in Ihrer Sprache verwenden:
client.messages.parse()zodOutputFormat()outputFormat(Class<T>)Anthropic::BaseModel-Klassen mit output_config: {format: Model}output_configJedes SDK bietet Hilfsmethoden, die die Arbeit mit strukturierten Ausgaben erleichtern. Vollständige Details finden Sie auf den einzelnen SDK-Seiten.
Die Python- und TypeScript-SDKs transformieren Schemas mit nicht unterstützten Funktionen automatisch:
minimum, maximum, minLength, maxLength)additionalProperties: false hinzufügen zu allen ObjektenDas bedeutet, dass Claude ein vereinfachtes Schema erhält, aber Ihr Code alle Einschränkungen durch Validierung weiterhin durchsetzt.
Beispiel: Ein Pydantic-Feld mit minimum: 100 wird zu einem einfachen Integer im gesendeten Schema, aber die Beschreibung wird auf "Muss mindestens 100 sein" aktualisiert, und das SDK validiert die Antwort gegen die ursprüngliche Einschränkung.
Der strikte Tool-Einsatz validiert Tool-Parameter und stellt sicher, dass Claude Ihre Funktionen mit korrekt typisierten Argumenten aufruft. Verwenden Sie den strikten Tool-Einsatz, wenn Sie Folgendes benötigen:
Der Aufbau zuverlässiger agentischer Systeme erfordert garantierte Schema-Konformität. Ohne strikten Modus könnte Claude inkompatible Typen zurückgeben ("2" statt 2) oder erforderliche Felder fehlen lassen, was Ihre Funktionen beschädigt und Laufzeitfehler verursacht.
Strikter Tool-Einsatz garantiert typsichere Parameter:
Angenommen, ein Buchungssystem benötigt passengers: int. Ohne strikten Modus könnte Claude passengers: "two" oder passengers: "2" liefern. Mit strict: true enthält die Antwort immer passengers: 2.
Antwortformat: Tool-Use-Blöcke mit validierten Eingaben in response.content[x].input
{
"type": "tool_use",
"name": "get_weather",
"input": {
"location": "San Francisco, CA"
}
}Garantien:
input folgt strikt dem input_schemaname ist immer gültig (aus bereitgestellten Tools oder Server-Tools)Ihr Tool-Schema definieren
Erstellen Sie ein JSON-Schema für das input_schema Ihres Tools. Das Schema verwendet das Standard-JSON-Schema-Format mit einigen Einschränkungen (siehe JSON-Schema-Einschränkungen).
strict: true hinzufügen
Setzen Sie "strict": true als Top-Level-Eigenschaft in Ihrer Tool-Definition, neben name, description und input_schema.
Tool-Aufrufe verarbeiten
Wenn Claude das Tool verwendet, folgt das input-Feld im tool_use-Block strikt Ihrem input_schema, und der name ist immer gültig.
JSON-Ausgaben und striktes Tool-Verwenden lösen unterschiedliche Probleme und können zusammen verwendet werden:
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 Sie sowohl zuverlässige Tool-Aufrufe als auch strukturierte Endausgaben benötigen.
Strukturierte Ausgaben verwenden eingeschränktes Sampling mit kompilierten Grammatik-Artefakten. Dies bringt einige Leistungsmerkmale mit sich, die zu beachten sind:
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 striktes Tool-Verwenden teilen diese Einschränkungen.
Die Python- und TypeScript-SDKs können Schemas mit nicht unterstützten Funktionen automatisch transformieren, indem sie diese entfernen und Einschränkungen zu Feldbeschreibungen hinzufügen. Weitere Informationen finden Sie unter SDK-spezifische Methoden.
Bei der Verwendung strukturierter Ausgaben behalten Eigenschaften in Objekten ihre definierte Reihenfolge aus Ihrem Schema bei, mit einem wichtigen Vorbehalt: 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 in folgender Reihenfolge anordnen:
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 wie folgt aussehen:
{
"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, stellen Sie sicher, dass alle Eigenschaften als erforderlich markiert sind, oder berücksichtigen Sie diese Neuanordnung in Ihrer Parsing-Logik.
Obwohl strukturierte Ausgaben in den meisten Fällen Schema-Konformität garantieren, gibt es Szenarien, in denen die Ausgabe möglicherweise nicht mit Ihrem Schema übereinstimmt:
Ablehnungen (stop_reason: "refusal")
Claude behält seine Sicherheits- und Hilfseigenschaften 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 Ihre JSON-Schemas in eine Grammatik kompiliert werden, die Claudes Ausgabe einschränkt. Komplexere Schemas erzeugen größere Grammatiken, die länger zum Kompilieren brauchen. Um übermäßige Kompilierungszeiten zu verhindern, setzt die API mehrere Komplexitätsgrenzen durch.
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 | Gesamte optionale Parameter über alle strikten Tool-Schemas und JSON-Ausgabe-Schemas hinweg. Jeder Parameter, der nicht in required aufgeführt ist, zählt zu dieser Grenze. |
| Parameter mit Union-Typen | 16 | Gesamte Parameter, die anyOf oder Typ-Arrays verwenden (z. B. "type": ["string", "null"]) über alle strikten Schemas hinweg. 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. Wenn Sie beispielsweise 4 strikte Tools mit je 6 optionalen Parametern haben, erreichen Sie die 24-Parameter-Grenze, obwohl kein einzelnes Tool komplex erscheint.
Über die expliziten Grenzen hinaus gibt es zusätzliche interne Grenzen für die kompilierte Grammatikgröße. Diese Grenzen existieren, weil sich Schema-Komplexität nicht auf eine einzige Dimension reduzieren lässt: Funktionen wie optionale Parameter, Union-Typen, verschachtelte Objekte und die Anzahl der Tools interagieren miteinander auf eine Weise, die die kompilierte Grammatik unverhältnismäßig groß machen kann.
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 das überschreitet, was effizient kompiliert werden kann, auch wenn jede einzelne Grenze oben eingehalten wird. Als letztes Sicherheitsnetz setzt die API auch ein Kompilierungs-Timeout von 180 Sekunden durch. Schemas, die alle expliziten Prüfungen bestehen, aber sehr große kompilierte Grammatiken erzeugen, können dieses Timeout erreichen.
Wenn Sie auf Komplexitätsgrenzen stoßen, versuchen Sie diese Strategien der Reihe nach:
Markieren Sie nur kritische Tools als strikt. Wenn Sie viele Tools haben, reservieren Sie es für Tools, bei denen Schema-Verletzungen echte Probleme verursachen, und verlassen Sie sich auf Claudes natürliche Einhaltung für einfachere Tools.
Reduzieren Sie optionale Parameter. Machen Sie Parameter wo möglich required. Jeder optionale Parameter verdoppelt ungefähr einen Teil des Zustandsraums der Grammatik. Wenn ein Parameter immer einen vernünftigen Standardwert hat, erwägen Sie, ihn erforderlich zu machen und Claude diesen Standard explizit angeben zu lassen.
Vereinfachen Sie verschachtelte Strukturen. Tief verschachtelte Objekte mit optionalen Feldern erhöhen die Komplexität. Flachen Sie Strukturen wo möglich ab.
Aufteilen in mehrere Anfragen. Wenn Sie viele strikte Tools haben, erwägen Sie, diese auf separate Anfragen oder Unteragenten aufzuteilen.
Bei anhaltenden Problemen mit gültigen Schemas wenden Sie sich an den Support mit Ihrer Schema-Definition.
Prompts und Antworten werden mit ZDR verarbeitet, wenn strukturierte Ausgaben verwendet werden. Das JSON-Schema selbst wird jedoch zu Optimierungszwecken vorübergehend bis zu 24 Stunden seit der letzten Verwendung gecacht. Es werden keine Prompt- oder Antwortdaten über die API-Antwort hinaus gespeichert.
Informationen zur ZDR-Berechtigung für alle Funktionen finden Sie unter API und Datenspeicherung.
Funktioniert mit:
output_config.format) und striktes Tool-Verwenden (strict: true) zusammen in derselben Anfrage verwendenInkompatibel mit:
output_config.format aktiviert sind.Grammatik-Geltungsbereich: Grammatiken gelten nur für Claudes direkte Ausgabe, nicht für Tool-Aufrufe, Tool-Ergebnisse oder Denk-Tags (bei Verwendung von Extended Thinking). Der Grammatikzustand wird zwischen Abschnitten zurückgesetzt, sodass Claude frei denken kann und dennoch strukturierte Ausgaben in der endgültigen Antwort erzeugt.
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"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
}
}
}
}'from 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-6",
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)curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "What is the weather in San Francisco?"}
],
"tools": [{
"name": "get_weather",
"description": "Get the current weather in a given location",
"strict": true,
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"],
"additionalProperties": false
}
}]
}'response = client.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Help me plan a trip to Paris for next month"}
],
# 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,
},
}
],
)