Files
gart/rag/README.md
João HenriqueandClaude Sonnet 5 e9a17c1b62 feat(rag): provisiona busca RAG do G-ART e corrige indexação que abortava em chunk grande
Cria rag/ (schema, busca híbrida densa+lexical com RRF em search.py/
search_gart.sh, SETUP.md) — o projeto já tinha admin/update_rag.py para
indexar, mas nenhuma forma de consultar o índice. Corrige admin/update_rag.py:
um chunk denso em tokens (code/fcpxml/font_metrics.py) estourava o contexto
do modelo de embedding e derrubava a transação inteira; agora só aquele
chunk é pulado. Banco rag_gart provisionado no rag-hub-db compartilhado e
primeira indexação completa rodada (304 arquivos, 1702 chunks).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 09:38:46 -04:00

4.1 KiB

RAG deste projeto (G-ART)

Banco de RAG próprio do G-ART — usado só para a IA indexar código/documentação e responder consultas gastando menos tokens, sem precisar reler o repositório inteiro a cada tarefa. Não é o banco de dados do sistema: é infraestrutura de apoio ao desenvolvimento, mantida à parte da aplicação.

Segue o mesmo padrão dos projetos irmãos (Doza, Tigre, Jhonny): um único container Postgres + pgvector compartilhado (rag-hub-db) na VPS da equipe, e um banco por sistema dentro dele.

rag-hub-db (container único na VPS)
├── rag_doza    ← banco do Doza
├── rag_tigre   ← banco do Tigre
├── jhonny-rag  ← banco do Jhonny
└── rag_gart    ← banco deste projeto

Divisão de responsabilidades neste projeto

Diferente dos projetos irmãos, aqui a indexação já existia antes desta pasta e mora em admin/, não em rag/:

  • Indexação — admin/update_rag.py, chamado por admin/update_rag.command (túnel SSH + execução) e por admin/run.command (roda junto com o app). Varre INCLUDE_EXTENSIONS (.command .md .py .sh .sql .swift .txt .yml .yaml) a partir da raiz do projeto, corta por janela de linhas (CHUNK_LINES), grava embeddings via Ollama e é incremental (hash por arquivo em gart.indexed_files).
  • Schema — schema.sql nesta pasta: é o que admin/update_rag.py espera encontrar (gart.code_chunks, gart.file_index, gart.indexed_files). Rodar uma vez para provisionar um banco novo.
  • Busca — search.py e o wrapper search_gart.sh nesta pasta: é o que os projetos irmãos chamam de search_<projeto>.sh. Não existia ainda para o G-ART.
  • Credenciais — reaproveitadas de admin/gart-rag.env (mesmo arquivo que admin/update_rag.command já usa), para não duplicar a senha em dois lugares. Ver admin/gart-rag.env.example para o formato.

Como a busca funciona

Duas listas em paralelo, fundidas com RRF ponderado (parâmetros herdados dos projetos irmãos, calibrados lá via rag/bench.py sobre consultas douradas):

  1. densa — embedding do trecho de código/texto;
  2. lexical — pg_trgm sobre os símbolos declarados (nomes de classe/função extraídos por regex em admin/update_rag.py), para consultas que citam o nome exato de algo;
  3. resumo (file_index.summary_embedding) — hoje não é preenchido por admin/update_rag.py (só grava summary em texto, sem embedding), então essa lista fica vazia até alguém adicionar isso ao indexador. A busca funciona normalmente sem ela.

Cada trecho guarda start_line/end_line, então o resultado aponta a janela exata (code/fcpxml/writer/modifier.py:120-180) em vez de mandar ler o arquivo inteiro.

Modos de saída

Comando O que traz
rag/search_gart.sh "consulta" caminho, faixa de linhas e uma linha de descrição (padrão)
… --snippet + 300 chars do trecho
… --full + o trecho inteiro
… --json saída estruturada
… --module X / --path Y / --ext .py restringe o escopo
… --map [termo] inventário de arquivos, sem nenhum código

Arquivos desta pasta

  • README.md — este arquivo.
  • SETUP.md — passo a passo para provisionar o banco rag_gart na primeira vez.
  • schema.sql — schema do G-ART (extensões, tabelas, índices). Estado FINAL desejado: num banco novo basta rodá-lo.
  • embed.py — chamada ao Ollama compartilhada entre indexador e busca (só os prefixos search_document:/search_query: do nomic-embed-text).
  • search.py / search_gart.sh — busca híbrida e seu wrapper.
  • ensure_tunnel.sh — abre o túnel SSH até rag-hub-db se ainda não estiver aberto (idempotente).

Onde ficam as credenciais reais

Nunca nesta pasta. Credenciais de indexação (usuário/senha do Postgres) ficam em admin/gart-rag.env (fora do git). Acesso SSH à VPS e senha do usuário admin do rag-hub-db ficam documentados no VPS-ACCESS.md de outro projeto da equipe que já usa a mesma VPS — peça a quem provisionou o banco.