Skip to main content
PromptQuorum
Início/Prompt Engineering/Melhores ferramentas para Structured Output e JSON Mode (2026)
Tools & Platforms

Melhores ferramentas para Structured Output e JSON Mode (2026)

·12 min de leitura·Por Hans Kuepper · Fundador do PromptQuorum, ferramenta de despacho multi-modelo de IA · PromptQuorum

Sete ferramentas dominam o structured output em 2026: Instructor para extração Pydantic, Outlines para constrained decoding, Pydantic AI para agentes type-safe, BAML para arquivos de prompt schema-first, LangChain para APIs unificadas, Marvin para extração baseada em tarefas e PromptQuorum para testes multi-modelo. Cada uma resolve um gargalo diferente do fluxo de trabalho.

Escolha conforme onde seus modelos executam e em quais linguagens seu time entrega: Instructor e Pydantic AI para fluxos Python com tentativas e type safety; Outlines para conformidade garantida do esquema em modelos locais; BAML quando o mesmo esquema precisa atender serviços em Python, TypeScript e Go; LangChain para times que já usam chains ou agentes; Marvin para chamadas rápidas de extract e classify; PromptQuorum para testes de consistência no GPT, Claude e Gemini antes da produção.

Melhores ferramentas para Structured Output e JSON Mode (2026)

Pontos principais

  • Instructor é a opção Python mais popular — esquemas Pydantic, tentativas automáticas e ports oficiais para TypeScript, Ruby, Go, Elixir e Rust
  • Outlines garante conformidade do esquema em modelos locais via constrained decoding — sem risco de alucinação estrutural
  • Pydantic AI adiciona type safety a conversas de agentes multi-turn e recua de structured output nativo para chamadas de ferramentas e para JSON por prompt
  • BAML coloca o esquema e o prompt em um arquivo .baml versionado e gera clientes tipados, um contrato único para times poliglotas
  • with_structured_output() do LangChain unifica o structured output nas APIs da OpenAI, Anthropic e Google
  • Marvin 3.x se apoia no Pydantic AI e reduz a extração a uma única chamada extract ou classify
  • PromptQuorum testa a consistência do structured output em todos os modelos antes da implantação em produção

💡 TL;DR

Use Instructor para extração Python com tentativas. Use Outlines para conformidade garantida do esquema em modelos locais. Use Pydantic AI para agentes multi-turn type-safe. Use BAML quando serviços em Python, TypeScript e Go precisarem compartilhar um esquema. Use LangChain se já estiver nesse ecossistema. Use Marvin para chamadas de uma linha de extract e classify. Use PromptQuorum para testar a consistência do structured output em todos os modelos antes da produção.

Fatos rápidos

  • ·Instructor tem licença MIT e oferece seis implementações oficiais: Python, TypeScript, Ruby, Go, Elixir e Rust
  • ·Outlines 1.x restringe tokens no momento da geração e agora também comanda APIs hospedadas, não apenas backends locais
  • ·Pydantic AI oferece três modos de saída: structured output nativo, chamadas de ferramentas e JSON por prompt
  • ·BAML compila um arquivo de esquema .baml em clientes tipados e repara saídas malformadas em vez de tentar de novo
  • ·LangChain 1.x lê o suporte nativo a structured output de cada provedor a partir do perfil do modelo
  • ·Marvin 3.x é construído sobre o Pydantic AI e expõe extract, cast, classify e generate
  • ·PromptQuorum testa o mesmo prompt em 25+ modelos para consistência

Problemas que cada ferramenta resolve

📍 In One Sentence

Ferramentas de saída estruturada resolvem três problemas distintos — impor um schema no momento da geração, validar o resultado depois e reparar saídas malformadas — e a maioria dos sistemas só precisa dos dois primeiros.

💬 In Plain Terms

Não escolha por lista de recursos. Pergunte qual falha você realmente tem: o modelo ignora o seu formato, ou respeita o formato mas os valores estão errados, ou devolve um JSON que nem dá para parsear. Cada caso pede uma resposta diferente.

