Was this page helpful?
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_config.format): Ottieni la risposta di Claude in un formato JSON specificostrict: true): Garantisce la validazione dello schema sui nomi degli strumenti e sugli inputQueste 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.
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:
Gli output strutturati garantiscono risposte conformi allo schema tramite decodifica vincolata:
JSON.parse()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:
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
}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).
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.
Analizza la risposta
La risposta di Claude sarà un JSON valido corrispondente al tuo schema, restituito in response.content[0].text.
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.
Invece di scrivere schemi JSON grezzi, puoi utilizzare strumenti di definizione degli schemi familiari nel tuo linguaggio:
client.messages.parse()zodOutputFormat()outputFormat(Class<T>)Anthropic::BaseModel con output_config: {format: Model}output_configOgni SDK fornisce helper che semplificano il lavoro con gli output strutturati. Consulta le singole pagine degli SDK per i dettagli completi.
Gli SDK Python e TypeScript trasformano automaticamente gli schemi con funzionalità non supportate:
minimum, maximum, minLength, maxLength)additionalProperties: false a tutti gli oggettiCiò 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.
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:
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:
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.
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:
input dello strumento segue rigorosamente l'input_schemaname dello strumento è sempre valido (dagli strumenti forniti o dagli strumenti del server)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).
Aggiungi strict: true
Imposta "strict": true come proprietà di primo livello nella definizione del tuo strumento, insieme a name, description e input_schema.
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.
Gli output JSON e l'uso strict degli strumenti risolvono problemi diversi e possono essere utilizzati insieme:
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.
Gli output strutturati utilizzano il campionamento vincolato con artefatti di grammatica compilati. Questo introduce alcune caratteristiche di prestazione di cui essere consapevoli:
name o description non invalida la cacheQuando si utilizzano gli output strutturati, Claude riceve automaticamente un prompt di sistema aggiuntivo che spiega il formato di output atteso. Ciò significa:
output_config.format invaliderà qualsiasi cache del prompt per quel thread di conversazioneGli 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.
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:
name (obbligatorio, nell'ordine dello schema)email (obbligatorio, nell'ordine dello schema)notes (opzionale, nell'ordine dello schema)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.
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:
stop_reason: "refusal"Limite di token raggiunto (stop_reason: "max_tokens")
Se la risposta viene interrotta a causa del raggiungimento del limite max_tokens:
stop_reason: "max_tokens"max_tokens più alto per ottenere l'output strutturato completoGli 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à.
I seguenti limiti si applicano a tutte le richieste con output_config.format o strict: true:
| Limite | Valore | Descrizione |
|---|---|---|
| Strumenti strict per richiesta | 20 | Numero massimo di strumenti con strict: true. Gli strumenti non strict non contano verso questo limite. |
| Parametri opzionali | 24 | Parametri 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 unione | 16 | Parametri 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.
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.
Se stai raggiungendo i limiti di complessità, prova queste strategie nell'ordine indicato:
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.
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.
Semplifica le strutture annidate. Gli oggetti profondamente annidati con campi opzionali aumentano la complessità. Appiattisci le strutture dove possibile.
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.
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.
Funziona con:
output_config.format) e l'uso strict degli strumenti (strict: true) insieme nella stessa richiestaIncompatibile con:
output_config.format.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,
},
}
],
)