Estruturação com LLMs
Versão notebook (rodável no Colab):
examples/notebooks/estruturacao.ipynb.
labdados.estruturacao usa um LLM para extrair campos estruturados (JSON) de cada documento. Útil para transformar acórdãos, sentenças, ou ementas em colunas de uma planilha.
NotaEm desenvolvimento
A estruturação ainda está em fase inicial. Em breve será integrada ao pacote bdcdo/dataframeit, que trará uma API mais madura para extração estruturada em escala. A superfície atual pode mudar.
Receita 1 — Extrair campos de uma planilha de ementas
import os, labdados
schema = {
"type": "object",
"properties": {
"tribunal": {"type": "string", "description": "Sigla do tribunal"},
"ano": {"type": "integer"},
"tema": {"type": "string", "description": "Direito do consumidor, família..."},
"procedente": {
"type": "boolean",
"description": "Se o pedido principal foi julgado procedente",
},
},
"required": ["tribunal", "ano", "tema"],
}
labdados.estruturacao(
arquivos="ementas.csv",
coluna_texto="ementa", # qual coluna do CSV contém o texto
schema=schema,
prompt_sistema=(
"Você está extraindo metadados de ementas de acórdãos brasileiros. "
"Se o tema não for claro, use 'desconhecido'."
),
api_key=os.environ["LABDADOS_API_KEY"],
saida="extraido/",
modelo="gpt-4.1-mini",
)
# extraido/estruturacao_<id>.zip → ementas.json (uma extração por linha do CSV)Receita 2 — Documentos em texto livre
Se cada arquivo é um documento independente (.txt, .md, .docx), passe a pasta ou a lista. O LLM gera um JSON por arquivo:
labdados.estruturacao(
arquivos="sentencas/", # pasta com .txt
schema={
"type": "object",
"properties": {
"autor": {"type": "string"},
"reu": {"type": "string"},
"valor_causa": {"type": "number"},
"fundamento_principal": {"type": "string"},
},
},
prompt_sistema="Você lê sentenças de 1ª instância em casos cíveis.",
api_key=os.environ["LABDADOS_API_KEY"],
saida="extraido/",
)Receita 3 — Local com Ollama
Roda 100% no seu computador, sem API key:
# Instale Ollama em https://ollama.com
ollama pull qwen2.5:7b
ollama serve
pip install labdados[estruturacao]labdados.estruturacao(
arquivos="docs/",
schema={"type": "object", "properties": {"resumo": {"type": "string"}}},
local=True,
modelo_local="qwen2.5:7b",
saida="out/",
)Receita 4 — Local com OpenAI (sua chave)
import os
labdados.estruturacao(
arquivos="docs/",
schema={...},
local=True,
base_url_local="https://api.openai.com/v1",
api_key_local=os.environ["OPENAI_API_KEY"],
modelo_local="gpt-4.1-mini",
)Dicas para o schema
- Inclua
descriptionem cada campo — o LLM lê e melhora a extração. - Use
requiredapenas para o que sempre tem que vir preenchido. Para campos opcionais, deixe fora dorequired(a LLM pode retornarnull). - Tipos suportados:
string,integer,number,boolean,array,object. Para listas tipadas:{"type": "array", "items": {"type": "string"}}. - Enums funcionam bem para classificação:
{"type": "string", "enum": ["procedente", "improcedente", "parcial"]}.
Parâmetros principais
| Parâmetro | Default | Quando mexer |
|---|---|---|
modelo |
"gpt-4.1-mini" |
Único modelo nuvem hoje (vLLM A100 descontinuado por custo) |
coluna_texto |
"" |
Nome da coluna do CSV/XLSX que tem o texto |
temperatura |
0.0 |
Mantenha 0 em extração — determinismo |
max_tokens |
4096 |
Aumente se a saída JSON estiver sendo cortada |
prompt_sistema |
"" |
Sempre escreva — melhora muito a qualidade |