As "structured outputs" (saídas estruturadas) restringem as respostas de Claude para seguir um esquema específico, garantindo saída válida e analisável para processamento posterior. As saídas estruturadas fornecem dois recursos complementares:
output_config.format): Obtenha a resposta de Claude em um formato JSON específicostrict: true): Garanta a validação de esquema em nomes e entradas de ferramentasVocê pode usar esses recursos de forma independente ou em conjunto na mesma solicitação.
As saídas estruturadas estão disponíveis de forma geral na API de Claude para Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 e Claude Haiku 4.5. No Amazon Bedrock, as saídas estruturadas estão disponíveis de forma geral para Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 e Claude Haiku 4.5; Claude Sonnet 5, Claude Opus 4.7 e Claude Mythos Preview estão disponíveis através de Claude no Amazon Bedrock (o endpoint Bedrock da Messages-API). As saídas estruturadas estão disponíveis na Claude Platform na AWS. No Google Cloud, as saídas estruturadas estão disponíveis de forma geral para Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 e Claude Haiku 4.5. As saídas estruturadas estão disponíveis de forma geral no Microsoft Foundry e exigem uma implantação Hosted on Anthropic.
Este recurso se qualifica para Zero Data Retention (ZDR) com retenção técnica limitada. Consulte a seção Retenção de dados para detalhes sobre o que é retido e por quê.
Migrando do beta? O parâmetro output_format foi movido para output_config.format, e os cabeçalhos beta não são mais necessários. O antigo cabeçalho beta (structured-outputs-2025-11-13) e o parâmetro output_format continuarão funcionando durante um período de transição. Consulte os exemplos de código a seguir para ver o formato atualizado da API.
Sem saídas estruturadas, Claude pode gerar respostas JSON malformadas ou entradas de ferramentas inválidas que quebram suas aplicações. Mesmo com prompts cuidadosos, você pode encontrar:
As saídas estruturadas garantem respostas em conformidade com o esquema através de decodificação restrita:
JSON.parse()As saídas JSON controlam o formato de resposta de Claude, garantindo que Claude retorne JSON válido correspondente ao seu esquema. Use saídas JSON quando você precisar:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
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,
},
}
},
)
print(response.content[0].text)Formato de resposta: JSON válido correspondente ao seu esquema em response.content[0].text
{
"name": "John Smith",
"email": "[email protected]",
"plan_interest": "Enterprise",
"demo_requested": true
}Defina seu esquema JSON
Crie um esquema JSON que descreva a estrutura que você deseja que Claude siga. O esquema usa o formato padrão JSON Schema com algumas limitações (consulte Limitações do JSON Schema).
Adicione o parâmetro output_config.format
Inclua o parâmetro output_config.format em sua solicitação de API com type: "json_schema" e sua definição de esquema.
Analise a resposta
A resposta de Claude é JSON válido correspondente ao seu esquema, retornada em response.content[0].text.
Os SDKs fornecem auxiliares que facilitam o trabalho com saídas JSON, incluindo transformação de esquema, validação automática e integração com bibliotecas de esquema populares.
O client.messages.parse() do SDK Python ainda aceita output_format como um parâmetro de conveniência e o traduz internamente para output_config.format. Outros SDKs exigem output_config diretamente. Os exemplos a seguir mostram a sintaxe dos auxiliares do SDK.
Em vez de escrever esquemas JSON brutos, você pode usar ferramentas de definição de esquema familiares em sua linguagem:
client.messages.parse()zodOutputFormat() ou literais JSON Schema tipados com jsonSchemaOutputFormat()outputConfig(Class<T>)Anthropic::BaseModel com output_config: {format: Model}StructuredOutputModel com outputConfig: ['format' => MyClass::class]Create<T>(), que deriva o esquema automaticamenteoutput_configoutput_configfrom 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-8",
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)Cada SDK fornece auxiliares que facilitam o trabalho com saídas estruturadas. Consulte as páginas individuais de cada SDK para detalhes completos.
Esquemas JSON brutos através do corpo heredoc
A CLI passa esquemas JSON brutos como um corpo heredoc YAML. Use o modificador GJSON @fromstr com --transform para analisar a string JSON retornada em content[0].text e projetar campos específicos.
ant messages create \
--transform 'content.0.text|@fromstr|{name,email}' \
--format yaml <<'YAML'
model: claude-opus-4-8
max_tokens: 1024
messages:
- role: user
content: >-
Extract contact info: John Smith, [email protected],
interested in the Pro plan
output_config:
format:
type: json_schema
schema:
type: object
properties:
name: {type: string}
email: {type: string}
plan_interest: {type: string}
required: [name, email, plan_interest]
additionalProperties: false
YAMLname: John Smith
email: [email protected]Os SDKs Python, TypeScript, Ruby e PHP transformam automaticamente esquemas com recursos não suportados. Os SDKs C# e Go aplicam as mesmas transformações quando o esquema é derivado de um tipo nativo (Create<T>() em C#; reflexão de struct ou BetaJSONSchemaOutputFormat() na API beta do Go). As etapas de transformação:
minimum, maximum, minLength, maxLength)additionalProperties: false a todos os objetosIsso significa que Claude recebe um esquema simplificado, mas seu código ainda aplica todas as restrições através de validação.
Exemplo: Um campo Pydantic com minimum: 100 se torna um inteiro simples no esquema enviado, mas o SDK atualiza a descrição para "Must be at least 100" e valida a resposta contra a restrição original.
Para impor conformidade com JSON Schema nas entradas de ferramentas com amostragem restrita por gramática, consulte Uso estrito de ferramentas.
Saídas JSON e uso estrito de ferramentas resolvem problemas diferentes e funcionam em conjunto:
Quando combinados, Claude pode chamar ferramentas com parâmetros garantidamente válidos E retornar respostas JSON estruturadas. Isso é útil para fluxos de trabalho agênticos onde você precisa tanto de chamadas de ferramentas confiáveis quanto de saídas finais estruturadas.
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Help me plan a trip to Paris departing May 15, 2026",
}
],
# Saídas JSON: formato de resposta estruturado
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 de ferramentas estrito: parâmetros de ferramenta garantidos
tools=[
{
"name": "search_flights",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"destination": {"type": "string"},
"date": {"type": "string", "format": "date"},
},
"required": ["destination", "date"],
"additionalProperties": False,
},
}
],
)
print(response)As saídas estruturadas usam amostragem restrita com artefatos de gramática compilados. Isso introduz algumas características de desempenho que você deve conhecer:
name ou description não invalida o cacheAo usar saídas estruturadas, Claude recebe automaticamente um prompt do sistema adicional explicando o formato de saída esperado. Isso significa:
output_config.format invalidará qualquer cache de prompt para aquele thread de conversaAs saídas estruturadas suportam o JSON Schema padrão com algumas limitações. Tanto as saídas JSON quanto o uso estrito de ferramentas compartilham essas limitações.
Os SDKs Python, TypeScript, Ruby e PHP podem transformar automaticamente esquemas com recursos não suportados, removendo-os e adicionando as restrições às descrições dos campos. Os SDKs C# e Go fazem o mesmo quando o esquema é derivado de um tipo nativo. Consulte Métodos específicos de cada SDK para detalhes.
Ao usar saídas estruturadas, as propriedades em objetos mantêm a ordem definida em seu esquema, com uma ressalva importante: propriedades obrigatórias aparecem primeiro, seguidas pelas propriedades opcionais.
Por exemplo, dado este esquema:
{
"type": "object",
"properties": {
"notes": { "type": "string" },
"name": { "type": "string" },
"email": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "email"],
"additionalProperties": false
}A saída ordenará as propriedades como:
name (obrigatória, na ordem do esquema)email (obrigatória, na ordem do esquema)notes (opcional, na ordem do esquema)age (opcional, na ordem do esquema)Isso significa que a saída pode se parecer com:
{
"name": "John Smith",
"email": "[email protected]",
"notes": "Interested in enterprise plan",
"age": 35
}Se a ordem das propriedades na saída for importante para sua aplicação, marque todas as propriedades como obrigatórias, ou leve em conta essa reordenação em sua lógica de análise.
Embora as saídas estruturadas garantam conformidade com o esquema na maioria dos casos, há cenários em que a saída pode não corresponder ao seu esquema:
Recusas (stop_reason: "refusal")
Claude mantém suas propriedades de segurança e utilidade mesmo ao usar saídas estruturadas. Se Claude recusar uma solicitação por motivos de segurança:
stop_reason: "refusal"Limite de tokens atingido (stop_reason: "max_tokens")
Se a resposta for cortada por atingir o limite de max_tokens:
stop_reason: "max_tokens"max_tokens maior para obter a saída estruturada completaCapitalização de valores enum
As saídas estruturadas não garantem a capitalização de valores enum e const de string: Claude pode retornar um valor que difere do seu esquema apenas na capitalização, tipicamente na primeira letra de uma palavra após um espaço. Por exemplo, dado este esquema:
{
"type": "string",
"enum": ["Conversation Topic 1", "Conversation Topic 2", "Conversation topic 3"]
}A saída pode conter "Conversation Topic 3" ("T" maiúsculo) mesmo que esse valor exato não esteja no enum. A resposta é concluída normalmente, sem erro e sem stop_reason especial. Isso se aplica tanto a saídas JSON quanto ao uso estrito de ferramentas. Compare valores enum sem diferenciar maiúsculas de minúsculas e evite valores enum que diferem apenas na capitalização.
As saídas estruturadas funcionam compilando seus esquemas JSON em uma gramática que restringe a saída de Claude. Esquemas mais complexos produzem gramáticas maiores que levam mais tempo para compilar. Para proteger contra tempos de compilação excessivos, a API impõe vários limites de complexidade.
Os seguintes limites se aplicam a todas as solicitações com output_config.format ou strict: true:
| Limite | Valor | Descrição |
|---|---|---|
| Ferramentas estritas por solicitação | 20 | Número máximo de ferramentas com strict: true. Ferramentas não estritas não contam para este limite. |
| Parâmetros opcionais | 24 | Total de parâmetros opcionais em todos os esquemas de ferramentas estritas e esquemas de saída JSON. Cada parâmetro não listado em required conta para este limite. |
| Parâmetros com tipos de união | 16 | Total de parâmetros que usam anyOf ou arrays de tipos (por exemplo, "type": ["string", "null"]) em todos os esquemas estritos. Estes são especialmente custosos porque criam custo de compilação exponencial. |
Esses limites se aplicam ao total combinado de todos os esquemas estritos em uma única solicitação. Por exemplo, se você tiver 4 ferramentas estritas com 6 parâmetros opcionais cada, você atingirá o limite de 24 parâmetros mesmo que nenhuma ferramenta individual pareça complexa.
Além dos limites explícitos na tabela anterior, há limites internos adicionais sobre o tamanho da gramática compilada. Esses limites existem porque a complexidade do esquema não se reduz a uma única dimensão: recursos como parâmetros opcionais, tipos de união, objetos aninhados e número de ferramentas interagem entre si de maneiras que podem tornar a gramática compilada desproporcionalmente grande.
Quando esses limites são excedidos, você receberá um erro 400 com a mensagem "Schema is too complex for compilation." Esses erros significam que a complexidade combinada de seus esquemas excede o que pode ser compilado de forma eficiente, mesmo que cada limite individual na tabela anterior seja satisfeito. Como uma última salvaguarda, a API também impõe um tempo limite de compilação de 180 segundos. Esquemas que passam em todas as verificações explícitas, mas produzem gramáticas compiladas muito grandes, podem atingir esse tempo limite.
Se você estiver atingindo os limites de complexidade, tente estas estratégias em ordem:
Marque apenas ferramentas críticas como estritas. Se você tiver muitas ferramentas, reserve isso para ferramentas onde violações de esquema causam problemas reais, e confie na aderência natural de Claude para ferramentas mais simples.
Reduza parâmetros opcionais. Torne os parâmetros required sempre que possível. Cada parâmetro opcional aproximadamente dobra uma parte do espaço de estados da gramática. Se um parâmetro sempre tem um padrão razoável, considere torná-lo obrigatório e fazer com que Claude forneça esse padrão explicitamente.
Simplifique estruturas aninhadas. Objetos profundamente aninhados com campos opcionais agravam a complexidade. Achate as estruturas sempre que possível.
Divida em várias solicitações. Se você tiver muitas ferramentas estritas, considere dividi-las em solicitações separadas ou subagentes.
Para problemas persistentes com esquemas válidos, entre em contato com o suporte com sua definição de esquema.
Prompts e respostas são processados com ZDR ao usar saídas estruturadas. No entanto, o próprio esquema JSON é temporariamente armazenado em cache por até 24 horas desde o último uso para fins de otimização. Nenhum dado de prompt ou resposta é retido além da resposta da API.
As saídas estruturadas são elegíveis para HIPAA, mas PHI não deve ser incluído nas definições de esquema JSON. A API compila esquemas JSON em gramáticas que são armazenadas em cache separadamente do conteúdo das mensagens, e esses esquemas em cache não recebem as mesmas proteções de PHI que prompts e respostas. Não inclua PHI em nomes de propriedades de esquema, valores enum, valores const ou expressões regulares pattern. PHI deve aparecer apenas no conteúdo das mensagens (prompts e respostas), onde é protegido sob as salvaguardas da HIPAA.
Para elegibilidade de ZDR e HIPAA em todos os recursos, consulte API e retenção de dados.
Funciona com:
output_config.format) e uso estrito de ferramentas (strict: true) juntos na mesma solicitaçãoIncompatível com:
output_config.format.Escopo da gramática: As gramáticas se aplicam apenas à saída direta de Claude, não a chamadas de uso de ferramentas, resultados de ferramentas ou tags de pensamento (ao usar Pensamento Estendido). O estado da gramática é redefinido entre seções, permitindo que Claude pense livremente enquanto ainda produz saída estruturada na resposta final.
Faça com que Claude cite suas fontes ao responder perguntas sobre documentos fornecidos.
Imponha conformidade com JSON Schema nas entradas de ferramentas de Claude com amostragem restrita por gramática.
Conecte Claude a ferramentas e APIs externas. Saiba onde as ferramentas são executadas e como funciona o loop agêntico.
Saiba mais sobre a estrutura de preços da Anthropic para modelos e recursos.
Was this page helpful?