Pular para o conteúdo principal

Relatório de Tabelas Vetoriais - ArboreoLab

Data: 08 de Janeiro de 2026
MariaDB: 11.8.5
Modelo de Embedding: paraphrase-multilingual-mpnet-base-v2 (768 dimensões)


📊 Resumo Executivo

MétricaValor
Databases com vetores2 (ClioVector, GeopoliticasVector)
Tabelas com colunas VECTOR10
Índices vetoriais ativos10
Total de registros vetorizados~374.000
Tamanho total em disco~1.06 GB
Tipo de distânciaCOSINE (todos os índices)

🗄️ Inventário de Tabelas Vetoriais

ClioVector

TabelaColunaTipoRegistrosCom VetorTamanho
clio_ocrocr_vectorVECTOR(768)16.11716.117 (100%)0.13 MB
clio_ocr_segmentssegment_vectorVECTOR(768)000.03 MB
clio_entidadessemantic_vectorVECTOR(768)145.478145.478 (100%)0.11 MB
clio_entidades_vectorentity_vectorVECTOR(768)20.35920.359 (100%)79.59 MB
clio_ocr_vectorocr_vector + ocr_vector1,2,3VECTOR(768)16.02416.024 (100%)604.63 MB

GeopoliticasVector

TabelaColunaTipoRegistrosCom VetorTamanho
clio_ocrocr_vectorVECTOR(768)16.43116.431 (100%)251.98 MB
clio_ocr_segmentssegment_vectorVECTOR(768)13.96913.969 (100%)121.19 MB
clio_entidadessemantic_vectorVECTOR(768)145.478145.478 (100%)0.13 MB
clio_entidades_vectorentity_vectorVECTOR(768)000.02 MB
clio_ocr_vectorocr_vectorVECTOR(768)000.02 MB

🔍 Índices Vetoriais Existentes

Status: ✅ TODOS OS ÍNDICES JÁ EXISTEM

DatabaseTabelaÍndiceTipoDistância
ClioVectorclio_ocridx_ocr_vecVECTORCOSINE
ClioVectorclio_ocr_segmentsidx_segment_vecVECTORCOSINE
ClioVectorclio_entidadesidx_semantic_vectorVECTORCOSINE
ClioVectorclio_entidades_vectoridx_entity_vecVECTORCOSINE
ClioVectorclio_ocr_vectoridx_ocr_vecVECTORCOSINE
GeopoliticasVectorclio_ocridx_ocr_vecVECTORCOSINE
GeopoliticasVectorclio_ocr_segmentsidx_segment_vecVECTORCOSINE
GeopoliticasVectorclio_entidadesidx_semantic_vectorVECTORCOSINE
GeopoliticasVectorclio_entidades_vectoridx_entity_vecVECTORCOSINE
GeopoliticasVectorclio_ocr_vectoridx_ocr_vecVECTORCOSINE

⚙️ Configuração MHNSW (MariaDB Vector)

VariávelValor AtualRecomendação
mhnsw_default_distanceeuclideanOK (índices usam COSINE explícito)
mhnsw_default_m6Considerar aumentar para 12 em produção
mhnsw_ef_search20Considerar aumentar para 50 para melhor recall
mhnsw_max_cache_size16 MB🔴 AUMENTAR para 256-512 MB

Recomendação de Tuning

-- Aumentar cache do índice vetorial (16 MB → 256 MB)
SET GLOBAL mhnsw_max_cache_size = 268435456;

-- Aumentar precisão de busca (20 → 50)
SET GLOBAL mhnsw_ef_search = 50;

Nota: Adicionar ao /etc/mysql/mariadb.conf.d/50-server.cnf para persistir:

mhnsw_max_cache_size = 268435456
mhnsw_ef_search = 50

📐 Estrutura das Tabelas Principais

clio_ocr (OCR de Páginas)

CREATE TABLE clio_ocr (
id BIGINT UNSIGNED AUTO_INCREMENT,
workflow_id INT UNSIGNED NOT NULL,
content LONGTEXT, -- Conteúdo JSON do OCR
content_markdown LONGTEXT, -- Markdown do texto
ocr_vector VECTOR(768) NOT NULL, -- Embedding da página
engine_version VARCHAR(50), -- Motor: legacy, gemini-2.0, vision-macos-v1
file_hash_sha256 CHAR(64), -- Hash para deduplicação
...
VECTOR KEY idx_ocr_vec (ocr_vector) DISTANCE=COSINE
);

clio_ocr_segments (Segmentos Layout-Aware)

CREATE TABLE clio_ocr_segments (
id BIGINT UNSIGNED AUTO_INCREMENT,
ocr_id BIGINT UNSIGNED NOT NULL, -- FK para clio_ocr.id
text_content TEXT NOT NULL, -- Texto do segmento
segment_vector VECTOR(768) NOT NULL, -- Embedding do segmento
bbox_x, bbox_y, bbox_w, bbox_h FLOAT,-- Coordenadas normalizadas (0-1)
confidence FLOAT, -- Confiança do OCR (0-1)
reading_order INT, -- Ordem de leitura
...
VECTOR KEY idx_segment_vec (segment_vector) DISTANCE=COSINE,
CONSTRAINT fk_segment_ocr FOREIGN KEY (ocr_id) REFERENCES clio_ocr(id) ON DELETE CASCADE
);

clio_entidades (Entidades Extraídas)

CREATE TABLE clio_entidades (
id INT AUTO_INCREMENT,
entity_name LONGTEXT, -- Nome da entidade (JSON)
isA LONGTEXT, -- Tipo: Pessoa, Organização, Local...
semantic_vector VECTOR(768) NOT NULL,-- Embedding da entidade
cluster_id INT, -- Agrupamento de entidades similares
is_principal TINYINT, -- Entidade principal do cluster
entity_name_text VARCHAR(500) STORED,-- Texto extraído do JSON
...
VECTOR KEY idx_semantic_vector (semantic_vector) DISTANCE=COSINE,
FULLTEXT KEY idx_fulltext_entity_name (entity_name_text)
);

� Manutenção de Entidades DESCRICAO

Implementação (08/01/2026)

Foi implementado um mecanismo de consolidação automática para entidades com relationshipType="DESCRICAO":

