Pular para o conteúdo

Stack Tecnologica

Todas as tecnologias usadas no Douto, por que foram escolhidas e onde sao utilizadas.

LinguagemVersaoUso
Python 33.10+ (necessario para type hints tuple[dict, str])Todos os 5 scripts do pipeline
MarkdownKnowledge base (convencoes Obsidian, frontmatter YAML, wikilinks)

Do pipeline/requirements.txt:

PacoteVersaoFinalidadeUsado Em
sentence-transformerssem pinGeracao de embeddings via Legal-BERTimbauembed_doutrina.py
torchsem pinBackend ML para sentence-transformersembed_doutrina.py
numpysem pinOperacoes vetoriais (similaridade cosseno, normalizacao de scores)embed_doutrina.py, search_doutrina_v2.py
anthropicsem pinSDK Python usado como cliente HTTP para a API MiniMax M2.5enrich_chunks.py
llama-parsesem pinExtracao de PDF para markdown via LlamaIndex Cloudprocess_books.py
ModeloProvedorDimensoesMax TokensFinalidade
rufimelo/Legal-BERTimbau-sts-baseHuggingFace768512Embeddings semanticos para texto juridico
MiniMax-M2.5MiniMax (via Anthropic SDK)~8.000Enriquecimento e classificacao de chunks
LlamaParseLlamaIndexExtracao de PDF para markdown

O Legal-BERTimbau foi treinado em corpora juridicos em portugues. E a escolha padrao para NLP juridico em portugues, embora tenha sido treinado em PT-PT (Portugal), e nao PT-BR (Brasil). Nenhuma comparacao de benchmark com alternativas (multilingual-e5, nomic-embed, Cohere embed v3) foi realizada para o dominio especifico do Douto.

ServicoFinalidadeAutenticacaoNecessario Para
LlamaParse APIConversao de PDF para markdownLLAMA_CLOUD_API_KEYApenas process_books.py
MiniMax M2.5 APIClassificacao de chunks com metadados juridicosMINIMAX_API_KEYApenas enrich_chunks.py
HuggingFace HubDownload do modelo (automatico na primeira execucao)Nenhuma (modelo publico)embed_doutrina.py (primeira execucao)

Os seguintes modulos da stdlib sao usados nos scripts do pipeline — sem necessidade de pacotes externos:

re, json, pathlib, argparse, asyncio, shutil, threading, math, collections, os, sys, time, datetime

Destaque: o rechunk_v3.py (o script mais complexo com 890 linhas) usa apenas modulos da stdlib.

CategoriaEstado AtualPlanejado
Build systemNenhum — scripts executados manualmenteMakefile (F31)
Banco de dadosNenhum — arquivos JSON flatMigracao para vector DB (M12)
ContainerizacaoNenhumaDocker (F38)
CI/CDNenhumGitHub Actions (F39)
LintingNenhumruff (F32)
TestesNenhum (0% de cobertura)pytest (F26-F27)
graph LR
LP["LlamaParse API"] --> PB["process_books.py"]
PB -->|"stdlib only"| RC["rechunk_v3.py"]
AN["anthropic SDK"] --> EN["enrich_chunks.py"]
EN -->|"via base_url"| MM["MiniMax API"]
ST["sentence-transformers"] --> EM["embed_doutrina.py"]
TO["torch"] --> ST
NP["numpy"] --> EM
NP --> SE["search_doutrina_v2.py"]
HF["HuggingFace Hub"] -.->|"model download"| ST