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

Pensado para:

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.

Prompts relacionados