Prompt de extração para JSON com esquema, validação e novas tentativas
Crie um pipeline fiável para extrair texto livre para JSON com um LLM: JSON Schema, prompt com regras para null, exemplos, código de validação com novas tentativas e casos de teste. Pensado para ChatGPT, Claude e Gemini. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Avançado · Código · Pendente de revisão editorial
Prompt
Atua como engenheiro de LLM especializado em extração de dados estruturados para sistemas em produção.
Contexto:
- Tipo de documento de entrada: {{documento}}
- Campos a extrair (nome, tipo, obrigatório ou não): {{campos}}
- Linguagem e biblioteca de validação: {{linguagem}}
- Exemplo real de entrada (anonimizado):
```
{{exemplo}}
```
Entregáveis:
1. JSON Schema completo com tipos, formatos (datas ISO 8601, montantes como número com a moeda num campo separado), enumerações e campos obrigatórios.
2. Prompt de sistema para a extração com regras explícitas: devolver apenas JSON válido, usar null quando um dado não aparecer (nunca o deduzir), não normalizar nomes próprios, como tratar vários valores candidatos e texto ambíguo.
3. Dois exemplos de entrada e saída (few-shot), um deles com campos em falta.
4. Código em {{linguagem}} que chame o modelo, ative a saída estruturada ou o modo JSON se o fornecedor o oferecer, valide contra o esquema e tente de novo no máximo duas vezes enviando o erro de validação.
5. Um campo opcional de confiança ou de evidência (citação literal do texto) para cada valor e quando vale a pena usá-lo.
6. Dez casos de teste: documentos incompletos, formatos de data diferentes, línguas misturadas, valores contraditórios e instruções maliciosas dentro do texto.
7. Como medir a qualidade: exatidão por campo face a um conjunto anotado à mão.
Restrições:
- Não inventes parâmetros de API: se uma opção depender do fornecedor, marca como [VERIFICAR na documentação oficial].
- O modelo nunca deve preencher um campo sem evidência no texto.
- Se os campos forem ambíguos ou faltar o exemplo, pergunta-me primeiro.
Formato: secções numeradas com blocos de código JSON e {{linguagem}}.Como utilizar
Cola um documento real anonimizado e define bem cada campo. Antes de processar em lote, corre os casos de teste e compara com 20 a 50 documentos anotados à mão.
Exemplo de utilização
Documento: faturas de fornecedores em PDF convertidas em texto · Campos: número, data, NIF do emitente, base tributável, IVA, total · Linguagem: Python com Pydantic.
Exemplo de resultado
4. Código com validação e novas tentativas
from enum import Enum
from pydantic import BaseModel, Field, ValidationError
class TipoObra(str, Enum): # valores definitivos: [COMPLETAR]
casa_de_banho = "casa_de_banho"
cozinha = "cozinha"
integral = "integral"
outra = "outra"
class Pedido(BaseModel):
nome: str
telefone: str | None = None
cidade: str | None = None
tipo_obra: TipoObra | None = None
orcamento_max_eur: float | None = Field(default=None, ge=0)
def extrair(texto: str, max_tentativas: int = 2) -> Pedido:
mensagens = [{"role": "user", "content": texto}]
for _ in range(max_tentativas + 1):
# Modo JSON / saída estruturada consoante o fornecedor: [VERIFICAR na documentação oficial]
bruto = chamar_modelo(SYSTEM_PROMPT, mensagens)
try:
return Pedido.model_validate_json(bruto)
except ValidationError as erro:
mensagens += [
{"role": "assistant", "content": bruto},
{"role": "user", "content": f"JSON inválido: {erro}. Devolve apenas o JSON corrigido."},
]
raise ValueError("O modelo não devolveu um JSON válido")
Saída esperada para o teu exemplo:
{"nome": "Inês", "telefone": "910 000 000", "cidade": "Braga",
"tipo_obra": "casa_de_banho", "orcamento_max_eur": 6000}
«Ronda os 6000» é um valor aproximado: com o campo opcional de evidência guardaríamos a citação literal, para que uma pessoa decida se é mesmo um máximo…
Dados-chave
- Categoria
- Programação e desenvolvimento · Agentes de IA
- Tipo de resultado
- Código
- Nível
- Avançado
- Pensado para
- ChatGPT, Claude e Gemini
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Tipo de documento, Campos a extrair, Linguagem e validação e Exemplo de entrada
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
Porquê pedir null em vez de deixar o modelo deduzir o valor?
Porque um valor inventado com ar correto é mais perigoso do que um campo vazio. Com null consegues detetar documentos incompletos e enviá-los para revisão humana.
O modo JSON do fornecedor chega?
Garante um JSON bem formado, mas não que os valores estejam certos nem que cumpram as tuas regras de negócio. Mantém a validação com esquema e os casos de teste.
Para que serve este prompt?
Crie um pipeline fiável para extrair texto livre para JSON com um LLM: JSON Schema, prompt com regras para null, exemplos, código de validação com novas tentativas e casos de teste.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude e Gemini. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Tipo de documento, Campos a extrair, Linguagem e validação e Exemplo de entrada). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.