Strukturierte Ausgaben beschränken Claudes Antworten auf ein bestimmtes Schema und stellen sicher, dass die Ausgabe gültig und analysierbar ist. Verwenden Sie JSON-Ausgaben (output_format) für strukturierte Datenreaktionen oder striktes Tool-Verwenden (strict: true) für garantierte Schemavalidierung bei Tool-Namen und Eingaben.
Strukturierte Ausgaben sind derzeit als öffentliche Beta-Funktion in der Claude API für Claude Sonnet 4.5 und Claude Opus 4.1 verfügbar.
Um die Funktion zu nutzen, setzen Sie den Beta-Header structured-outputs-2025-11-13.
Teilen Sie Feedback über dieses Formular mit.
Ohne strukturierte Ausgaben kann Claude fehlerhafte JSON-Antworten oder ungültige Tool-Eingaben generieren, die Ihre Anwendungen unterbrechen. Selbst mit sorgfältigem Prompting können Sie auf folgende Probleme stoßen:
Strukturierte Ausgaben garantieren schemakompatible Antworten durch eingeschränkte Dekodierung:
JSON.parse()-Fehler mehrWählen Sie den richtigen Modus für Ihren Anwendungsfall:
| JSON-Ausgaben verwenden, wenn | Striktes Tool-Verwenden verwenden, wenn |
|---|---|
| Sie Claudes Antwort in einem bestimmten Format benötigen | Sie validierte Parameter und Tool-Namen für Tool-Aufrufe benötigen |
| Datenextraktion aus Bildern oder Text | Agentengesteuerte Workflows erstellen |
| Strukturierte Berichte generieren | Typsichere Funktionsaufrufe sicherstellen |
| API-Antworten formatieren | Komplexe Tools mit vielen und/oder verschachtelten Eigenschaften |
Der Aufbau zuverlässiger agentengesteuerter Systeme erfordert garantierte Schemakonformität. Ungültige Tool-Parameter unterbrechen Ihre Funktionen und Workflows. Claude könnte inkompatible Typen zurückgeben ("2" statt 2) oder Felder fehlen lassen, was zu Laufzeitfehlern führt.
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 ist garantiert passengers: 2.
Die Python- und TypeScript-SDKs bieten Helfer, die die Arbeit mit JSON-Ausgaben erleichtern, einschließlich Schema-Transformation, automatischer Validierung und Integration mit beliebten Schema-Bibliotheken.
Für Python- und TypeScript-Entwickler können Sie vertraute Schema-Definitionswerkzeuge wie Pydantic und Zod verwenden, anstatt rohe JSON-Schemas zu schreiben.
Nur JSON-Ausgaben
SDK-Helfer (Pydantic, Zod, parse()) funktionieren nur mit JSON-Ausgaben (output_format).
Diese Helfer transformieren und validieren Claudes Ausgabe für Sie. Striktes Tool-Verwenden validiert Claudes Eingabe für Ihre Tools, die das vorhandene input_schema-Feld in Tool-Definitionen verwenden.
Für striktes Tool-Verwenden definieren Sie Ihr input_schema direkt in der Tool-Definition mit strict: true.
Python: client.beta.messages.parse() (Empfohlen)
Die parse()-Methode transformiert automatisch Ihr Pydantic-Modell, validiert die Antwort und gibt ein parsed_output-Attribut zurück.
Die parse()-Methode ist auf client.beta.messages verfügbar, nicht auf client.messages.
Python: transform_schema()-Helfer
Für den Fall, dass 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.beta.messages.parse(), das bereitgestellte Schemas automatisch transformiert, erhalten Sie hier das transformierte Schema, damit Sie es weiter anpassen können.
Beide Python- und TypeScript-SDKs transformieren Schemas automatisch mit nicht unterstützten Funktionen:
minimum, maximum, minLength, maxLength)additionalProperties: false zu allen Objekten hinzuDies bedeutet, dass Claude ein vereinfachtes Schema erhält, aber Ihr Code erzwingt weiterhin alle Einschränkungen durch Validierung.
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.
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 einen zusätzlichen System-Prompt, der das erwartete Ausgabeformat erklärt. Dies bedeutet:
output_format-Parameters 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.
Obwohl strukturierte Ausgaben in den meisten Fällen Schemakonformitä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_format) und striktes Tool-Verwenden (strict: true) zusammen in derselben AnfrageNicht kompatibel mit:
output_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 weiterhin strukturierte Ausgabe in der endgültigen Antwort produziert.
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.beta.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
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={
"type": "json_schema",
"schema": transform_schema(ContactInfo),
}
)
print(response.content[0].text)
# With .parse() - can pass Pydantic model directly
response = client.beta.messages.parse(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
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)