GraphRAG+SchemaCrawler para Dev#12
Merged
Merged
Conversation
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.
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. |
- 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.