O structured output requer resolver três problemas interdependentes: definição de esquema, conformidade na API e validação. Diferentes ferramentas atacam esses problemas de formas diferentes. Instructor gerencia os três em Python com tentativas. Outlines elimina a etapa de validação via constrained decoding. Pydantic AI adiciona type safety para agentes. BAML move o esquema para um arquivo compilado e repara saídas imperfeitas. LangChain envolve as APIs do fornecedor. Marvin prioriza a velocidade do desenvolvedor. PromptQuorum valida a consistência entre todos os modelos.

Problema
Instructor
Outlines
Pydantic AI
BAML
LangChain
Marvin
Definir esquemaModelos PydanticJSON Schema / GBNFModelos PydanticArquivos de classe .bamlDefinições de ferramentaType hints Python
Forçar na chamada APITentativa + validaçãoRestrição em nível de tokenNativo / ferramenta / promptPrompt gerado + parserModo JSON do fornecedorTipos de saída do Pydantic AI
Validar respostaAutomáticoGarantido na geraçãoVerificado por tipoSchema-aligned parsingManualAutomático

Instructor: extração Pydantic

Instructor é a biblioteca de structured output mais adotada. Envolve qualquer API LLM — OpenAI GPT-5.6, Claude Opus 5, Gemini 3.1 Pro, Ollama, vLLM — e retorna modelos Pydantic validados em vez de texto simples. Instructor gerencia tentativas automaticamente quando a validação falha, tornando-o adequado para produção sem tratamento adicional de erros.

  • Funciona com todos os principais provedores (OpenAI, Anthropic, Google, Groq, Mistral) e modelos locais via Ollama ou vLLM
  • Esquemas Pydantic v2: type hints, regras de validação, descrições de docstring integradas no esquema
  • Tentativa automática com backoff em falha de validação — sem necessidade de tratamento manual de erros
  • Seis implementações oficiais: Python, TypeScript, Ruby, Go, Elixir e Rust
  • Open source com licença MIT, mantido ativamente, atualmente na linha 1.x
  • Preços: Gratuito (sem custo adicional além das chamadas à API LLM)
python
import instructor
from pydantic import BaseModel
from openai import OpenAI

class User(BaseModel):
    name: str
    age: int

client = instructor.from_openai(OpenAI())
user = client.chat.completions.create(
    model="gpt-5.6",
    response_model=User,
    messages=[{"role": "user", "content": "Extract: John is 25 years old"}]
)
# user.name == "John", user.age == 25

Outlines: constrained decoding

Outlines força a conformidade do esquema no momento da geração de tokens via constrained decoding. Em vez de gerar tokens e depois validar, Outlines limita os tokens válidos em cada etapa para corresponder ao seu esquema. Isso garante que a saída seja analisada contra o seu esquema sem risco de alucinação estrutural, e é justamente o que faz dele a escolha padrão para modelos locais.

  • Backends locais: transformers, llama.cpp, MLX e qualquer modelo do Hugging Face
  • Backends de servidor: vLLM, Ollama e NVIDIA NIM
  • APIs hospedadas também são suportadas (OpenAI, Gemini), então o mesmo código roda local e na nuvem
  • Esquemas como modelos Pydantic, JSON Schema, padrões regex, opções literais ou gramáticas livres de contexto
  • Conformidade estrutural garantida — sem necessidade de validação pós-geração ou tentativas
  • Open source Apache 2.0, atualmente na linha 1.x, com um núcleo em Rust (outlines-core) para desempenho

Pydantic AI: agentes type-safe

Pydantic AI é o framework de agentes do time por trás do próprio Pydantic. Ele combina modelos Pydantic com suporte de primeira classe para conversas de agentes multi-turn, adicionando type safety completo a loops de agentes enquanto força structured output em cada turno. Já está na linha 2.x e roda em produção, não é um experimento.

  • Sistema de tipos Pydantic v2 — suporte completo de IDE e verificação estática do que o agente retorna
  • Três modos de saída: structured output nativo do provedor, chamadas de ferramentas e JSON por prompt como fallback
  • Design async-first para aplicações de alto desempenho
  • Suporta OpenAI, Anthropic, Google, Bedrock, Azure AI Foundry, Groq, Mistral, xAI e Ollama
  • Integrações de execução durável (Temporal, DBOS, Prefect) para que agentes de longa duração sobrevivam a reinícios
  • Chamadas de ferramentas integradas — defina ferramentas como funções Python com type hints
  • Licença MIT e gratuito (sem custo adicional além das chamadas à API LLM)

