Skip to content

GraphRAG+SchemaCrawler para Dev#12

Merged
Petroncini merged 9 commits into
devfrom
feature/RAG-schema
Jun 6, 2026
Merged

GraphRAG+SchemaCrawler para Dev#12
Petroncini merged 9 commits into
devfrom
feature/RAG-schema

Conversation

@Fugant1

@Fugant1 Fugant1 commented Jun 6, 2026

Copy link
Copy Markdown
Collaborator

Features:
Adiciona GraphRAG com lógica de expansão da busca de tabelas.
Adiciona Inferência mais robusta de FKs caso não forem fornecidas.
Adiciona SchemaCrawler para extração do Schema na DB fornecida.

Fugant1 and others added 6 commits May 20, 2026 14:16
Atualizando da branch de RAG para facilitar merge posterior
Precisamos testar e verificar o quanto esta ajudando no Spider 2, adicionei tambem uma lógica para inferir relações
Steiner Tree foi adicionada na etapa de retrieve do grafo

Removi a lógica de busca de FK para que seja implementada como SchemaCralwer

Reformulei os testes para a estrutura atual e tornei-os mais robustos

Corrigi o Critic que estava recebendo sempre o SCHEMA completo
- Adiciona extração via SchemaCrawler em schema.py com fallback para PRAGMA SQLITE
- Renomeia arquivo erich_schema.py para enrich_schema.py
- Atualiza detalhes gerais na documentação
- Adiciona 2 novos testes em test_components.py focados no SchemaCrawler

OBS: O SchemaCrawler exige Java 17+ e instalação local na máquina.
Futuramente, criar make_setup.py para automatizar o ambiente de dev e configurar a instalação do SC no Dockerfile de produção.
…hecimentos e correções do agente

Implementação focada em melhorar o suporte aos bancos do benchmark Spider 2, resolver limitações matemáticas do SQLite e corrigir loops infinitos no grafo. A nova lógica garante um mecanismo inteligente para inferir chaves, recuperar contextos complexos e blindar o sistema contra erros de roteamento e limitações de dialeto.

Detalhes das alterações:

### 1. Robustez no Reconhecimento de Schemas
- **Heurística de FKs Virtuais Poliglota** (`text_to_insight/nodes/schema.py`):
  - Expandida para identificar sufixos `_id`, `_code` e `_no`, e suportar mapeamento para tabelas no plural (ex: `flights`, `tickets`) ou com sufixos analíticos (`_data`).
  - **Match de tabelas com prefixo**: a heurística agora busca tabelas que terminam com o nome base após separador `_` (ex: `order_id` → `olist_orders`), resolvendo bancos com convenção de nomes prefixados como Brazilian E-Commerce.
  - **Match por coluna homônima**: detecta colunas com nome idêntico entre tabelas onde o nome da coluna faz parte do nome da outra tabela (ex: `product_category_name` em `olist_products` → `product_category_name_translation`).
- **Limpeza do SchemaCrawler**: Removida a dependência do arquivo solto `schemacrawler.config.properties`. Os parâmetros `-schemacrawler.format.hide_weakassociations=false` foram acoplados nativamente na chamada via `subprocess.run` em `schema.py`.

### 2. RAG Adaptativo e Roteamento Condicional
- **Steiner Tree Resiliente** (`text_to_insight/retriever/graph_logic.py`): O grafo do RAG agora ignora tabelas "intrusas" e forma caminhos agrupados sem abortar a busca.
- **Expansão Dinâmica do Top-K** (`text_to_insight/retriever/engine.py`, `text_to_insight/nodes/retriever.py`): O parâmetro `top_k` agora cresce automaticamente (5, 9, 13) baseado nas falhas do Planejador (`tentativas_loop`).
- **Fluxo do Grafo**: Em caso de erros, o Planejador (`status: revisando_estrategia`) passou a rotear de volta para o Retriever para aproveitar o novo Top-K expandido.

### 3. Melhorias no Motor de Avaliação (Spider 2) e Dialetos
- **Injeção de Conhecimento Externo (`scripts/test_spider2_eval.py`)**: O script de avaliação agora extrai automaticamente regras de negócio e contextos matemáticos da coluna `external_knowledge` no JSONL e as anexa ao prompt dentro das tags `<additional_context>`.
- **Injeção de Funções Matemáticas no SQLite (`src/spider/query_executor.py`)**: A conexão local foi estendida via `.create_function()` com 19 funções trigonométricas e matemáticas (SIN, COS, SQRT, POWER, PI, LOG, etc.), permitindo que o LLM resolva perguntas que usam cálculo espacial sem esbarrar no "No such function" (ex: DB Airlines).

### 4. Correções de Bug (Bugfixes)
- **Quebra de Loops Infinitos no Grafo** (`text_to_insight/routers/edges.py`, `text_to_insight/nodes/retriever.py`, `text_to_insight/state.py`, `text_to_insight/graph.py`):
  Corrigidos ciclos infinitos onde o Planejador decidia `"revisando_estrategia"`, o Roteador enviava ao Retriever, mas o Retriever devolvia `"schema_obtido"` sem mudanças efetivas, fazendo o Planejador reavaliar e decidir `"revisando_estrategia"` novamente, infinitamente.
  Três proteções no Roteador do Planejador:
    - **Schema pequeno** (<1500 chars): RAG não consegue filtrar, Retriever é bypassed e o fluxo segue direto para `agente_codigo`.
    - **Limite de expansões RAG** (`MAX_TENTATIVAS_REVISAO=2`): para schemas grandes, o Retriever pode ser chamado até 2 vezes via novo campo `tentativas_revisao_retriever` no estado. Após esgotar, o roteador força `agente_codigo`.
    - **Eliminação do auto-loop do Planejador**: o path default do roteador agora envia para `agente_codigo` em vez de reenviar para o próprio `planejador`, impedindo auto-loops por status não reconhecido.
- **Correção de Prompt JSON (`text_to_insight/nodes/planner.py`)**: Substituídas as chaves duplas `{{` e `}}` no template de diretrizes, que estavam induzindo o LLM a alucinar o formato do JSON e gerar erros no decoder.
  Exemplo de erro no log:
                          [PLANEJADOR] Erro ao parsear JSON: {{
    "decisao": "revisando_estrategia"
}}

- **Documentação Atualizada** (`README.md`, `DESENVOLVIMENTO.md`): documentação e tutoriais refletindo o uso programático e por CLI.
@Fugant1 Fugant1 self-assigned this Jun 6, 2026
@Fugant1 Fugant1 requested a review from Petroncini June 6, 2026 00:38
@Fugant1

Fugant1 commented Jun 6, 2026

Copy link
Copy Markdown
Collaborator Author

Nos scripts de teste do spider 2, com a inferência de FK, bateu 70% de aprovação e 0.34 de f1-score médio.
Sem a inferência, com apenas o GraphRAG, bateu 20% de taxa de aprovação e 0.3 de f1-score médio.
Nos scripts do spider 1, o GraphRAG isolado alcançou 0.8 de f1-score médio.

- Refatoração dos testes de novas features (FKs virtuais, injeção matemática e loop do roteador) transferidos para test_componentes.py

- Regeneração dos arquivos de gravação (cassettes) do VCR para adaptar o test_integracao aos novos payloads do LLM

- docs: Inclusão do teste test_biblioteca_integracao.py na documentação de desenvolvimento
@Petroncini Petroncini merged commit 9ad2cc7 into dev Jun 6, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants