Relatório de Análise: Python Services (estudos/)
Data: 06-07 de Janeiro de 2026
Última Atualização: 07/01/2026 23:30 UTC
Versão Python: 3.12.3
Tipo: Análise Estrutural + Performance Tuning
🚀 Atualização 07/01/2026 — motor-rag Performance
Mudanças Aplicadas
| Componente | Antes | Depois |
|---|---|---|
| Servidor | uvicorn direto | Gunicorn + 4 UvicornWorkers |
| Pool DB/tenant | 3 conexões (hardcoded) | 8 conexões (configurável via env) |
| Timeout pool | Falha imediata | Retry 2s antes de 503 |
| Erro pool exhausted | HTTP 500 | HTTP 503 (backpressure) |
Arquivos Modificados
motorRag/services/tenant_manager.py— Pool size viaFREGERAG_TENANT_POOL_SIZEmotorRag/services/tenant_search_engine.py— Retry comFREGERAG_POOL_WAIT_SECONDSmotorRag/server/routes/search.py— 503 para PoolError
Benchmark Real (POST /api/fregerag/search)
| Concorrência | p50 | p90 | p99 | RPS |
|---|---|---|---|---|
| 1 | 22.9s | 29.1s | 29.1s | 0.04 |
| 2 | 27.5s | 38.4s | 38.4s | 0.06 |
Gargalo identificado: Disk I/O (400-600 MiB/s) → Resolvido com MariaDB buffer pool 18GB
Ver: RELATORIO_INFRAESTRUTURA_2026-01-07.md
Nota (07 de Janeiro de 2026): O Motor RAG está em
127.0.0.1:8768, gerenciado por PM2 viapm2-root, compm2 save/pm2 resurrect.
📌 Resumo Executivo
A pasta /home/arboreolab/estudos/ contém os serviços Python críticos do sistema ArboreoLab, incluindo o motor RAG (Retrieval Augmented Generation), processamento OCR, gerenciamento de Google Drive, e geração de entidades. Estes scripts são chamados diretamente pelo backend Node.js.
Métricas Principais
| Métrica | Valor |
|---|---|
| Tamanho Total | 9.4 GB |
| Scripts Python (usuário) | 59 arquivos |
| Virtual Environment | Python 3.12.3 |
Subpastas __pycache__ | 0 ✅ (removidas) |
Arquivos .DS_Store | 0 ✅ (removidos) |
| Arquivos vazios | 2 (placeholders) |
| Pastas vazias | 3 |
🔗 Dependências com Outros Projetos
Chamadas do Backend Node.js
O backend Node.js depende diretamente dos scripts Python desta pasta:
| Rota Node.js | Script Python | Função |
|---|---|---|
fregeRAGRoute.js | 1_busca/fregeV2+busca_entidades.py | Busca semântica |
inserirEntidadesRoute.js | enviar_db/entidadesV2.py | Inserção de entidades |
clusteringRoute.js | gerar_documento/ocr_cluster_segmentadov1v2v3.py | Clustering OCR |
correcaoEntidadesRoute.js | correcao_entidades/* | Correção de entidades |
gerenciadorDriveGoogle.js | gerenciador_drive/GerenciadorDriveGoogle.py | Operações Google Drive |
mapeadorDriveGoogle.js | gerenciador_drive/MapeadorDriveGoogle.py | Mapeamento de arquivos |
driveWebhook.js | gerenciador_drive/* | Webhooks do Drive |
pdfTreatmentRoute.js | gerenciador_drive/GerenciadorDriveGoogle.py | Tratamento de PDFs |
Variáveis de Ambiente Utilizadas
// Definidas no Node.js (hardcoded ou .env)
PYTHON_EXECUTABLE = '/home/arboreolab/estudos/.venv/bin/python3'
PYTHON_SCRIPTS_DIR = '/home/arboreolab/estudos/1_funcionais/fregeRAG_v1/gerenciador_drive'
PM2 (ecosystem.config.js)
{
name: 'motor-rag',
script: '/home/arboreolab/estudos/.venv/bin/uvicorn',
args: 'motorRag.server.main:app --host 127.0.0.1 --port 8768',
cwd: '/home/arboreolab/estudos/1_funcionais/fregeRAG_v1',
interpreter: 'none',
env: {
PYTHONPATH: '/home/arboreolab/estudos/1_funcionais/fregeRAG_v1'
}
}
📁 Estrutura Atual
estudos/
├── .venv/ # Virtual Environment Python 3.12.3
├── config_produzir_nomes.json # Configuração global
├── estudos.code-workspace # Workspace VS Code
├── rag_server.log # Log do servidor RAG (47KB)
│
├── 1_funcionais/
│ └── fregeRAG_v1/ # Sistema RAG principal
│ ├── config/ # Configurações (config.ini, prompt.ini)
│ ├── 1_busca/ # Motor de busca semântica
│ ├── motorRag/ # Servidor FastAPI (organizado)
│ ├── gerenciador_drive/ # Integração Google Drive
│ ├── gerar_documento/ # Processamento OCR/clustering
│ ├── gerar_entidades/ # Extração de entidades NER
│ ├── correcao_entidades/ # Correção e clustering de entidades
│ ├── enviar_db/ # Persistência no banco de dados
│ ├── converter_md_pdf_html/ # Conversão de formatos
│ ├── migracoesdedb/ # Scripts de migração
│ ├── backup/ # Backups SQL
│ ├── pareceres/ # Documentos gerados
│ └── output_md/ # Saídas em Markdown
│
└── macos_worker/ # Worker OCR para macOS
├── worker_server.py # Servidor HTTP do worker
├── ocr_refiner.py # Refinamento OCR
├── requirements.txt # Dependências
└── [scripts de instalação]
🔍 Análise por Módulo
1. motorRag/ (Motor RAG - FastAPI)
Status: ✅ BEM ORGANIZADO
Estrutura modular seguindo padrões de indústria:
server/→ Servidor FastAPI com rotas separadasservices/→ Lógica de negócio (embeddings, search, TF-IDF)models/→ Pydantic models (requests/responses)config/→ Carregamento de config.iniutils/→ Logging
Endpoints:
GET /health→ Health checkPOST /api/fregerag/search→ Busca híbridaPOST /api/fregerag/reindex→ Re-indexação
2. gerenciador_drive/ (Google Drive)
Status: ⚠️ REQUER ORGANIZAÇÃO
GerenciadorDriveGoogle.py(42KB) → Download/upload de arquivosMapeadorDriveGoogle.py(35KB) → Mapeamento de estruturaGoogleDrive/→ Tokens e cache de estruturas por contatemp_uploads/,temp_pdf/→ Arquivos temporários
Observações:
- Arquivos de configuração
.config.cfge.config.cfg.migratedna raiz - Diretório
credentials.jsoné executável (possível problema de permissão) - Cache de estruturas JSON pode crescer muito
3. gerar_documento/ (Processamento OCR)
Status: ⚠️ REQUER ORGANIZAÇÃO
Múltiplas versões de scripts:
ocr_cluster_segmentadov1v2v3.py(versão atual)FUNCIONANDO_ocr_cluster_segmentadov1v2v3.py(backup funcional)reserva_ocr_cluster_segmentadov1v2v3.py(backup)- Versões
docling_*(experimentos com Docling)
Observação: Arquivo import pytest.py com nome incorreto.
4. correcao_entidades/ (Correção de Entidades)
Status: ⚠️ REQUER ORGANIZAÇÃO
Scripts de clustering e correção de entidades NER:
1_correcao_entidades_um_todos.pycluster_entities.pyentity_linker.pybackfill_vectors.py,backfill_segment_vectors.py- Scripts duplicados:
log_de_desvio.pyelog_deviation.py
5. macos_worker/ (Worker OCR macOS)
Status: ✅ BEM ORGANIZADO
Worker para processamento OCR usando Apple Vision Framework:
worker_server.py(57KB) → Servidor HTTPocr_refiner.py(34KB) → Refinamento OCR- Scripts de instalação como serviço launchd
⚠️ Problemas Identificados
Alta Prioridade
-
Arquivos de Dados na Raiz do fregeRAG_v1
*.npy(embeddings) → 550+ MB*.json(dados) → 140+ MBbackup.sql→ 125 MB- Recomendação: Mover para pasta
data/ouembeddings/
-
Pastas Vazias/Placeholder
validar_fact_check/(vazia)gerenciador_metadados/(vazia)gerenciadorarboreolabadm/(arquivo vazio)- Recomendação: Remover ou documentar propósito futuro
-
Arquivos Vazios
enviar_texto/enviar_texto_parecer.py(0 bytes)gerenciadorarboreolabadm/migrardb_arboreolabadm.py(0 bytes)gerar_entidades/5,gerar_entidades/Daria(lixo)
Média Prioridade
-
pycache (12 pastas)
- Adicionar ao
.gitignorese não estiver - Podem ser removidas com:
find . -type d -name __pycache__ -exec rm -rf {} +
- Adicionar ao
-
Arquivos .DS_Store (8 arquivos)
- Lixo do macOS
- Remover com:
find . -name .DS_Store -delete
-
Nomenclatura Inconsistente
fregeV2+busca_entidades.py(caractere+em nome de arquivo)FUNCIONANDO_ocr_cluster...(prefixo não-padrão)import pytest.py(nome incorreto)
Baixa Prioridade
-
Arquivos Temporários Grandes
temp_uploads/com imagens JPG de testepareceres/Arquivado/com documentos antigos
-
PDF de Teste
exposicoesiap_smithsonian b_img1080.pdfna raiz
📋 Propostas de Organização
Estrutura Ideal (SEM IMPLEMENTAR AGORA)
estudos/
├── .venv/
├── README.md # CRIAR: Documentação principal
├── ESTRUTURA_DIRETORIOS.md # CRIAR: Este documento
├── pyproject.toml # CRIAR: Configuração moderna Python
│
├── services/ # Renomear 1_funcionais/
│ └── fregerag/ # Renomear fregeRAG_v1/
│ ├── README.md
│ ├── config/
│ │ ├── config.ini
│ │ ├── prompt.ini
│ │ └── settings.py
│ │
│ ├── server/ # motorRag atual (já organizado)
│ │ ├── main.py
│ │ ├── routes/
│ │ ├── middleware/
│ │ ├── services/
│ │ ├── models/
│ │ └── utils/
│ │
│ ├── integrations/ # Integrações externas
│ │ └── google_drive/
│ │ ├── manager.py
│ │ ├── mapper.py
│ │ └── cache/
│ │
│ ├── processing/ # Processamento de documentos
│ │ ├── ocr/
│ │ ├── clustering/
│ │ └── conversion/
│ │
│ ├── nlp/ # Processamento de linguagem
│ │ ├── entities/
│ │ ├── search/
│ │ └── embeddings/
│ │
│ ├── data/ # Dados e embeddings
│ │ ├── embeddings/
│ │ └── cache/
│ │
│ ├── migrations/ # Migrações de banco
│ │
│ └── _archived/ # Scripts obsoletos
│
└── workers/ # Workers remotos
└── macos_ocr/
✅ Próximos Passos Recomendados
Fase 1: Limpeza (Baixo Risco)
- Remover
__pycache__(12 pastas) - Remover
.DS_Store(8 arquivos) - Remover arquivos vazios óbvios (
5,Daria) - Criar
.gitignoreadequado
Fase 2: Organização de Dados (Médio Risco)
- Mover
*.npye*_data.jsonpara pastadata/ - Mover
backup.sqlpara pastabackup/sql/ - Documentar propósito de pastas vazias ou removê-las
Fase 3: Reorganização de Código (Alto Risco - Requer Testes)
- Padronizar nomes de arquivos (remover
+, prefixos) - Consolidar scripts duplicados
- Atualizar paths hardcoded no Node.js
- Testar todas as rotas após mudanças
⚠️ Pendente de Integração (08/01/2026)
| Componente | Status | Descrição |
|---|---|---|
| Multi-Signal v2 | ✅ Backend | search_documents_v2() implementado |
| Endpoint /search_v2 | ✅ Disponível | FastAPI em 8768 |
| Frontend v2 | 🔄 Em progresso | Integrar useFregeRAG.ts |
| Consolidação Entidades | ✅ Completo | UPSERT automático + script limpeza |
🎯 Próximos Passos Priorizados (Motor RAG)
Fase 1: Integração Frontend v2 (08/01/2026)
| # | Tarefa | Status |
|---|---|---|
| 1 | Modificar useFregeRAG.ts → /search_v2 | 🔄 Em progresso |
| 2 | Adicionar interface SearchResponseV2 | ⏳ Pendente |
| 3 | Feature flag USE_SEARCH_V2 | ⏳ Pendente |
| 4 | Testar em produção | ⏳ Pendente |
Fase 2: Feedback Loop (Janeiro 2026)
| # | Tarefa | Status |
|---|---|---|
| 5 | Criar tabela search_feedback | ⏳ Pendente |
| 6 | Endpoint POST /api/fregerag/feedback | ⏳ Pendente |
| 7 | UI thumbs up/down | ⏳ Pendente |
Fase 3: Layout-Aware Segments (Janeiro 2026)
| # | Tarefa | Status |
|---|---|---|
| 8 | Integrar Docling para layout | ⏳ Pendente |
| 9 | Adicionar segment_type na tabela | ⏳ Pendente |
| 10 | Boost de score para headings | ⏳ Pendente |
🚨 Ação Recomendada Agora
Multi-Signal Scoring v2 já está no backend:
motorRag/services/tenant_search_engine.py→search_documents_v2()motorRag/server/routes/search.py→/api/fregerag/search_v2
Próximo passo: Integrar frontend para usar endpoint v2.
Impacto Esperado:
| Métrica | v1 (Atual) | v2 (Multi-Signal) |
|---|---|---|
| Precision@10 | ~40% | ≥70% |
| Queries sem resultado útil | ~25% | ≤10% |
🔧 Manutenção de Entidades (Periódica)
Script de consolidação para entidades DESCRICAO:
cd /home/arboreolab/estudos/1_funcionais/fregeRAG_v1/enviar_db/
python consolidar_entidades_descricao.py --dry-run # Simular
python consolidar_entidades_descricao.py # Executar
Frequência: Mensalmente ou após reprocessamentos em massa.
📝 Observações Finais
Esta análise foi realizada SEM ALTERAÇÕES no código ou estrutura. Todas as recomendações devem ser implementadas em fases, com testes adequados, pois os scripts Python são dependências críticas do sistema.
ATENÇÃO: Alterações nos paths requerem atualização sincronizada em:
- Backend Node.js (
PYTHON_SCRIPTS_DIR,PYTHON_EXECUTABLE) - PM2 (
ecosystem.config.js) - Scripts Python internos (imports relativos)
Autor: Engenheiro Sênior ArboreoLab
Próxima Revisão: Após aprovação do Diretor para implementação