Integracoes Externas
Integracoes Externas
Seção intitulada “Integracoes Externas”Como o Douto se conecta a servicos externos e ao ecossistema sens.legal.
LlamaParse (Extracao de PDF)
Seção intitulada “LlamaParse (Extracao de PDF)”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)
- Crie uma conta gratuita em cloud.llamaindex.ai.
- Gere uma chave de API no dashboard.
- Defina a variavel de ambiente:
export LLAMA_CLOUD_API_KEY="llx-your-key-here"O LlamaParse oferece tres tiers de processamento. O padrao no Douto e cost_effective:
| Tier | Indicado para | Velocidade | Custo |
|---|---|---|---|
agentic | PDFs escaneados, tabelas complexas, layouts multi-coluna | Mais lento | Mais alto |
cost_effective | Livros juridicos de texto limpo (padrao) | Media | Medio |
fast | Documentos somente texto | Mais rapida | Mais baixo |
Sobrescreva o tier por execucao:
python3 pipeline/process_books.py --tier agentic livro.pdfNotas de Uso
Seção intitulada “Notas de Uso”- 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
asynciointernamente. Este e o unico componente assincrono do pipeline.
MiniMax M2.5 (Enriquecimento de Chunks)
Seção intitulada “MiniMax M2.5 (Enriquecimento de Chunks)”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
- Obtenha uma chave de API em MiniMax.
- Defina a variavel de ambiente:
export MINIMAX_API_KEY="your-minimax-api-key"O Hack com o SDK da Anthropic
Seção intitulada “O Hack com o SDK da Anthropic”Configuracoes de Concorrencia
Seção intitulada “Configuracoes de Concorrencia”O enriquecimento roda com 5 threads concorrentes e um delay de 0,5 segundo entre requisicoes para evitar rate limiting:
| Parametro | Valor |
|---|---|
WORKERS | 5 threads |
DELAY_BETWEEN_REQUESTS | 0,5 segundos |
| Modelo | MiniMax-M2.5 |
Arquivo de Prompt Ausente
Seção intitulada “Arquivo de Prompt Ausente”Decisao Pendente: D06
Seção intitulada “Decisao Pendente: D06”A escolha do MiniMax M2.5 como modelo de enriquecimento esta em revisao. Opcoes sendo avaliadas:
| Opcao | Pros | Contras |
|---|---|---|
| Manter MiniMax M2.5 | Funciona, barato | Hack fragil com SDK, modelo generico |
| Migrar para Claude | Consistencia no ecossistema | Custo mais alto |
| Modelo local | Zero custo, sem dependencia | Mais lento, complexidade de setup |
| Avaliar depois | Sem esforco agora | Risco se acumula |
HuggingFace (Modelo de Embedding)
Seção intitulada “HuggingFace (Modelo de Embedding)”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)
Detalhes do Modelo
Seção intitulada “Detalhes do Modelo”| Propriedade | Valor |
|---|---|
| Model ID | rufimelo/Legal-BERTimbau-sts-base |
| Dimensoes | 768 |
| Max tokens | 512 |
| Idioma | Portugues (treinado em corpus juridico PT-PT) |
| Tamanho em disco | ~500 MB |
| Licenca | Open 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):
python3 -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('rufimelo/Legal-BERTimbau-sts-base')"Para controlar onde o modelo e cacheado:
export HF_HOME="/path/to/cache"# or specifically:export SENTENCE_TRANSFORMERS_HOME="/path/to/cache"Integracao com o Ecossistema sens.legal
Seção intitulada “Integracao com o Ecossistema sens.legal”Estado Atual (v0.1)
Seção intitulada “Estado Atual (v0.1)”A integracao com o ecossistema sens.legal e atualmente feita por arquivos JSON estaticos:
embed_doutrina.py | vembeddings_doutrina.json ─── deposited in ──→ Juca/Valter data directorysearch_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.
Componentes do Ecossistema
Seção intitulada “Componentes do Ecossistema”| Componente | Papel | Stack | Relacao com o Douto |
|---|---|---|---|
| Valter | API backend — jurisprudencia STJ, knowledge graph, busca vetorial | FastAPI, PostgreSQL, Qdrant, Neo4j, Redis | Consumidor primario dos embeddings do Douto |
| Juca | Frontend — interface para advogados | Next.js | Acessa doutrina via Valter |
| Leci | Servico de legislacao | Next.js, PostgreSQL, Drizzle | Alvo futuro de referencia cruzada (F35) |
| Joseph | Orquestrador — coordena agentes | — | Futura coordenacao com consultas do Douto |
Integracao Planejada (v0.4)
Seção intitulada “Integracao Planejada (v0.4)”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:
| Tool | Descricao |
|---|---|
search_doutrina | Busca hibrida no corpus doutrinario |
get_chunk | Recuperar um chunk especifico por ID com metadados completos |
list_areas | Listar dominios juridicos disponiveis com estatisticas do corpus |
Decisao de Protocolo (D01) — ainda nao resolvida:
| Opcao | Descricao | Pros | Contras |
|---|---|---|---|
| MCP stdio | Transporte MCP padrao | Alinhado com o MCP do Valter | Overhead de processo por consulta |
| MCP HTTP/SSE | Conexao MCP persistente | Mais flexivel, menor latencia | Mais infraestrutura |
| REST API (FastAPI) | API HTTP convencional | Simples, bem conhecida | Nao alinhada com ecossistema MCP |
| Manter arquivos JSON | Abordagem atual | Zero esforco | Sem 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.
Diagrama de Integracao
Seção intitulada “Diagrama de Integracao”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