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. Use saídas JSON (output_format) para respostas de dados estruturados, ou uso rigoroso de ferramentas (strict: true) para validação de esquema garantida em nomes e entradas de ferramentas.
As saídas estruturadas estão atualmente disponíveis como um recurso de beta público na API do Claude para Claude Sonnet 4.5 e Claude Opus 4.1.
Para usar o recurso, defina o cabeçalho beta structured-outputs-2025-11-13.
Compartilhe feedback usando este formulário.
Sem saídas estruturadas, o 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()Escolha o modo certo para seu caso de uso:
| Use saídas JSON quando | Use uso rigoroso de ferramentas quando |
|---|---|
| Você precisa da resposta do Claude em um formato específico | Você precisa de parâmetros validados e nomes de ferramentas para chamadas de ferramentas |
| Extraindo dados de imagens ou texto | Construindo fluxos de trabalho de agentes |
| Gerando relatórios estruturados | Garantindo chamadas de função seguras em tipo |
| Formatando respostas de API | Ferramentas complexas com muitas propriedades e/ou aninhadas |
Construir sistemas de agentes confiáveis requer conformidade de esquema garantida. Parâmetros de ferramentas inválidos quebram suas funções e fluxos de trabalho. O Claude pode retornar tipos incompatíveis ("2" em vez de 2) ou campos ausentes, causando erros em tempo de execução.
O uso rigoroso de ferramentas garante parâmetros seguros em tipo:
Por exemplo, suponha que um sistema de reserva precise de passengers: int. Sem modo rigoroso, o Claude pode fornecer passengers: "two" ou passengers: "2". Com strict: true, você tem garantia de passengers: 2.
Os SDKs Python e TypeScript 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.
Para desenvolvedores Python e TypeScript, você pode usar ferramentas de definição de esquema familiares como Pydantic e Zod em vez de escrever esquemas JSON brutos.
Apenas saídas JSON
Os auxiliares de SDK (Pydantic, Zod, parse()) funcionam apenas com saídas JSON (output_format).
Esses auxiliares transformam e validam a saída do Claude para você. O uso rigoroso de ferramentas valida a entrada do Claude para suas ferramentas, que usam o campo input_schema existente em definições de ferramentas.
Para uso rigoroso de ferramentas, defina seu input_schema diretamente na definição da ferramenta com strict: true.
from pydantic import BaseModel
from anthropic import Anthropic, transform_schema
class ContactInfo(BaseModel):
name: str
email: str
plan_interest: str
demo_requested: bool
client = Anthropic()
# With .create() - requires transform_schema()
response = client.beta.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
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={
"type": "json_schema",
"schema": transform_schema(ContactInfo),
}
)
print(response.content[0].text)
# With .parse() - can pass Pydantic model directly
response = client.beta.messages.parse(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
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)Python: client.beta.messages.parse() (Recomendado)
O método parse() transforma automaticamente seu modelo Pydantic, valida a resposta e retorna um atributo parsed_output.
O método parse() está disponível em client.beta.messages, não em client.messages.
Python: auxiliar transform_schema()
Para quando você precisa transformar manualmente esquemas antes de enviar, ou quando quer modificar um esquema gerado por Pydantic. Diferentemente de client.beta.messages.parse(), que transforma esquemas fornecidos automaticamente, isso lhe dá o esquema transformado para que você possa personalizá-lo ainda mais.
Os SDKs Python e TypeScript transformam automaticamente esquemas com recursos não suportados:
minimum, maximum, minLength, maxLength)additionalProperties: false a todos os objetosIsso significa que o 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 a descrição é atualizada para "Deve ser pelo menos 100", e o SDK valida a resposta contra a restrição original.
As saídas estruturadas usam amostragem restrita com artefatos de gramática compilados. Isso introduz algumas características de desempenho a serem consideradas:
name ou description não invalida o cacheAo usar saídas estruturadas, o Claude recebe automaticamente um prompt de sistema adicional explicando o formato de saída esperado. Isso significa:
output_format invalidará qualquer cache de prompt para esse thread de conversaAs saí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 e TypeScript podem transformar automaticamente esquemas com recursos não suportados removendo-os e adicionando restrições às descrições de campo. Veja Métodos específicos do SDK para detalhes.
Embora as saídas estruturadas garantam conformidade de esquema na maioria dos casos, existem cenários onde a saída pode não corresponder ao seu esquema:
Recusas (stop_reason: "refusal")
O Claude mantém suas propriedades de segurança e utilidade mesmo ao usar saídas estruturadas. Se o Claude recusar uma solicitação por razões 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 mais alto para obter a saída estruturada completaSe seu esquema usar recursos não suportados ou for muito complexo, você receberá um erro 400:
"Muitas definições recursivas no esquema"
"Esquema é muito complexo"
strict: truePara problemas persistentes com esquemas válidos, entre em contato com o suporte com sua definição de esquema.
Funciona com:
output_format) e uso rigoroso de ferramentas (strict: true) juntos na mesma solicitaçãoIncompatível com:
output_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 Pensamento Estendido). O estado da gramática é redefinido entre seções, permitindo que o Claude pense livremente enquanto ainda produz saída estruturada na resposta final.