BAML: arquivos de prompt schema-first

BAML adota a abordagem oposta às bibliotecas Python: o esquema e o prompt ficam em um arquivo .baml versionado, e um compilador gera um cliente tipado para a sua linguagem. O parser alinhado ao esquema repara os erros que os modelos realmente cometem — blocos markdown ao redor do JSON, vírgulas sobrando, chaves sem aspas, texto de raciocínio antes do objeto — em vez de lançar um erro e queimar uma tentativa.

  • Esquema e prompt convivem em arquivos .baml, versionados e revisados como qualquer outro código-fonte
  • Gera clientes tipados nativamente para Python e TypeScript, além de Go, Java, Ruby, PHP, Rust e C# via clientes OpenAPI gerados
  • O schema-aligned parsing (SAP) recupera objetos válidos de saídas imperfeitas em vez de falhar
  • Funciona com modelos que não têm nenhum tool-use ou modo JSON nativo
  • Streaming com tipos — objetos parciais chegam tipados, então você renderiza campos enquanto eles são gerados
  • Open source Apache 2.0; o produto hospedado de observabilidade Boundary Studio é uma oferta paga à parte

LangChain: APIs unificadas

LangChain expõe with_structured_output() em todos os principais modelos de chat, unificando o structured output no OpenAI, Anthropic, Google e modelos locais por trás de um único método. Desde a reescrita 1.x ele lê a capacidade nativa de structured output de cada provedor a partir do perfil do modelo em vez de fixá-la em código, e agentes criados com create_agent aceitam um response_format diretamente.

  • API unificada: um método .with_structured_output() funciona em todos os provedores
  • Converte automaticamente as definições de ferramentas do LangChain para formatos de esquema específicos do fornecedor
  • Agentes criados com create_agent aceitam um response_format para a resposta final
  • O suporte nativo a structured output é lido por modelo a partir dos dados de perfil do provedor na linha 1.1+
  • Suporta modelos Pydantic, TypedDict, dataclasses e JSON Schema bruto
  • Ideal para times já investidos em LangChain ou LangGraph

Marvin: extração baseada em tarefas

Marvin 3.x é o caminho mais curto de texto não estruturado para um objeto Python tipado. Ele é construído sobre o Pydantic AI, então você tem a mesma cobertura de provedores e validação com muito menos código. Atenção: a API baseada em decoradores do Marvin 2 não existe mais — @marvin.fn foi removido na 3.0 em favor de helpers de nível superior e um motor de agentes centrado em tarefas.

  • Helpers de uma linha: marvin.extract, marvin.cast, marvin.classify e marvin.generate
  • Construído sobre o Pydantic AI, então o suporte a provedores e a validação de saída são herdados, não reimplementados
  • Motor centrado em tarefas para trabalho multi-etapa: marvin.run, marvin.Task, marvin.Agent, marvin.Thread
  • Type hints Python viram o esquema — mínimo de boilerplate para extração e classificação
  • Nota de migração: o decorador @marvin.fn do Marvin 2 não existe mais; essas chamadas precisam ser reescritas
  • Open source Apache 2.0, mantido pela Prefect, gratuito

PromptQuorum: testes multi-modelo

PromptQuorum não é uma biblioteca de structured output em si, mas uma plataforma de testes para validar a consistência do structured output entre modelos. Execute o mesmo prompt simultaneamente contra GPT-5.6, Claude Opus 5, Gemini 3.1 Pro e mais 20+ modelos. Meça a conformidade do esquema, a latência e o custo por modelo.

  • Despacho multi-modelo em uma única chamada de API — teste um prompt contra 25+ modelos
  • Métricas de conformidade de structured output — taxa de aprovação, latência, custo por modelo
  • Identifica modelos que alucinam com seu esquema — evite implantar em modelos pouco confiáveis
  • Modo de consenso — encontre acordos entre execuções de modelos independentes
  • Funciona com Instructor, Outlines, Pydantic AI, BAML, LangChain ou APIs LLM brutas
  • Tier gratuito disponível, preços enterprise para testes de alto volume

