Loading...
    • Guida per sviluppatori
    • Riferimento API
    • MCP
    • Risorse
    • Note sulla versione
    Search...
    ⌘K
    Primi passi
    Introduzione a ClaudeAvvio rapido
    Modelli e prezzi
    Panoramica dei modelliScelta di un modelloNovità in Claude 4.6Guida alla migrazioneDeprecazioni dei modelliPrezzi
    Crea con Claude
    Panoramica delle funzioniUtilizzo dell'API MessagesGestione dei motivi di arrestoBest practice per i prompt
    Capacità del modello
    Extended thinkingAdaptive thinkingEffortFast mode (anteprima di ricerca)Output strutturatiCitazioniStreaming dei messaggiElaborazione batchSupporto PDFRisultati di ricercaSupporto multilingueEmbeddingsVision
    Strumenti
    PanoramicaCome implementare l'uso degli strumentiStrumento di ricerca webStrumento di recupero webStrumento di esecuzione del codiceStrumento di memoriaStrumento BashStrumento Computer useStrumento editor di testo
    Infrastruttura degli strumenti
    Ricerca strumentiChiamata programmatica degli strumentiStreaming granulare degli strumenti
    Gestione del contesto
    Finestre di contestoCompattazioneModifica del contestoPrompt cachingConteggio dei token
    File e risorse
    API Files
    Agent Skills
    PanoramicaAvvio rapidoBest practiceSkills per l'aziendaUtilizzo di Skills con l'API
    Agent SDK
    PanoramicaAvvio rapidoTypeScript SDKTypeScript V2 (anteprima)Python SDKGuida alla migrazione
    MCP nell'API
    Connettore MCPServer MCP remoti
    Claude su piattaforme di terze parti
    Amazon BedrockMicrosoft FoundryVertex AI
    Prompt engineering
    PanoramicaGeneratore di promptUsa modelli di promptMiglioratore di promptSii chiaro e direttoUsa esempi (multishot prompting)Lascia che Claude pensi (CoT)Usa tag XMLDai a Claude un ruolo (prompt di sistema)Concatena prompt complessiSuggerimenti per il contesto lungoSuggerimenti per extended thinking
    Test e valutazione
    Definisci criteri di successoSviluppa casi di testUtilizzo dello strumento di valutazioneRiduzione della latenza
    Rafforza i guardrail
    Riduci le allucinazioniAumenta la coerenza dell'outputMitiga i jailbreakStreaming dei rifiutiRiduci la perdita di promptMantieni Claude nel personaggio
    Amministrazione e monitoraggio
    Panoramica dell'API AdminResidenza dei datiWorkspaceAPI di utilizzo e costiAPI Claude Code AnalyticsZero 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
    Capacità del modello

    Output strutturati

    Ottieni risultati JSON validati dai flussi di lavoro degli agenti

    Was this page helpful?

    • Perché usare gli output strutturati
    • Output JSON
    • Avvio rapido
    • Come funziona
    • Lavorare con gli output JSON negli SDK
    • Casi d'uso comuni
    • Utilizzo rigoroso degli strumenti
    • Perché l'utilizzo rigoroso degli strumenti è importante per gli agenti
    • Avvio rapido
    • Come funziona
    • Casi d'uso comuni
    • Utilizzo di entrambe le funzionalità insieme
    • Considerazioni importanti
    • Compilazione della grammatica e caching
    • Modifica del prompt e costi dei token
    • Limitazioni dello schema JSON
    • Ordinamento delle proprietà
    • Output non validi
    • Limiti di complessità dello schema
    • Conservazione dei dati
    • Compatibilità delle funzionalità

    Gli output strutturati vincolano le risposte di Claude a seguire uno schema specifico, garantendo output valido e analizzabile per l'elaborazione a valle. Sono disponibili due funzionalità complementari:

    • Output JSON (output_config.format): Ottieni la risposta di Claude in un formato JSON specifico
    • Uso rigoroso degli strumenti (strict: true): Garantisce la validazione dello schema sui nomi degli strumenti e sugli input

    Queste funzionalità possono essere utilizzate indipendentemente o insieme nella stessa richiesta.

    Gli output strutturati sono generalmente disponibili sull'API Claude e Amazon Bedrock per Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 e Claude Haiku 4.5. Gli output strutturati rimangono in beta pubblica su 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.

    Stai migrando dalla beta? Il parametro output_format è stato spostato in output_config.format e le intestazioni beta non sono più necessarie. La vecchia intestazione beta (structured-outputs-2025-11-13) e il parametro output_format continueranno a funzionare per un periodo di transizione. Consulta gli esempi di codice di seguito per la forma aggiornata dell'API.

    Perché usare gli output strutturati

    Senza output strutturati, Claude può generare risposte JSON malformate o input di strumenti non validi che interrompono le tue applicazioni. Anche con un'attenta impostazione dei prompt, potresti incontrare:

    • Errori di analisi da sintassi JSON non valida
    • Campi obbligatori mancanti
    • Tipi di dati incoerenti
    • Violazioni dello schema che richiedono gestione degli errori e nuovi tentativi

    Gli output strutturati garantiscono risposte conformi allo schema tramite decodifica vincolata:

    • Sempre validi: Niente più errori JSON.parse()
    • Type safe: Tipi di campo e campi obbligatori garantiti
    • Affidabili: Nessun nuovo tentativo necessario per le violazioni dello schema

    Output JSON

    Gli output JSON controllano il formato di risposta di Claude, garantendo che Claude restituisca JSON valido corrispondente al tuo schema. Usa gli output JSON quando hai bisogno di:

    • Controllare il formato di risposta di Claude
    • Estrarre dati da immagini o testo
    • Generare report strutturati
    • Formattare le risposte API

    Avvio rapido

    Formato della risposta: JSON valido corrispondente al tuo schema in response.content[0].text

    {
      "name": "John Smith",
      "email": "[email protected]",
      "plan_interest": "Enterprise",
      "demo_requested": true
    }

    Come funziona

    1. 1

      Definisci il tuo schema JSON

      Crea uno schema JSON che descriva la struttura che vuoi che Claude segua. Lo schema utilizza il formato JSON Schema standard con alcune limitazioni (vedi Limitazioni dello schema JSON).

    2. 2

      Aggiungi il parametro output_config.format

      Includi il parametro output_config.format nella tua richiesta API con type: "json_schema" e la definizione del tuo schema.

    3. 3

      Analizza la risposta

      La risposta di Claude sarà un JSON valido corrispondente al tuo schema, restituito in response.content[0].text.

    Lavorare con gli output JSON negli SDK

    Gli SDK forniscono helper che semplificano il lavoro con gli output JSON, inclusa la trasformazione degli schemi, la validazione automatica e l'integrazione con le librerie di schemi più diffuse.

    I metodi helper degli SDK (come .parse() e l'integrazione con Pydantic/Zod) accettano ancora output_format come parametro di convenienza. L'SDK gestisce internamente la traduzione in output_config.format. Gli esempi seguenti mostrano la sintassi degli helper dell'SDK.

    Utilizzo delle definizioni di schema native

    Invece di scrivere schemi JSON grezzi, puoi utilizzare strumenti di definizione degli schemi familiari nel tuo linguaggio:

    • Python: modelli Pydantic con client.messages.parse()
    • TypeScript: schemi Zod con zodOutputFormat()
    • Java: classi Java semplici con derivazione automatica dello schema tramite outputFormat(Class<T>)
    • Ruby: classi Anthropic::BaseModel con output_config: {format: Model}
    • C#, Go, PHP: schemi JSON grezzi passati tramite output_config

    Metodi specifici per SDK

    Ogni SDK fornisce helper che semplificano il lavoro con gli output strutturati. Consulta le singole pagine degli SDK per i dettagli completi.

    Come funziona la trasformazione dell'SDK

    Gli SDK Python e TypeScript trasformano automaticamente gli schemi con funzionalità non supportate:

    1. Rimozione dei vincoli non supportati (ad es., minimum, maximum, minLength, maxLength)
    2. Aggiornamento delle descrizioni con le informazioni sui vincoli (ad es., "Deve essere almeno 100"), quando il vincolo non è direttamente supportato con gli output strutturati
    3. Aggiunta di additionalProperties: false a tutti gli oggetti
    4. Filtraggio dei formati stringa solo all'elenco supportato
    5. Validazione delle risposte rispetto allo schema originale (con tutti i vincoli)

    Ciò significa che Claude riceve uno schema semplificato, ma il tuo codice applica comunque tutti i vincoli tramite la validazione.

    Esempio: Un campo Pydantic con minimum: 100 diventa un intero semplice nello schema inviato, ma la descrizione viene aggiornata a "Deve essere almeno 100" e l'SDK valida la risposta rispetto al vincolo originale.

    Casi d'uso comuni

    Utilizzo rigoroso degli strumenti

    L'utilizzo rigoroso degli strumenti valida i parametri degli strumenti, garantendo che Claude chiami le tue funzioni con argomenti correttamente tipizzati. Usa l'utilizzo rigoroso degli strumenti quando hai bisogno di:

    • Validare i parametri degli strumenti
    • Costruire flussi di lavoro agentici
    • Garantire chiamate di funzione type-safe
    • Gestire strumenti complessi con proprietà annidate

    Perché l'utilizzo rigoroso degli strumenti è importante per gli agenti

    La costruzione di sistemi agentici affidabili richiede la conformità garantita allo schema. Senza la modalità strict, Claude potrebbe restituire tipi incompatibili ("2" invece di 2) o campi obbligatori mancanti, rompendo le tue funzioni e causando errori di runtime.

    L'utilizzo rigoroso degli strumenti garantisce parametri type-safe:

    • Le funzioni ricevono argomenti correttamente tipizzati ogni volta
    • Nessuna necessità di validare e riprovare le chiamate agli strumenti
    • Agenti pronti per la produzione che funzionano in modo coerente su larga scala

    Ad esempio, supponiamo che un sistema di prenotazione abbia bisogno di passengers: int. Senza la modalità strict, Claude potrebbe fornire passengers: "two" o passengers: "2". Con strict: true, la risposta conterrà sempre passengers: 2.

    Avvio rapido

    Formato della risposta: Blocchi di utilizzo degli strumenti con input validati in response.content[x].input

    {
      "type": "tool_use",
      "name": "get_weather",
      "input": {
        "location": "San Francisco, CA"
      }
    }

    Garanzie:

    • L'input dello strumento segue rigorosamente l'input_schema
    • Il name dello strumento è sempre valido (dagli strumenti forniti o dagli strumenti del server)

    Come funziona

    1. 1

      Definisci lo schema del tuo strumento

      Crea uno schema JSON per l'input_schema del tuo strumento. Lo schema utilizza il formato JSON Schema standard con alcune limitazioni (vedi Limitazioni di JSON Schema).

    2. 2

      Aggiungi strict: true

      Imposta "strict": true come proprietà di primo livello nella definizione del tuo strumento, insieme a name, description e input_schema.

    3. 3

      Gestisci le chiamate agli strumenti

      Quando Claude utilizza lo strumento, il campo input nel blocco tool_use seguirà rigorosamente il tuo input_schema e il name sarà sempre valido.

    Casi d'uso comuni

    Utilizzo di entrambe le funzionalità insieme

    Gli output JSON e l'uso strict degli strumenti risolvono problemi diversi e possono essere utilizzati insieme:

    • Output JSON controllano il formato della risposta di Claude (cosa dice Claude)
    • Uso strict degli strumenti valida i parametri degli strumenti (come Claude chiama le tue funzioni)

    Quando combinati, Claude può chiamare gli strumenti con parametri garantiti validi E restituire risposte JSON strutturate. Questo è utile per i flussi di lavoro agentivi in cui hai bisogno sia di chiamate agli strumenti affidabili che di output finali strutturati.

    Considerazioni importanti

    Compilazione della grammatica e caching

    Gli output strutturati utilizzano il campionamento vincolato con artefatti di grammatica compilati. Questo introduce alcune caratteristiche di prestazione di cui essere consapevoli:

    • Latenza della prima richiesta: La prima volta che utilizzi uno schema specifico, ci sarà una latenza aggiuntiva mentre la grammatica viene compilata
    • Caching automatico: Le grammatiche compilate vengono memorizzate nella cache per 24 ore dall'ultimo utilizzo, rendendo le richieste successive molto più veloci
    • Invalidazione della cache: La cache viene invalidata se modifichi:
      • La struttura dello schema JSON
      • L'insieme degli strumenti nella tua richiesta (quando si utilizzano sia gli output strutturati che l'uso degli strumenti)
      • Modificare solo i campi name o description non invalida la cache

    Modifica del prompt e costi dei token

    Quando si utilizzano gli output strutturati, Claude riceve automaticamente un prompt di sistema aggiuntivo che spiega il formato di output atteso. Ciò significa:

    • Il conteggio dei token di input sarà leggermente più alto
    • Il prompt iniettato ti costa token come qualsiasi altro prompt di sistema
    • La modifica del parametro output_config.format invaliderà qualsiasi cache del prompt per quel thread di conversazione

    Limitazioni dello schema JSON

    Gli output strutturati supportano lo schema JSON standard con alcune limitazioni. Sia gli output JSON che l'uso strict degli strumenti condividono queste limitazioni.

    Gli SDK Python e TypeScript possono trasformare automaticamente gli schemi con funzionalità non supportate rimuovendole e aggiungendo vincoli alle descrizioni dei campi. Consulta i metodi specifici dell'SDK per i dettagli.

    Ordinamento delle proprietà

    Quando si utilizzano gli output strutturati, le proprietà negli oggetti mantengono il loro ordine definito dallo schema, con un'importante avvertenza: le proprietà obbligatorie appaiono prima, seguite dalle proprietà opzionali.

    Ad esempio, dato questo schema:

    {
      "type": "object",
      "properties": {
        "notes": { "type": "string" },
        "name": { "type": "string" },
        "email": { "type": "string" },
        "age": { "type": "integer" }
      },
      "required": ["name", "email"],
      "additionalProperties": false
    }

    L'output ordinerà le proprietà come:

    1. name (obbligatorio, nell'ordine dello schema)
    2. email (obbligatorio, nell'ordine dello schema)
    3. notes (opzionale, nell'ordine dello schema)
    4. age (opzionale, nell'ordine dello schema)

    Ciò significa che l'output potrebbe apparire come:

    {
      "name": "John Smith",
      "email": "[email protected]",
      "notes": "Interested in enterprise plan",
      "age": 35
    }

    Se l'ordine delle proprietà nell'output è importante per la tua applicazione, assicurati che tutte le proprietà siano contrassegnate come obbligatorie, oppure tieni conto di questo riordinamento nella tua logica di analisi.

    Output non validi

    Sebbene gli output strutturati garantiscano la conformità allo schema nella maggior parte dei casi, esistono scenari in cui l'output potrebbe non corrispondere al tuo schema:

    Rifiuti (stop_reason: "refusal")

    Claude mantiene le sue proprietà di sicurezza e utilità anche quando utilizza gli output strutturati. Se Claude rifiuta una richiesta per motivi di sicurezza:

    • La risposta avrà stop_reason: "refusal"
    • Riceverai un codice di stato 200
    • Ti verranno addebitati i token generati
    • L'output potrebbe non corrispondere al tuo schema perché il messaggio di rifiuto ha la precedenza sui vincoli dello schema

    Limite di token raggiunto (stop_reason: "max_tokens")

    Se la risposta viene interrotta a causa del raggiungimento del limite max_tokens:

    • La risposta avrà stop_reason: "max_tokens"
    • L'output potrebbe essere incompleto e non corrispondere al tuo schema
    • Riprova con un valore max_tokens più alto per ottenere l'output strutturato completo

    Limiti di complessità dello schema

    Gli output strutturati funzionano compilando i tuoi schemi JSON in una grammatica che vincola l'output di Claude. Gli schemi più complessi producono grammatiche più grandi che richiedono più tempo per essere compilate. Per proteggersi da tempi di compilazione eccessivi, l'API applica diversi limiti di complessità.

    Limiti espliciti

    I seguenti limiti si applicano a tutte le richieste con output_config.format o strict: true:

    LimiteValoreDescrizione
    Strumenti strict per richiesta20Numero massimo di strumenti con strict: true. Gli strumenti non strict non contano verso questo limite.
    Parametri opzionali24Parametri opzionali totali in tutti gli schemi degli strumenti strict e negli schemi di output JSON. Ogni parametro non elencato in required conta verso questo limite.
    Parametri con tipi unione16Parametri totali che utilizzano anyOf o array di tipi (es., "type": ["string", "null"]) in tutti gli schemi strict. Questi sono particolarmente costosi perché creano un costo di compilazione esponenziale.

    Questi limiti si applicano al totale combinato di tutti gli schemi strict in una singola richiesta. Ad esempio, se hai 4 strumenti strict con 6 parametri opzionali ciascuno, raggiungerai il limite di 24 parametri anche se nessun singolo strumento sembra complesso.

    Limiti interni aggiuntivi

    Oltre ai limiti espliciti sopra indicati, esistono limiti interni aggiuntivi sulla dimensione della grammatica compilata. Questi limiti esistono perché la complessità dello schema non si riduce a una singola dimensione: funzionalità come parametri opzionali, tipi unione, oggetti annidati e numero di strumenti interagiscono tra loro in modi che possono rendere la grammatica compilata sproporzionatamente grande.

    Quando questi limiti vengono superati, riceverai un errore 400 con il messaggio "Schema is too complex for compilation." Questi errori significano che la complessità combinata dei tuoi schemi supera ciò che può essere compilato in modo efficiente, anche se ogni singolo limite sopra indicato è soddisfatto. Come ultima misura di sicurezza, l'API applica anche un timeout di compilazione di 180 secondi. Gli schemi che superano tutti i controlli espliciti ma producono grammatiche compilate molto grandi potrebbero raggiungere questo timeout.

    Suggerimenti per ridurre la complessità dello schema

    Se stai raggiungendo i limiti di complessità, prova queste strategie nell'ordine indicato:

    1. Contrassegna solo gli strumenti critici come strict. Se hai molti strumenti, riservalo agli strumenti in cui le violazioni dello schema causano problemi reali, e affidati all'aderenza naturale di Claude per gli strumenti più semplici.

    2. Riduci i parametri opzionali. Rendi i parametri required dove possibile. Ogni parametro opzionale raddoppia approssimativamente una porzione dello spazio degli stati della grammatica. Se un parametro ha sempre un valore predefinito ragionevole, considera di renderlo obbligatorio e di far fornire esplicitamente quel valore predefinito a Claude.

    3. Semplifica le strutture annidate. Gli oggetti profondamente annidati con campi opzionali aumentano la complessità. Appiattisci le strutture dove possibile.

    4. Dividi in più richieste. Se hai molti strumenti strict, considera di distribuirli su richieste separate o sotto-agenti.

    Per problemi persistenti con schemi validi, contatta il supporto con la definizione del tuo schema.

    Conservazione dei dati

    I prompt e le risposte vengono elaborati con ZDR quando si utilizzano gli output strutturati. Tuttavia, lo schema JSON stesso viene temporaneamente memorizzato nella cache per un massimo di 24 ore dall'ultimo utilizzo per scopi di ottimizzazione. Nessun dato di prompt o risposta viene conservato oltre la risposta API.

    Per l'idoneità ZDR in tutte le funzionalità, consulta API e conservazione dei dati.

    Compatibilità delle funzionalità

    Funziona con:

    • Elaborazione batch: Elabora gli output strutturati su larga scala con uno sconto del 50%
    • Conteggio dei token: Conta i token senza compilazione
    • Streaming: Trasmetti gli output strutturati come risposte normali
    • Utilizzo combinato: Usa gli output JSON (output_config.format) e l'uso strict degli strumenti (strict: true) insieme nella stessa richiesta

    Incompatibile con:

    • Citazioni: Le citazioni richiedono l'intercalazione di blocchi di citazione con il testo, il che è in conflitto con i vincoli strict dello schema JSON. Restituisce un errore 400 se le citazioni sono abilitate con output_config.format.
    • Prefilling dei messaggi: Incompatibile con gli output JSON

    Ambito della grammatica: Le grammatiche si applicano solo all'output diretto di Claude, non alle chiamate di uso degli strumenti, ai risultati degli strumenti o ai tag di pensiero (quando si utilizza il Pensiero esteso). Lo stato della grammatica si reimposta tra le sezioni, consentendo a Claude di pensare liberamente producendo comunque output strutturato nella risposta finale.

    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"}
        ],
        # Output JSON: formato di risposta strutturato
        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,
                },
            }
        },
        # Uso strict degli strumenti: parametri degli strumenti garantiti
        tools=[
            {
                "name": "search_flights",
                "strict": True,
                "input_schema": {
                    "type": "object",
                    "properties": {
                        "destination": {"type": "string"},
                        "date": {"type": "string", "format": "date"},
                    },
                    "required": ["destination", "date"],
                    "additionalProperties": False,
                },
            }
        ],
    )