Como funciona
Por padrão, um LLM responde em texto livre. Isso é ótimo para conversa, mas ruim para integração com código: você precisa parsear a resposta, lidar com variações de formato e tratar erros.
Saída estruturada (structured output) resolve isso. Você define um schema (geralmente JSON Schema) descrevendo os campos esperados, e o modelo é forçado a responder dentro desse formato. A resposta chega como JSON válido, pronto para ser usado no código.
A implementação varia: alguns provedores (OpenAI, Anthropic) oferecem parâmetros nativos (response_format ou tool use). Outros usam bibliotecas como Instructor ou Outlines que forçam o formato no lado do cliente.
Exemplo prático
Imagine extrair informações de um email de cliente. Sem saída estruturada, o modelo responde: "O cliente João Silva quer cancelar o pedido 12345, motivo: atraso na entrega." Você precisa parsear isso com regex ou outro LLM.
Com saída estruturada, você define um schema com campos {nome, acao, pedido_id, motivo} e o modelo responde diretamente: {"nome": "João Silva", "acao": "cancelar", "pedido_id": "12345", "motivo": "atraso na entrega"}. Sem parsing, sem erro de formato.
Para que serve
Serve para integrar LLMs a sistemas: APIs, bancos de dados, pipelines de dados e agentes. Elimina a etapa frágil de parsear texto livre e reduz erros de formato.
Diferença entre saída estruturada e JSON mode
JSON mode garante que a resposta seja JSON válido, mas não garante que siga um schema específico. Saída estruturada vai além: garante que os campos e tipos correspondam ao schema definido. JSON mode é o mínimo; saída estruturada é o ideal.