Loading...
    • Entwicklerleitfaden
    • API-Referenz
    • MCP
    • Ressourcen
    • Versionshinweise
    Search...
    ⌘K
    Erste Schritte
    Einführung in ClaudeSchnelleinstieg
    Modelle & Preise
    ModellübersichtModell auswählenNeuerungen in Claude 4.6MigrationsleitfadenModellabschreibungenPreise
    Mit Claude entwickeln
    FunktionsübersichtMessages API verwendenStop-Gründe verarbeitenBest Practices für Prompts
    Modellfähigkeiten
    Extended ThinkingAdaptive ThinkingAufwandFast Mode (Research Preview)Strukturierte AusgabenZitateStreaming MessagesBatch-VerarbeitungPDF-UnterstützungSuchergebnisseMehrsprachige UnterstützungEmbeddingsVision
    Tools
    ÜbersichtTool-Nutzung implementierenWeb-Such-ToolWeb-Abruf-ToolCode-Ausführungs-ToolMemory-ToolBash-ToolComputer-Use-ToolText-Editor-Tool
    Tool-Infrastruktur
    Tool-SucheProgrammgesteuerte Tool-AufrufeFeingranulares Tool-Streaming
    Kontextverwaltung
    KontextfensterKomprimierungKontextbearbeitungPrompt CachingToken-Zählung
    Dateien & Assets
    Files API
    Agent Skills
    ÜbersichtSchnelleinstiegBest PracticesSkills für UnternehmenSkills mit der API verwenden
    Agent SDK
    ÜbersichtSchnelleinstiegTypeScript SDKTypeScript V2 (Preview)Python SDKMigrationsleitfaden
    MCP in der API
    MCP-ConnectorRemote MCP-Server
    Claude auf Plattformen von Drittanbietern
    Amazon BedrockMicrosoft FoundryVertex AI
    Prompt Engineering
    ÜbersichtPrompt-GeneratorPrompt-Vorlagen verwendenPrompt-VerbessererKlar und direkt seinBeispiele verwenden (Multishot Prompting)Claude denken lassen (CoT)XML-Tags verwendenClaude eine Rolle geben (System Prompts)Komplexe Prompts verkettenTipps für lange KontexteTipps für Extended Thinking
    Testen & Evaluieren
    Erfolgskriterien definierenTestfälle entwickelnEvaluierungstool verwendenLatenz reduzieren
    Schutzmaßnahmen verstärken
    Halluzinationen reduzierenAusgabekonsistenz erhöhenJailbreaks abschwächenStreaming-AblehnungenPrompt-Lecks reduzierenClaude im Charakter halten
    Verwaltung und Überwachung
    Admin API ÜbersichtDatenspeicherortArbeitsbereicheUsage and Cost APIClaude Code Analytics APIZero Data Retention
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    Modellfähigkeiten

    Strukturierte Ausgaben

    Validierte JSON-Ergebnisse aus Agent-Workflows erhalten

    Was this page helpful?

    • Warum strukturierte Ausgaben verwenden
    • JSON-Ausgaben
    • Schnellstart
    • So funktioniert es
    • Arbeiten mit JSON-Ausgaben in SDKs
    • Häufige Anwendungsfälle
    • Strikter Tool-Einsatz
    • Warum strikter Tool-Einsatz für Agenten wichtig ist
    • Schnellstart
    • Wie es funktioniert
    • Häufige Anwendungsfälle
    • Beide Funktionen zusammen verwenden
    • Wichtige Überlegungen
    • Grammatik-Kompilierung und Caching
    • Prompt-Modifikation und Token-Kosten
    • JSON-Schema-Einschränkungen
    • Eigenschaftsreihenfolge
    • Ungültige Ausgaben
    • Schema-Komplexitätsgrenzen
    • Datenspeicherung
    • Funktionskompatibilität

    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:

    • JSON-Ausgaben (output_config.format): Claudes Antwort in einem bestimmten JSON-Format erhalten
    • Striktes Tool-Verwenden (strict: true): Schema-Validierung für Tool-Namen und -Eingaben garantieren

    Diese 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.

    Warum strukturierte Ausgaben verwenden

    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:

    • Parse-Fehler durch ungültige JSON-Syntax
    • Fehlende Pflichtfelder
    • Inkonsistente Datentypen
    • Schema-Verletzungen, die Fehlerbehandlung und Wiederholungsversuche erfordern

    Strukturierte Ausgaben garantieren schema-konforme Antworten durch eingeschränktes Decoding:

    • Immer gültig: Keine JSON.parse()-Fehler mehr
    • Typsicher: Garantierte Feldtypen und Pflichtfelder
    • Zuverlässig: Keine Wiederholungsversuche bei Schema-Verletzungen erforderlich

    JSON-Ausgaben

    JSON-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:

    • Claudes Antwortformat steuern
    • Daten aus Bildern oder Text extrahieren
    • Strukturierte Berichte generieren
    • API-Antworten formatieren

    Schnellstart

    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
    }

    So funktioniert es

    1. 1

      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).

    2. 2

      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.

    3. 3

      Parsen Sie die Antwort

      Claudes Antwort wird gültiges JSON sein, das Ihrem Schema entspricht, zurückgegeben in response.content[0].text.

    Arbeiten mit JSON-Ausgaben in SDKs

    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.

    Verwendung nativer Schema-Definitionen

    Anstatt rohe JSON-Schemas zu schreiben, können Sie vertraute Schema-Definitionswerkzeuge in Ihrer Sprache verwenden:

    • Python: Pydantic-Modelle mit client.messages.parse()
    • TypeScript: Zod-Schemas mit zodOutputFormat()
    • Java: Einfache Java-Klassen mit automatischer Schema-Ableitung über outputFormat(Class<T>)
    • Ruby: Anthropic::BaseModel-Klassen mit output_config: {format: Model}
    • C#, Go, PHP: Rohe JSON-Schemas über output_config

    SDK-spezifische Methoden

    Jedes SDK bietet Hilfsmethoden, die die Arbeit mit strukturierten Ausgaben erleichtern. Vollständige Details finden Sie auf den einzelnen SDK-Seiten.

    Wie die SDK-Transformation funktioniert

    Die Python- und TypeScript-SDKs transformieren Schemas mit nicht unterstützten Funktionen automatisch:

    1. Nicht unterstützte Einschränkungen entfernen (z. B. minimum, maximum, minLength, maxLength)
    2. Beschreibungen aktualisieren mit Einschränkungsinformationen (z. B. "Muss mindestens 100 sein"), wenn die Einschränkung nicht direkt mit strukturierten Ausgaben unterstützt wird
    3. additionalProperties: false hinzufügen zu allen Objekten
    4. String-Formate filtern auf nur unterstützte Liste
    5. Antworten validieren gegen Ihr ursprüngliches Schema (mit allen Einschränkungen)

    Das 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.

    Häufige Anwendungsfälle

    Strikter Tool-Einsatz

    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:

    • Tool-Parameter validieren
    • Agentische Workflows aufbauen
    • Typsichere Funktionsaufrufe sicherstellen
    • Komplexe Tools mit verschachtelten Eigenschaften handhaben

    Warum strikter Tool-Einsatz für Agenten wichtig ist

    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:

    • Funktionen erhalten jedes Mal korrekt typisierte Argumente
    • Keine Notwendigkeit, Tool-Aufrufe zu validieren und zu wiederholen
    • Produktionsreife Agenten, die konsistent im großen Maßstab funktionieren

    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.

    Schnellstart

    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:

    • Tool-input folgt strikt dem input_schema
    • Tool-name ist immer gültig (aus bereitgestellten Tools oder Server-Tools)

    Wie es funktioniert

    1. 1

      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).

    2. 2

      strict: true hinzufügen

      Setzen Sie "strict": true als Top-Level-Eigenschaft in Ihrer Tool-Definition, neben name, description und input_schema.

    3. 3

      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.

    Häufige Anwendungsfälle

    Beide Funktionen zusammen verwenden

    JSON-Ausgaben und striktes Tool-Verwenden lösen unterschiedliche Probleme und können zusammen verwendet werden:

    • JSON-Ausgaben steuern das Antwortformat von Claude (was Claude sagt)
    • Striktes Tool-Verwenden validiert Tool-Parameter (wie Claude Ihre Funktionen aufruft)

    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.

    Wichtige Überlegungen

    Grammatik-Kompilierung und Caching

    Strukturierte Ausgaben verwenden eingeschränktes Sampling mit kompilierten Grammatik-Artefakten. Dies bringt einige Leistungsmerkmale mit sich, die zu beachten sind:

    • Latenz bei der ersten Anfrage: Wenn Sie ein bestimmtes Schema zum ersten Mal verwenden, entsteht zusätzliche Latenz, während die Grammatik kompiliert wird
    • Automatisches Caching: Kompilierte Grammatiken werden 24 Stunden ab der letzten Verwendung gecacht, wodurch nachfolgende Anfragen deutlich schneller werden
    • Cache-Invalidierung: Der Cache wird invalidiert, wenn Sie Folgendes ändern:
      • Die JSON-Schema-Struktur
      • Die Menge der Tools in Ihrer Anfrage (wenn Sie sowohl strukturierte Ausgaben als auch Tool-Verwenden nutzen)
      • Das Ändern nur der Felder name oder description invalidiert den Cache nicht

    Prompt-Modifikation und Token-Kosten

    Bei der Verwendung strukturierter Ausgaben erhält Claude automatisch einen zusätzlichen System-Prompt, der das erwartete Ausgabeformat erklärt. Das bedeutet:

    • Ihre Eingabe-Token-Anzahl wird etwas höher sein
    • Der eingefügte Prompt kostet Sie Token wie jeder andere System-Prompt
    • Das Ändern des Parameters output_config.format invalidiert jeden Prompt-Cache für diesen Konversations-Thread

    JSON-Schema-Einschränkungen

    Strukturierte 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.

    Eigenschaftsreihenfolge

    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:

    1. name (erforderlich, in Schema-Reihenfolge)
    2. email (erforderlich, in Schema-Reihenfolge)
    3. notes (optional, in Schema-Reihenfolge)
    4. 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.

    Ungültige Ausgaben

    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:

    • Die Antwort hat stop_reason: "refusal"
    • Sie erhalten einen 200-Statuscode
    • Ihnen werden die generierten Token in Rechnung gestellt
    • Die Ausgabe stimmt möglicherweise nicht mit Ihrem Schema überein, da die Ablehnungsnachricht Vorrang vor Schema-Einschränkungen hat

    Token-Limit erreicht (stop_reason: "max_tokens")

    Wenn die Antwort aufgrund des Erreichens des max_tokens-Limits abgeschnitten wird:

    • Die Antwort hat stop_reason: "max_tokens"
    • Die Ausgabe kann unvollständig sein und nicht mit Ihrem Schema übereinstimmen
    • Wiederholen Sie die Anfrage mit einem höheren max_tokens-Wert, um die vollständige strukturierte Ausgabe zu erhalten

    Schema-Komplexitätsgrenzen

    Strukturierte 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.

    Explizite Grenzen

    Die folgenden Grenzen gelten für alle Anfragen mit output_config.format oder strict: true:

    GrenzeWertBeschreibung
    Strikte Tools pro Anfrage20Maximale Anzahl von Tools mit strict: true. Nicht-strikte Tools zählen nicht zu dieser Grenze.
    Optionale Parameter24Gesamte 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-Typen16Gesamte 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.

    Zusätzliche interne Grenzen

    Ü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.

    Tipps zur Reduzierung der Schema-Komplexität

    Wenn Sie auf Komplexitätsgrenzen stoßen, versuchen Sie diese Strategien der Reihe nach:

    1. 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.

    2. 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.

    3. Vereinfachen Sie verschachtelte Strukturen. Tief verschachtelte Objekte mit optionalen Feldern erhöhen die Komplexität. Flachen Sie Strukturen wo möglich ab.

    4. 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.

    Datenspeicherung

    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.

    Funktionskompatibilität

    Funktioniert mit:

    • Batch-Verarbeitung: Strukturierte Ausgaben im großen Maßstab mit 50% Rabatt verarbeiten
    • Token-Zählung: Token ohne Kompilierung zählen
    • Streaming: Strukturierte Ausgaben wie normale Antworten streamen
    • Kombinierte Nutzung: JSON-Ausgaben (output_config.format) und striktes Tool-Verwenden (strict: true) zusammen in derselben Anfrage verwenden

    Inkompatibel mit:

    • Zitierungen: Zitierungen erfordern das Einstreuen von Zitierblöcken in Text, was mit strikten JSON-Schema-Einschränkungen in Konflikt steht. Gibt einen 400-Fehler zurück, wenn Zitierungen mit output_config.format aktiviert sind.
    • Nachrichten-Prefilling: Inkompatibel mit JSON-Ausgaben

    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,
                },
            }
        ],
    )