estruturacao
estruturacao
Estruturação de textos com LLMs — extrai campos JSON conforme um schema.
Modo nuvem
Roda na infra do escritório (GPT-4.1-mini via Azure OpenAI). Os modelos self-host em GPU A100 (gpt-oss-20b, gemma-4-26b-it) foram descontinuados por custo proibitivo no padrão de uso atual.
Modo local
Cliente OpenAI-compatível: aceita OpenAI, Azure OpenAI, Ollama (default http://localhost:11434/v1) ou qualquer servidor /v1/chat/completions. O usuário traz a própria chave/URL. Desde a v0.5.0 a chamada ao LLM e a montagem do prompt vivem em labdados_core.estruturacao — o mesmo código rodado pelo backend (services/structuring), garantindo que prompt e parsing não divirjam.
.. note:: Mudança de comportamento na v0.5.0: o schema passa a ser injetado na mensagem user (junto do texto), não mais na system. Isso alinha com o backend e funciona melhor com response_format=json_schema. Se o seu prompt depender da formulação antiga, instrua o LLM via prompt_sistema ou abra uma issue.
Functions
| Name | Description |
|---|---|
| estruturacao | Extrai campos estruturados (JSON) a partir de textos. |
estruturacao
estruturacao.estruturacao(
arquivos,
*,
schema,
prompt_sistema='',
saida=None,
api_key=None,
modelo='gpt-4.1-mini',
coluna_texto='',
temperatura=0.0,
max_tokens=4096,
local=False,
base_url_local='http://localhost:11434/v1',
api_key_local='ollama',
modelo_local='llama3.1',
client=None,
progress=True,
)Extrai campos estruturados (JSON) a partir de textos.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
| arquivos | PathLike | list[PathLike] | .txt, .md, .docx, .csv ou .xlsx. Para CSV/XLSX, cada linha vira um documento — use coluna_texto para indicar qual coluna contém o texto a estruturar. |
required |
| schema | dict[str, Any] | str | JSON Schema (dict) ou string JSON. Define os campos extraídos e seus tipos. Mantenha simples — campos com description ajudam muito a LLM. |
required |
| prompt_sistema | str | Instruções de contexto (qual o tipo de documento, o que ignorar…). | '' |
| saida | PathLike | None | Pasta de saída. Cada documento gera um .json com a extração. |
None |
| api_key | str | None | Chave de API do escritório (modo nuvem). | None |
| modelo | str | "gpt-4.1-mini" (default — único modelo nuvem disponível hoje). Os modelos self-host em GPU A100 (gpt-oss-20b, gemma-4-26b-it) foram descontinuados por custo. |
'gpt-4.1-mini' |
| coluna_texto | str | Para CSV/XLSX: nome da coluna que contém o texto a ser estruturado. Vazio = concatena todas as colunas da linha. | '' |
| temperatura | float | 0.0 para resultado determinístico (recomendado em extração). |
0.0 |
| max_tokens | int | Tamanho máximo da resposta JSON. Aumente se o JSON estiver sendo cortado. | 4096 |
| local | bool | Se True, chama um servidor OpenAI-compatível local. Default: Ollama em http://localhost:11434/v1. |
False |
| base_url_local | str | Configuração do servidor local. Para Azure OpenAI, ajuste base_url_local e api_key_local. Para Ollama, mantenha os defaults e mude apenas modelo_local (ex.: "qwen2.5:7b"). |
'http://localhost:11434/v1' |
| api_key_local | str | Configuração do servidor local. Para Azure OpenAI, ajuste base_url_local e api_key_local. Para Ollama, mantenha os defaults e mude apenas modelo_local (ex.: "qwen2.5:7b"). |
'http://localhost:11434/v1' |
| modelo_local | str | Configuração do servidor local. Para Azure OpenAI, ajuste base_url_local e api_key_local. Para Ollama, mantenha os defaults e mude apenas modelo_local (ex.: "qwen2.5:7b"). |
'http://localhost:11434/v1' |
| client | Client | None | Cliente reaproveitado (modo nuvem). | None |
| progress | bool | Spinner no stderr. | True |
Returns
| Name | Type | Description |
|---|---|---|
| Path | Pasta de saída. |
Examples
Modo nuvem com schema simples:
>>> import labdados
>>> labdados.estruturacao(
... arquivos="acordaos.csv",
... coluna_texto="ementa",
... api_key="sk_lab_...",
... prompt_sistema="Você está extraindo decisões judiciais sobre direito do consumidor.",
... schema={
... "type": "object",
... "properties": {
... "autor": {"type": "string"},
... "reu": {"type": "string"},
... "valor_causa": {"type": "number"},
... "procedente": {"type": "boolean"},
... },
... "required": ["autor", "reu"],
... },
... )Modo local com Ollama:
>>> labdados.estruturacao(
... arquivos="textos/",
... schema={"type": "object", "properties": {"resumo": {"type": "string"}}},
... local=True,
... modelo_local="qwen2.5:7b",
... )