Comparativo lado a lado

Ferramenta
Ideal para
Formato de esquema
Linguagem
Modelos locais
Licença
Curva de aprendizado
InstructorAPIs Python + tentativasModelos PydanticPython, TS, Ruby, Go, Elixir, RustSim (Ollama, vLLM)MIT, gratuitoBaixa
OutlinesImplantação de modelos locaisPydantic, JSON Schema, regex, CFGPythonSim (nativo)Apache 2.0, gratuitoMédia
Pydantic AIAgentes type-safeModelos PydanticPythonSim (Ollama)MIT, gratuitoBaixa
BAMLTimes poliglotas, modelos instáveisArquivos de classe .bamlPython, TS + 6 via OpenAPISim (compatível com OpenAI)Apache 2.0, observabilidade pagaMédia
LangChainChains + agentesDefinições de ferramentaPython, JSSimMIT, gratuitoMédia
MarvinExtract e classify rápidosType hintsPythonSimApache 2.0, gratuitoMuito baixa
PromptQuorumTestes multi-modeloAPI-agnósticoAPI-firstVia proxy OpenAITier gratuito + enterpriseBaixa

Escolhendo a ferramenta certa

Comece respondendo três perguntas: (1) Em quais linguagens estão escritos os serviços que realmente chamam o modelo? (2) Você precisa de suporte a modelos locais? (3) Qual é a complexidade de validação que você tem?

  • Use Instructor se: você constrói APIs Python e precisa de tentativas automáticas em falha de validação. Melhor opção de uso geral.
  • Use Outlines se: você implanta modelos locais (llama.cpp, vLLM, MLX) e quer conformidade garantida do esquema no momento da geração.
  • Use Pydantic AI se: você constrói fluxos de agentes multi-turn com type safety em todas as etapas ou precisa de execução durável.
  • Use BAML se: serviços em Python, TypeScript e Go precisam compartilhar um esquema, ou seu modelo não tem um modo JSON nativo confiável.
  • Use LangChain se: você já usa LangChain ou LangGraph — with_structured_output() é a adição mais simples.
  • Use Marvin se: você quer uma única chamada extract ou classify e não precisa de lógica de validação própria.
  • Use PromptQuorum se: você precisa testar a consistência do structured output no GPT, Claude e Gemini antes da produção.

Adicionando structured output passo a passo

  1. 1
    Defina seu esquema de saída — Crie um modelo Pydantic (Python), uma classe .baml (BAML), uma interface TypeScript ou JSON Schema descrevendo os campos, tipos e restrições que você quer que o LLM retorne.
  2. 2
    Escolha uma biblioteca — Instructor para APIs Python, Outlines para modelos locais, Pydantic AI para agentes, BAML para times poliglotas, LangChain se já estiver em uso, Marvin para extração de uma linha.
  3. 3
    Instale e envolva sua chamada LLM — `pip install instructor` (Python), depois passe seu esquema para a chamada de API. Instructor gerencia validação e tentativas.
  4. 4
    Teste com PromptQuorum — Implante no PromptQuorum e execute seu prompt contra GPT, Claude e Gemini. Meça a conformidade do esquema por modelo.
  5. 5
    Refine o esquema conforme falhas — Se um modelo falha na validação, adicione exemplos ao seu prompt ou ajuste as restrições do esquema. Itere até que todos os modelos passem.

Erros comuns de structured output

Tratar qualquer modo JSON como garantia de esquema

Why it hurts: O modo JSON simples (response_format json_object, controle JSON da Anthropic) garante apenas que a resposta é JSON válido, não que ela corresponde aos seus campos e tipos. Modos de esquema estrito vão além e garantem o formato, mas nenhum garante que os valores estejam corretos: um objeto bem formado ainda pode conter um preço inventado ou uma data alucinada.