ComponenteDescrição
UNIQUE KEYidx_unique_descricao em clio_entidades (MariaDB)
Coluna Gerada`unique_key_descricao = CONCAT(entity_name, '
UPSERTINSERT ... ON DUPLICATE KEY UPDATE agrega inFileIDs automaticamente
Migração SQLmigracoesdedb/002_upsert_descricao.sql

Arquivos Modificados

  • enviar_db/entidadesV2.py - UPSERT para DESCRICAO, INSERT para relacionamentos
  • gerar_entidades/gerarEntespagina.py - Usa entidadesV2.py (sem mudanças diretas)
  • migracoesdedb/002_upsert_descricao.sql - Schema com UNIQUE KEY

⚠️ Manutenção Periódica Recomendada

O UPSERT usa CONCAT_WS para agregar inFileIDs. Reprocessamentos do mesmo documento podem gerar IDs duplicados dentro do campo CSV.

Script de Limpeza:

cd /home/arboreolab/estudos/1_funcionais/fregeRAG_v1/enviar_db/

# Simular consolidação
python consolidar_entidades_descricao.py --dry-run

# Executar consolidação
python consolidar_entidades_descricao.py

Frequência Recomendada: Mensalmente ou após reprocessamentos em massa.

Resultados da Consolidação Inicial

MétricaAntesDepoisRedução
Rows DESCRICAO113.82965.686-42,3%
Rows/EntidadeMúltiplas1:1Normalizado

�🚨 Observações Importantes

1. Tabelas Legadas (candidatas a remoção)

TabelaObservação
clio_ocr_vectorContém 4 colunas de vetor (redundante) — 604 MB em ClioVector
clio_entidades_vectorParece duplicar clio_entidades

Recomendação: Avaliar migração para tabelas principais e arquivamento.

2. Segmentos Não Populados (ClioVector)

A tabela ClioVector.clio_ocr_segments está vazia (0 registros), enquanto GeopoliticasVector.clio_ocr_segments tem 13.969 registros.

Ação: Executar backfill de segmentos para ClioVector se necessário.

3. Cache de Índice Vetorial Pequeno

O mhnsw_max_cache_size está em 16 MB (default), muito pequeno para ~374k vetores de 768 dimensões.

Cálculo:

1 vetor = 768 × 4 bytes (float32) = 3.072 bytes
374.000 vetores × 3.072 bytes = ~1.15 GB de dados vetoriais

Cache de 16 MB = apenas 0.014% dos vetores em cache
Cache de 256 MB = ~2.2% dos vetores em cache

✅ Status Atual

ItemStatus
Índices vetoriais criados✅ Completo
Distância COSINE configurada✅ Completo
Buffer pool (18 GB)✅ Completo
Cache MHNSW otimizado⚠️ Pendente (16 MB → 256 MB)
Tabelas legadas arquivadas⚠️ Pendente
Backfill de segmentos (ClioVector)⚠️ Pendente
Embeddings Worker (Mac)✅ Operacional (teste 08/01/2026)

🆕 Embeddings Worker (08/01/2026)

Novo Worker para Geração de Embeddings

Foi criado e testado com sucesso o ArboreoLab Embeddings Worker, executando em MacBook Air M2 com aceleração MPS (Metal Performance Shaders).

ComponenteValor
Localização Servidor/home/arboreolab/Clio/embeddings-worker-interface
Localização Mac/Users/douglasromao/ArboreoLab/embeddings-worker
Modeloparaphrase-multilingual-mpnet-base-v2 (768 dim)
AceleraçãoMPS (Apple Silicon)
API Port (Mac)9999
API Port (Servidor via túnel)9002

Novas Colunas em clio_entidades_vector

ColunaTipoDescrição
entity_vectorVECTOR(768)Embedding do nome da entidade
relatedto_entity_name_vectorVECTOR(768)NOVA - Embedding da entidade relacionada
triple_vectorVECTOR(768)NOVA - Embedding da tripla completa

Status de Processamento

DatabaseTotalProcessadosPendentesStatus
GeopoliticasVector10.024329.992⏳ Teste OK
ClioVector20.359020.359⏳ Pendente

Índices Vetoriais Pendentes

Após população completa, criar índices:

-- GeopoliticasVector
ALTER TABLE GeopoliticasVector.clio_entidades_vector
ADD VECTOR INDEX idx_relatedto_vec (relatedto_entity_name_vector);
ALTER TABLE GeopoliticasVector.clio_entidades_vector
ADD VECTOR INDEX idx_triple_vec (triple_vector);

-- ClioVector
ALTER TABLE ClioVector.clio_entidades_vector
ADD VECTOR INDEX idx_relatedto_vec (relatedto_entity_name_vector);
ALTER TABLE ClioVector.clio_entidades_vector
ADD VECTOR INDEX idx_triple_vec (triple_vector);

Documentação completa: RELATORIO_EMBEDDINGS_WORKER_2026-01-08.md


🔮 Próximos Passos

PrioridadeAçãoImpacto Esperado
🔴 AltaProcessar embeddings GeopoliticasVector (~52 min)Busca semântica de entidades
🔴 AltaAumentar mhnsw_max_cache_size para 256 MBReduzir I/O de disco
🔴 AltaAumentar mhnsw_ef_search para 50Melhor recall/precisão
🟡 MédiaCriar índices para novas colunas vetoriaisBusca por triplas
🟡 MédiaAvaliar remoção de tabelas *_vector legadasEconomia de 684 MB
🟡 MédiaBackfill segmentos para ClioVectorBusca granular funcional
🟢 BaixaDocumentar procedimento de manutenção de índicesOperações futuras

Gerado por: Engenheiro Sênior ArboreoLab
Última atualização: 08/01/2026 14:50 UTC