Por que saídas estruturadas?
Agentes retornam texto livre por padrão, o que funciona para chat, mas não quando você precisa usar a saída programaticamente. Saídas estruturadas fornecem dados tipados que você pode passar diretamente para sua lógica de aplicação, banco de dados ou componentes de UI. Considere um aplicativo de receitas onde um agente pesquisa a web e traz receitas. Sem saídas estruturadas, você obtém texto livre que precisaria analisar você mesmo. Com saídas estruturadas, você define a forma que deseja e obtém dados tipados que pode usar diretamente em seu aplicativo.Sem saídas estruturadas
Sem saídas estruturadas
Com saídas estruturadas
Com saídas estruturadas
Início rápido
Para usar saídas estruturadas, defina um JSON Schema descrevendo a forma dos dados que você deseja, depois passe-o paraquery() via a opção outputFormat (TypeScript) ou output_format (Python). Quando o agente terminar, a mensagem de resultado inclui um campo structured_output com dados validados correspondendo ao seu schema.
Antes de executar os exemplos desta página, instale o Claude Agent SDK seguindo o guia de início rápido. O exemplo abaixo pede ao agente para pesquisar Anthropic e retornar o nome da empresa, ano de fundação e sede como saída estruturada.
Schemas type-safe com Zod e Pydantic
Em vez de escrever JSON Schema manualmente, você pode usar Zod (TypeScript) ou Pydantic (Python) para definir seu schema. Essas bibliotecas geram o JSON Schema para você e permitem que você analise a resposta em um objeto totalmente tipado que você pode usar em todo seu codebase com autocomplete e verificação de tipo. O exemplo abaixo define um schema para um plano de implementação de recurso com um resumo, lista de etapas (cada uma com nível de complexidade) e riscos potenciais. O agente planeja o recurso e retorna um objetoFeaturePlan tipado. Você pode então acessar propriedades como plan.summary e iterar sobre plan.steps com segurança de tipo completa.
O SDK valida schemas com JSON Schema draft-07, portanto schemas que declaram uma versão mais recente são rejeitados. Zod tem como alvo draft 2020-12 por padrão, então passe target: "draft-7" ao converter seu schema.
Configuração do formato de saída
A opçãooutputFormat (TypeScript) ou output_format (Python) aceita um objeto com:
type: Defina como"json_schema"para saídas estruturadasschema: Um objeto JSON Schema definindo sua estrutura de saída. Você pode gerar isso a partir de um schema Zod comz.toJSONSchema(schema, { target: "draft-7" })ou um modelo Pydantic com.model_json_schema()
enum, const, required, objetos aninhados e definições $ref. Para a lista completa de recursos suportados e limitações, veja Limitações de JSON Schema.
Um schema que não é um JSON Schema válido falha na execução na inicialização com um erro nomeando o problema. Antes da v2.1.205, um schema inválido era silenciosamente ignorado e o agente retornava texto não estruturado.
A palavra-chave format, como "format": "email", é aceita como uma anotação e não é aplicada pelo validador do SDK. Antes da v2.1.205, qualquer schema contendo format era tratado como inválido.
Exemplo: agente de rastreamento de TODO
Este exemplo demonstra como saídas estruturadas funcionam com uso de ferramentas em múltiplas etapas. O agente precisa encontrar comentários TODO no codebase, depois procurar informações de git blame para cada um. Ele decide autonomamente quais ferramentas usar (Grep para pesquisar, Bash para executar comandos git) e combina os resultados em uma única resposta estruturada. O schema inclui campos opcionais (author e date) já que informações de git blame podem não estar disponíveis para todos os arquivos. O agente preenche o que consegue encontrar e omite o resto.
Tratamento de erros
A geração de saída estruturada pode falhar quando o agente não consegue produzir JSON válido correspondendo ao seu esquema. Isso normalmente acontece quando o esquema é muito complexo para a tarefa, a tarefa em si é ambígua, ou o agente atinge seu limite de tentativas tentando corrigir erros de validação. Também pode acontecer sem nenhuma falha de validação: um fallback de modelo pode retratar uma saída já concluída no meio do fluxo, e se nenhuma nova tentativa a substituir, a execução termina com o mesmo erro. Verifique a listaerrors na mensagem de resultado de erro para distinguir as duas causas antes de depurar seu esquema.
Quando um erro ocorre, a mensagem de resultado tem um subtype indicando o que deu errado:
Um resultado também pode terminar com subtype
success mas sem valor structured_output, por exemplo quando a execução é concluída sem o agente produzir uma saída estruturada. Trate esse caso como uma falha também. A entrada de troubleshooting structured_output is None but the result says success cobre esse caso. O exemplo abaixo trata um resultado como bem-sucedido apenas quando o subtype é success e structured_output está presente, e trata todos os outros resultados como uma falha:
- Mantenha schemas focados. Schemas profundamente aninhados com muitos campos obrigatórios são mais difíceis de satisfazer. Comece simples e adicione complexidade conforme necessário.
- Corresponda schema à tarefa. Se a tarefa pode não ter todas as informações que seu schema requer, torne esses campos opcionais.
- Use prompts claros. Prompts ambíguos dificultam para o agente saber qual saída produzir.
Recursos relacionados
- Documentação de JSON Schema: aprenda sintaxe de JSON Schema para definir schemas complexos com objetos aninhados, arrays, enums e restrições de validação
- Saídas Estruturadas da API: use saídas estruturadas com a API Claude diretamente para solicitações de turno único sem uso de ferramentas
- Ferramentas personalizadas: dê ao seu agente ferramentas personalizadas para chamar durante a execução antes de retornar saída estruturada