Fix: Adicione validação por cima de qualquer forma: Instructor, Outlines, Pydantic AI ou BAML. Regras de negócio pertencem a validadores Pydantic, não apenas ao esquema. Teste com PromptQuorum para detectar falhas de conformidade por modelo.

Projetar esquemas muito rígidos

Why it hurts: Esquemas muito restritos (listas de enum pequenas, padrões regex muito específicos) fazem os LLMs falharem na validação com frequência. Altas contagens de tentativas desperdiçam tokens e dinheiro.

Fix: Use PromptQuorum para testar a rigidez do esquema entre modelos. Relaxe as restrições para alcançar 95%+ de conformidade. Use campos opcionais em vez de obrigatórios quando possível.

Não testar diferenças entre modelos locais e de API

Why it hurts: Outlines no llama.cpp se comporta de forma diferente do Instructor no GPT-5.6. As taxas de conformidade do esquema diferem por modelo. Construir apenas para um modelo de fronteira via API e depois implantar em um modelo local pequeno causa falhas em produção.

Fix: Teste todos os backends de modelos previstos cedo. Use PromptQuorum para executar o mesmo prompt em modelos locais (vLLM, Ollama) e hospedados (OpenAI, Anthropic, Google).

Ignorar o impacto na latência e custo de tokens

Why it hurts: O structured output com tentativas custa mais tokens. Instructor tenta novamente em caso de falha. O constrained decoding do Outlines adiciona sobrecarga por token em relação à geração livre. Não medir o custo por modelo.

Fix: Use o rastreamento de custos do PromptQuorum. Compare latência entre modelos. Para fluxos sensíveis ao orçamento, prefira Outlines ou BAML (sem laço de tentativas). Para precisão em esquemas flexíveis, aceite o custo de tentativas do Instructor.

Misturar métodos de validação (sem consistência)

Why it hurts: Algumas requisições usam Instructor, outras parsing JSON bruto. Alguns modelos validados, outros não. Isso leva a erros inconsistentes em produção.

Fix: Padronize em uma abordagem de validação por base de código. Todas as requisições usam Instructor, ou todas usam Outlines. A consistência reduz o tempo de depuração em 10x.

Copiar tutoriais escritos contra uma API já substituída

Why it hurts: Bibliotecas de structured output evoluem rápido. O Marvin removeu o decorador @marvin.fn na 3.0, o LangChain reorganizou a documentação na reescrita 1.x e o Outlines mudou a superfície de imports na 1.0. Código copiado de um tutorial antigo já falha na instalação.

Fix: Fixe a versão maior contra a qual você desenvolve e consulte a documentação atual para a superfície da API. Prefira o README oficial do repositório a posts de blog, e revise novamente a cada upgrade de versão maior.

O que é structured output em LLMs?

O structured output restringe as respostas do LLM a um esquema específico — formato JSON, campos definidos, restrições de tipo. Em vez de respostas em texto livre, o structured output retorna dados que seu código pode analisar e validar diretamente sem tratamento de erros.

Qual ferramenta é melhor para desenvolvedores Python?

Instructor é a opção Python mais popular. Usa modelos Pydantic para definir esquemas, gerencia automaticamente tentativas e validação, e suporta todas as principais APIs LLM além de modelos locais via Ollama ou vLLM. Pydantic AI encaixa melhor se você também quiser conversas multi-turn type-safe com agentes, e Marvin é a opção mais rápida se você só precisa de uma chamada extract ou classify de uma linha.

Posso usar structured output com modelos locais como Llama?

Sim. Outlines se especializa em constrained decoding para modelos locais — funciona com transformers, llama.cpp, MLX, vLLM e Ollama, e garante no momento da geração que a saída seja analisada contra o seu esquema. Instructor e Pydantic AI também suportam Ollama e vLLM se você os executar como API, e o BAML funciona contra qualquer endpoint compatível com OpenAI.

Qual é a diferença entre Instructor e Marvin?

