Was this page helpful?
As saídas estruturadas restringem as respostas do Claude a 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 do Claude em um formato JSON específicostrict: true): Garanta validação de esquema em nomes e entradas de ferramentasVocê pode usar esses recursos independentemente ou juntos na mesma solicitação.
As saídas estruturadas estão geralmente disponíveis na API Claude para Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, 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 geralmente disponíveis para Claude Mythos Preview, Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 e Claude Haiku 4.5; Claude Opus 4.7 está disponível através da visualização de pesquisa do Amazon Bedrock. As saídas estruturadas estão em beta no Microsoft Foundry. As saídas estruturadas não são suportadas no Vertex AI do Google Cloud para Claude Mythos Preview.
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.
Migrando da versão 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 por um período de transição. Veja exemplos de código abaixo para a forma de API atualizada.
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 do Claude, garantindo que Claude retorne JSON válido correspondente ao seu esquema. Use saídas JSON quando você precisar:
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 de JSON Schema com algumas limitações (veja limitações de 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 do Claude é JSON válido correspondente ao seu esquema, retornado 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 para output_config.format internamente. Outros SDKs requerem output_config diretamente. Os exemplos abaixo mostram a sintaxe auxiliar 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 digitados com jsonSchemaOutputFormat()outputConfig(Class<T>)Anthropic::BaseModel com output_config: {format: Model}StructuredOutputModel com outputConfig: ['format' => MyClass::class]Cada SDK fornece auxiliares que facilitam o trabalho com saídas estruturadas. Consulte as páginas individuais do SDK para obter detalhes completos.
Os SDKs Python, TypeScript, Ruby e PHP transformam automaticamente esquemas com recursos não suportados:
minimum, maximum, minLength, maxLength)additionalProperties: false a todos os objetosIsso significa que Claude recebe um esquema simplificado, mas seu código ainda impõe todas as restrições através da 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 "Deve ser pelo menos 100" e valida a resposta contra a restrição original.
Para impor conformidade com JSON Schema em entradas de ferramentas com amostragem restrita por gramática, consulte Uso rigoroso de ferramentas.
Saídas JSON e uso rigoroso de ferramentas resolvem problemas diferentes e funcionam juntos:
Quando combinados, Claude pode chamar ferramentas com parâmetros garantidamente válidos E retornar respostas JSON estruturadas. Isso é útil para fluxos de trabalho de agentes onde você precisa de chamadas de ferramentas confiáveis e saídas finais estruturadas.
Saídas estruturadas usam amostragem restrita com artefatos de gramática compilada. Isso introduz algumas características de desempenho a serem consideradas:
name ou description não invalida o cacheAo usar saídas estruturadas, Claude recebe automaticamente um prompt de sistema adicional explicando o formato de saída esperado. Isso significa:
output_config.format invalidará qualquer cache de prompt para esse thread de conversaSaídas estruturadas suportam JSON Schema padrão com algumas limitações. Tanto saídas JSON quanto uso rigoroso 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 restrições às descrições de campo. Consulte métodos específicos do SDK para detalhes.
Ao usar saídas estruturadas, as propriedades em objetos mantêm sua ordenação definida do seu esquema, com uma ressalva importante: as 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ório, em ordem de esquema)email (obrigatório, em ordem de esquema)notes (opcional, em ordem de esquema)age (opcional, em ordem de esquema)Isso significa que a saída pode parecer:
{
"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 saídas estruturadas garantam conformidade com esquema na maioria dos casos, existem cenários onde 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 token atingido (stop_reason: "max_tokens")
Se a resposta for cortada devido ao atingimento do limite max_tokens:
stop_reason: "max_tokens"max_tokens maior para obter a saída estruturada completaSaídas estruturadas funcionam compilando seus esquemas JSON em uma gramática que restringe a saída do 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 rigorosas por solicitação | 20 | Número máximo de ferramentas com strict: true. Ferramentas não rigorosas não contam para este limite. |
| Parâmetros opcionais | 24 | Total de parâmetros opcionais em todos os esquemas de ferramentas rigorosas 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 tipo (por exemplo, "type": ["string", "null"]) em todos os esquemas rigorosos. Estes são especialmente caros porque criam custo de compilação exponencial. |
Esses limites se aplicam ao total combinado em todos os esquemas rigorosos em uma única solicitação. Por exemplo, se você tiver 4 ferramentas rigorosas 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 acima, existem limites internos adicionais no 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 uns com os outros 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 eficientemente, mesmo que cada limite individual acima seja satisfeito. Como um último recurso, 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 este tempo limite.
Se você está atingindo limites de complexidade, tente essas estratégias em ordem:
Marque apenas ferramentas críticas como rigorosas. Se você tiver muitas ferramentas, reserve para ferramentas onde violações de esquema causam problemas reais, e confie na aderência natural do Claude para ferramentas mais simples.
Reduza parâmetros opcionais. Torne os parâmetros required quando possível. Cada parâmetro opcional aproximadamente dobra uma porção do espaço de estado da gramática. Se um parâmetro sempre tem um padrão razoável, considere torná-lo obrigatório e ter Claude fornecer esse padrão explicitamente.
Simplifique estruturas aninhadas. Objetos profundamente aninhados com campos opcionais compõem a complexidade. Achate estruturas quando possível.
Divida em múltiplas solicitações. Se você tiver muitas ferramentas rigorosas, considere dividi-las em solicitações separadas ou sub-agentes.
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 esquema JSON em si é 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.
Saídas estruturadas são elegíveis para HIPAA, mas PHI não deve ser incluído em definições de esquema JSON. A API compila esquemas JSON em gramáticas que são armazenadas em cache separadamente do conteúdo da mensagem, e essas gramáticas armazenadas 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 da mensagem (prompts e respostas), onde é protegido sob salvaguardas 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 rigoroso de ferramentas (strict: true) juntos na mesma solicitaçãoIncompatível com:
output_config.format.Escopo de gramática: Gramáticas se aplicam apenas à saída direta do Claude, não a chamadas de uso de ferramentas, resultados de ferramentas ou tags de pensamento (ao usar Extended Thinking). O estado da gramática é redefinido entre seções, permitindo que Claude pense livremente enquanto ainda produz saída estruturada na resposta final.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
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)output_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-7",
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)response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Help me plan a trip to Paris departing May 15, 2026",
}
],
# 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,
},
}
],
)
print(response)