Pular para o conteúdo

Integracoes Externas

Como o Douto se conecta a servicos externos e ao ecossistema sens.legal.

Servico: LlamaParse da LlamaIndex Finalidade: Converter livros juridicos em PDF para markdown estruturado Usado por: process_books.py Autenticacao: Variavel de ambiente LLAMA_CLOUD_API_KEY (carregada implicitamente pelo SDK)

  1. Crie uma conta gratuita em cloud.llamaindex.ai.
  2. Gere uma chave de API no dashboard.
  3. Defina a variavel de ambiente:
Terminal window
export LLAMA_CLOUD_API_KEY="llx-your-key-here"

O LlamaParse oferece tres tiers de processamento. O padrao no Douto e cost_effective:

TierIndicado paraVelocidadeCusto
agenticPDFs escaneados, tabelas complexas, layouts multi-colunaMais lentoMais alto
cost_effectiveLivros juridicos de texto limpo (padrao)MediaMedio
fastDocumentos somente textoMais rapidaMais baixo

Sobrescreva o tier por execucao:

Terminal window
python3 pipeline/process_books.py --tier agentic livro.pdf
  • A extracao de PDF e uma operacao unica por livro. Uma vez convertido para markdown, o PDF original nao e mais necessario pelo pipeline.
  • O markdown processado e salvo em $VAULT_PATH/Knowledge/_staging/processed/{slug}/.
  • Se a extracao falhar, o PDF e movido para $VAULT_PATH/Knowledge/_staging/failed/.
  • O LlamaParse usa asyncio internamente. Este e o unico componente assincrono do pipeline.

Servico: MiniMax M2.5 LLM Finalidade: Classificar chunks com metadados juridicos estruturados (instituto, tipo_conteudo, ramo, etc.) Usado por: enrich_chunks.py Autenticacao: Variavel de ambiente MINIMAX_API_KEY

  1. Obtenha uma chave de API em MiniMax.
  2. Defina a variavel de ambiente:
Terminal window
export MINIMAX_API_KEY="your-minimax-api-key"

O enriquecimento roda com 5 threads concorrentes e um delay de 0,5 segundo entre requisicoes para evitar rate limiting:

ParametroValor
WORKERS5 threads
DELAY_BETWEEN_REQUESTS0,5 segundos
ModeloMiniMax-M2.5

A escolha do MiniMax M2.5 como modelo de enriquecimento esta em revisao. Opcoes sendo avaliadas:

OpcaoProsContras
Manter MiniMax M2.5Funciona, baratoHack fragil com SDK, modelo generico
Migrar para ClaudeConsistencia no ecossistemaCusto mais alto
Modelo localZero custo, sem dependenciaMais lento, complexidade de setup
Avaliar depoisSem esforco agoraRisco se acumula

Servico: HuggingFace Hub (modelo publico) Finalidade: Baixar e cachear o modelo de embedding Legal-BERTimbau Usado por: embed_doutrina.py, search_doutrina_v2.py Autenticacao: Nenhuma necessaria (modelo publico)

PropriedadeValor
Model IDrufimelo/Legal-BERTimbau-sts-base
Dimensoes768
Max tokens512
IdiomaPortugues (treinado em corpus juridico PT-PT)
Tamanho em disco~500 MB
LicencaOpen source

O modelo e baixado automaticamente na primeira execucao pela biblioteca sentence-transformers. Nenhum setup manual e necessario.

Para pre-baixar o modelo (util para ambientes offline ou Docker):

Terminal window
python3 -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('rufimelo/Legal-BERTimbau-sts-base')"

Para controlar onde o modelo e cacheado:

Terminal window
export HF_HOME="/path/to/cache"
# or specifically:
export SENTENCE_TRANSFORMERS_HOME="/path/to/cache"

A integracao com o ecossistema sens.legal e atualmente feita por arquivos JSON estaticos:

embed_doutrina.py
|
v
embeddings_doutrina.json ─── deposited in ──→ Juca/Valter data directory
search_corpus_doutrina.json ($OUTPUT_PATH)
bm25_index_doutrina.json
  • Sem capacidade de consulta em tempo real a partir de outros agentes.
  • Sem API ou protocolo.
  • Valter e Juca leem os arquivos JSON de um caminho compartilhado no sistema de arquivos.
  • Atualizacoes requerem re-executar o pipeline de embeddings e reiniciar os consumidores.
ComponentePapelStackRelacao com o Douto
ValterAPI backend — jurisprudencia STJ, knowledge graph, busca vetorialFastAPI, PostgreSQL, Qdrant, Neo4j, RedisConsumidor primario dos embeddings do Douto
JucaFrontend — interface para advogadosNext.jsAcessa doutrina via Valter
LeciServico de legislacaoNext.js, PostgreSQL, DrizzleAlvo futuro de referencia cruzada (F35)
JosephOrquestrador — coordena agentesFutura coordenacao com consultas do Douto

Feature Planejada — Servidor MCP para busca doutrinaria esta no roadmap (F30), mas ainda nao foi implementado.

O milestone v0.4 estabelecera a integracao programatica entre o Douto e o ecossistema sens.legal:

Servidor MCP com pelo menos 3 tools:

ToolDescricao
search_doutrinaBusca hibrida no corpus doutrinario
get_chunkRecuperar um chunk especifico por ID com metadados completos
list_areasListar dominios juridicos disponiveis com estatisticas do corpus

Decisao de Protocolo (D01) — ainda nao resolvida:

OpcaoDescricaoProsContras
MCP stdioTransporte MCP padraoAlinhado com o MCP do ValterOverhead de processo por consulta
MCP HTTP/SSEConexao MCP persistenteMais flexivel, menor latenciaMais infraestrutura
REST API (FastAPI)API HTTP convencionalSimples, bem conhecidaNao alinhada com ecossistema MCP
Manter arquivos JSONAbordagem atualZero esforcoSem consultas em tempo real, nao escala

Decisao de Arquitetura (D02) — ainda nao resolvida:

Se o Douto permanece como servico independente ou e absorvido como modulo dentro do Valter (valter/stores/doutrina/). Esta decisao bloqueia v0.4.

graph TB
subgraph "Current (v0.1)"
ED["embed_doutrina.py"] -->|JSON files| DIR["Shared directory"]
DIR -->|reads| VA1["Valter"]
end
subgraph "Planned (v0.4)"
MCP["Douto MCP Server"] -->|search_doutrina| VA2["Valter"]
MCP -->|get_chunk| VA2
MCP -->|list_areas| VA2
VA2 -->|via Valter| JU["Juca"]
CD["Claude Desktop"] -->|MCP| MCP
end