Instructor envolve o seu próprio cliente LLM e retorna modelos Pydantic validados com tentativas automáticas, então você controla a chamada. Marvin 3.x é construído sobre o Pydantic AI e oferece helpers de uma linha: marvin.extract, marvin.cast, marvin.classify. Instructor é mais explícito e melhor para validação complexa; Marvin é mais conciso para extração simples. Note que o decorador @marvin.fn do Marvin 2 foi removido no Marvin 3.

LangChain suporta structured output?

Sim. LangChain expõe with_structured_output() no ChatOpenAI, ChatAnthropic, ChatGoogleGenerativeAI e nas demais classes de modelos de chat, e agentes construídos com create_agent aceitam um response_format. Desde a linha 1.x ele lê o suporte nativo a structured output de cada provedor a partir dos dados de perfil do modelo em vez de fixá-lo em código. Use-o se já utiliza LangChain ou LangGraph e quer adicionar conformidade do esquema sem mudar de biblioteca.

Como testo se o structured output é confiável?

Use PromptQuorum para executar o mesmo prompt em múltiplos modelos e medir a conformidade do esquema. Diferentes modelos — GPT-5.6, Claude Opus 5, Gemini 3.1 Pro — têm níveis diferentes de confiabilidade, e modelos locais pequenos variam ainda mais. Teste antes de implantar em produção e valide localmente com Instructor ou Pydantic.

O que significa "constrained decoding"?

O constrained decoding limita a geração de tokens a apenas valores válidos segundo seu esquema. Outlines faz isso calculando o conjunto de próximos tokens válidos em cada etapa. Isso garante que a saída seja analisada contra o seu esquema sem validação pós-geração ou tentativas, o que o torna mais confiável que o modo JSON simples em nível de API. Ele restringe a estrutura, não a verdade: os campos estarão certos, os valores ainda precisam ser conferidos.

O que é BAML e quando devo usá-lo em vez do Instructor?

BAML é uma linguagem schema-first: você escreve o esquema e o prompt em um arquivo .baml e compila um cliente tipado para a sua linguagem. Escolha-o em vez do Instructor quando mais de uma linguagem chama o mesmo prompt — um worker em Python e um frontend em TypeScript compartilhando um contrato — ou quando seu modelo devolve JSON quase válido, porque o parser alinhado ao esquema do BAML repara blocos markdown, vírgulas sobrando e texto de raciocínio inicial em vez de queimar uma tentativa. Fique com o Instructor se seu stack é só Python e você quer manter os esquemas como código Pydantic comum.

Posso usar structured output sem nenhuma biblioteca?

Tecnicamente sim — você pode fazer o modelo retornar JSON e depois analisá-lo você mesmo. Mas o parsing vai falhar nas saídas malformadas que os modelos ainda produzem, e nada força seus nomes de campo ou tipos. As sete ferramentas resolvem isso validando com tentativas (Instructor, Marvin), forçando no tempo de decodificação (Outlines), reparando a saída na análise (BAML) ou envolvendo APIs do fornecedor (LangChain, Pydantic AI).

Qual ferramenta tem a melhor documentação?

LangChain e Pydantic AI têm a documentação mais completa devido ao seu suporte corporativo. A documentação do BAML é incomumente boa para um projeto jovem porque a linguagem precisa ser ensinada. Instructor tem excelentes tutoriais e exemplos apesar de ser mantido pela comunidade. A documentação do Outlines é técnica mas abrangente. A do Marvin é concisa — consulte especificamente as páginas 3.x, já que material antigo do Marvin 2 ainda circula.

Preciso das sete ferramentas ou apenas de uma?

Comece com uma. Desenvolvedores Python devem experimentar Instructor ou Pydantic AI. Times com modelos locais devem experimentar Outlines. Times poliglotas devem experimentar BAML. Usuários do LangChain devem experimentar with_structured_output(). Use PromptQuorum para validar a consistência entre todos os modelos. A maioria das equipes usa uma ferramenta mais PromptQuorum para testes.

Fontes

Aplique estas técnicas com um LLM local ou suas próprias chaves de API — o PromptQuorum funciona com qualquer backend.

Experimente o PromptQuorum gratuitamente →

← Voltar ao Prompt Engineering