Strukturierte Ausgaben beschränken Claudes Antworten auf ein bestimmtes Schema und stellen sicher, dass die Ausgabe gültig und analysierbar ist. Zwei komplementäre Funktionen sind verfügbar:
output_config.format): Erhalten Sie Claudes Antwort in einem bestimmten JSON-Formatstrict: true): Garantieren Sie Schemavalidierung bei Tool-Namen und EingabenDer Parameter output_format wurde zu output_config.format verschoben. Der alte Parameter output_format funktioniert noch vorübergehend, ist aber veraltet und wird in einer zukünftigen API-Version entfernt. Aktualisieren Sie Ihren Code, um stattdessen output_config: {format: {...}} zu verwenden.
Diese Funktionen können unabhängig voneinander oder zusammen in derselben Anfrage verwendet werden.
Strukturierte Ausgaben sind allgemein verfügbar auf der Claude API und Amazon Bedrock für Claude Opus 4.6, Claude Sonnet 4.5, Claude Opus 4.5 und Claude Haiku 4.5. Strukturierte Ausgaben bleiben in der öffentlichen Beta auf Microsoft Foundry.
Migration von 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 schemakonform 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:
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
}
}
}
}'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 Ihre API-Anfrage mit type: "json_schema" und Ihrer Schema-Definition ein.
Analysieren Sie die Antwort
Claudes Antwort wird gültiges JSON sein, das Ihrem Schema entspricht, zurückgegeben in response.content[0].text.
Die Python- und TypeScript-SDKs bieten Hilfsfunktionen, die die Arbeit mit JSON-Ausgaben erleichtern, einschließlich Schema-Transformation, automatischer Validierung und Integration mit beliebten Schema-Bibliotheken.
SDK-Hilfsmethoden (wie .parse() und Pydantic/Zod-Integration) akzeptieren immer noch output_format als Komfortparameter. Das SDK handhabt die Übersetzung zu output_config.format intern. Die folgenden Beispiele zeigen die SDK-Hilfssyntax.
Für Python- und TypeScript-Entwickler können Sie vertraute Schema-Definitionswerkzeuge wie Pydantic und Zod verwenden, anstatt rohe JSON-Schemas zu schreiben.
from pydantic import BaseModel
from anthropic import Anthropic, transform_schema
class ContactInfo(BaseModel):
name: str
email: str
plan_interest: str
demo_requested: bool
client = Anthropic()
# With .create() - requires transform_schema()
response = client.messages.create(
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": transform_schema(ContactInfo),
}
}
)
print(response.content[0].text)
# With .parse() - can pass Pydantic model directly
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)Python: client.messages.parse() (Empfohlen)
Die Methode parse() transformiert automatisch Ihr Pydantic-Modell, validiert die Antwort und gibt ein Attribut parsed_output zurück.
Python: transform_schema()-Hilfsfunktion
Für Fälle, in denen Sie Schemas manuell transformieren müssen, bevor Sie sie senden, oder wenn Sie ein von Pydantic generiertes Schema ändern möchten. Im Gegensatz zu client.messages.parse(), das bereitgestellte Schemas automatisch transformiert, gibt dies Ihnen das transformierte Schema, damit Sie es weiter anpassen können.
Sowohl Python- als auch TypeScript-SDKs transformieren Schemas mit nicht unterstützten Funktionen automatisch:
minimum, maximum, minLength, maxLength)additionalProperties: false zu allen Objekten hinzuDies 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 einer einfachen Ganzzahl 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.
Striktes Tool-Verwenden validiert Tool-Parameter und stellt sicher, dass Claude Ihre Funktionen mit korrekt typisierten Argumenten aufruft. Verwenden Sie striktes Tool-Verwenden, wenn Sie:
Das Erstellen zuverlässiger Agentensysteme erfordert garantierte Schema-Konformität. Ohne strikten Modus könnte Claude inkompatible Typen zurückgeben ("2" statt 2) oder erforderliche Felder vermissen, was Ihre Funktionen unterbricht und Laufzeitfehler verursacht.
Striktes Tool-Verwenden garantiert typsichere Parameter:
Angenommen, ein Buchungssystem benötigt passengers: int. Ohne strikten Modus könnte Claude passengers: "two" oder passengers: "2" bereitstellen. Mit strict: true enthält die Antwort immer passengers: 2.
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
}
}]
}'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 streng dem input_schemaname ist immer gültig (von bereitgestellten Tools oder Server-Tools)Definieren Sie Ihr Tool-Schema
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).
Fügen Sie strict: true hinzu
Setzen Sie "strict": true als Top-Level-Eigenschaft in Ihrer Tool-Definition, neben name, description und input_schema.
Behandeln Sie Tool-Aufrufe
Wenn Claude das Tool verwendet, folgt das Feld input im tool_use-Block streng 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 Agentic-Workflows, bei denen Sie sowohl zuverlässige Tool-Aufrufe als auch strukturierte endgültige Ausgaben benötigen.
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
}
}]
)Strukturierte Ausgaben verwenden eingeschränkte Stichproben 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 eine zusätzliche Systemeingabeaufforderung, die das erwartete Ausgabeformat erklärt. Dies bedeutet:
output_config.format invalidiert jedes Prompt-Caching für diesen GesprächsfadenStrukturierte 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. Siehe SDK-spezifische Methoden für Details.
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. 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 erhaltenWenn Ihr Schema nicht unterstützte Funktionen verwendet oder zu komplex ist, erhalten Sie einen 400-Fehler:
„Zu viele rekursive Definitionen im Schema"
„Schema ist zu komplex"
strict: true markiert sindBei anhaltenden Problemen mit gültigen Schemas kontaktieren Sie den Support mit Ihrer Schema-Definition.
Funktioniert mit:
output_config.format) und striktes Tool-Verwenden (strict: true) zusammen in derselben AnfrageNicht kompatibel mit:
output_config.format aktiviert sind.Grammatik-Bereich: Grammatiken gelten nur für Claudes direkte Ausgabe, nicht für Tool-Use-Aufrufe, Tool-Ergebnisse oder Thinking-Tags (bei Verwendung von Extended Thinking). Der Grammatik-Status wird zwischen Abschnitten zurückgesetzt, sodass Claude frei denken kann, während es immer noch strukturierte Ausgabe in der endgültigen Antwort produziert.
Was this page helpful?