Sistemas tradicionais de Recuperação Aumentada por Geração (RAG baseados puramente em busca vetorial por similaridade de cosseno) desempenham um papel excelente quando a consulta do usuário busca um trecho factual específico presente em um parágrafo isolado. No entanto, quando a pergunta exige sintetizar ideias distribuídas ao longo de dezenas de relatórios corporativos, conectar relacionamentos societários ocultos ou responder a questões holísticas como ‘quais foram os principais fatores de risco mencionados nos projetos do último ano?’, o RAG vetorial clássico frequentemente falha. A abordagem GraphRAG, proposta pela Microsoft Research, resolve essa lacuna ao construir e explorar grafos de conhecimento estruturados a partir de textos brutos.
Combinando o GraphRAG com o banco de dados em grafo Neo4j e a linguagem Python, equipes de dados conseguem modelar entidades, extrair relações e criar comunidades temáticas que capacitam modelos de IA a responder tanto a consultas locais quanto a perguntas globais com precisão incomparável.
Resumo rápido
- GraphRAG supera a limitação de fragmentação da busca vetorial ao mapear entidades e conexões em grafos de conhecimento.
- Utiliza algoritmos de detecção de comunidades (como Leiden) para gerar resumos hierárquicos de grandes bases documentais.
- O Neo4j atua como repositório de persistência de alta performance para consulta de grafos via linguagem Cypher.
- Permite responder a perguntas de escopo global que exigem sintetizar centenas de documentos simultaneamente.
- Estrutura construída em Python com suporte a modelos de fundação abertos e proprietários via API.
Limitações do RAG vetorial e o conceito de GraphRAG
No RAG vetorial padrão, os documentos são divididos em pedaços (chunks) de tamanho fixo, transformados em vetores e armazenados em bancos como pgvector ou Pinecone. Ao realizar uma busca, o sistema recupera os top-K chunks mais próximos semânticamente da pergunta. O problema fundamental dessa abordagem reside na perda de contexto relacional: se a resposta depende de conectar uma informação da página 2 com uma consequência descrita na página 150, a busca vetorial dificilmente resgatará ambos os fragmentos no mesmo pacote de contexto.
O GraphRAG inova ao introduzir uma etapa de indexação estruturada. Um modelo de linguagem lê os textos e extrai entidades (pessoas, empresas, tecnologias, cidades) e as relações existentes entre elas. Esses nós e arestas formam um grafo de conhecimento interconectado. Em seguida, algoritmos de modularidade agrupam entidades relacionadas em comunidades e geram resumos consolidados para cada nível hierárquico. Para entender como conectar bases documentais vetoriais tradicionais antes de evoluir para grafos, veja nosso guia prático de RAG e bancos vetoriais e aprenda como funcionam os vetores em nosso artigo sobre o que são embeddings e como utilizá-los.
Essa arquitetura permite executar dois modos de consulta: a busca local (Local Search), que navega pelas entidades vizinhas no grafo, e a busca global (Global Search), que sintetiza resumos das comunidades de mais alto nível, unificando perspectivas que antes ficavam isoladas em arquivos dispersos.
Arquitetura técnica com Neo4j e Python
O ecossistema de implementação é composto por três blocos essenciais. O primeiro bloco é o extrator de entidades, construído com o framework GraphRAG em Python, que recebe os documentos brutos e orquestra as chamadas ao LLM para identificação dos relacionamentos. O segundo bloco é o banco de dados Neo4j, responsável por indexar os nós, propriedades e arestas, oferecendo suporte nativo à linguagem Cypher para consultas de caminhos mínimos e expansão de grafos.
O terceiro bloco é a interface de consulta, desenvolvida em Python (via FastAPI ou scripts de automação), que recebe a dúvida do usuário, determina se a estratégia deve ser vetorial, de grafo ou híbrida, monta o prompt final enriquecido e entrega a resposta fundamentada.
| Dimensão Avaliada | RAG Vetorial Tradicional | GraphRAG (Microsoft + Neo4j) |
|---|---|---|
| Consultas pontuais e factuais | Excelente desempenho e baixo custo | Excelente desempenho com rastreabilidade |
| Perguntas globais de síntese | Muito fraco; omite grandes porções da base | Excepcional; sintetiza através de resumos comunitários |
| Custo e tempo de indexação | Rápido e econômico (apenas embeddings) | Mais lento e custoso (exige chamadas de LLM para extração) |
| Exploração de relações indiretas | Incapaz de navegar por mais de 1 grau | Navega por saltos múltiplos (multi-hop reasoning) |
| Transparência do contexto | Retorna apenas fragmentos desconexos | Exibe nós, propriedades e caminhos navegados |
Passo a passo de implementação em ambiente de desenvolvimento
Para construir seu primeiro protótipo funcional, o roteiro técnico organiza-se em cinco fases práticas:
Na primeira fase, instale o Neo4j Community ou inicie um container Docker com a imagem oficial ‘neo4j:5.20’. No ambiente Python, instale as dependências executando ‘pip install graphrag neo4j langchain-community’. Na segunda fase, prepare sua pasta de dados de entrada com arquivos de texto puro devidamente limpos e codificados em UTF-8.
Na terceira fase, execute o comando de inicialização do GraphRAG para gerar o arquivo de configuração ‘settings.yaml’. Nele, configure os endpoints da sua API de inferência e os parâmetros de extração de nós. Na quarta fase, execute o pipeline de indexação para gerar o grafo e popular as tabelas no Neo4j com scripts em Cypher para criação de restrições de unicidade nos nós de entidades. Na quinta fase, implemente a função de consulta em Python, permitindo que a aplicação faça buscas combinadas utilizando índices vetoriais nativos do Neo4j e travessia de relacionamentos.
Estratégias de busca híbrida: combinando vetores e grafos
Em ambientes corporativos maduros, a melhor prática não é escolher entre vetores ou grafos, mas operar de forma híbrida. Quando uma pergunta chega, o sistema executa em paralelo a busca por densidade vetorial e a navegação por vizinhança no Neo4j. Se a consulta demandar dados factuais exatos (como o valor de um contrato específico), a recuperação vetorial fornece o trecho imediato.
Se a pergunta contiver conectivos como ‘por que’, ‘quais as consequências’ ou ‘quem são as partes relacionadas’, o componente de grafo expande as conexões e enriquece o contexto com as entidades vizinhas antes de enviar os dados para a janela de contexto do modelo generativo, alcançando um índice de assertividade sem precedentes em auditorias complexas.
Exemplo: uma consultoria de fusões e aquisições em São Paulo
Considere uma consultoria de fusões e aquisições (M&A) em São Paulo responsável por conduzir processos de due diligence em empresas de tecnologia e logística. Em cada projeto de auditoria, a equipe técnica recebe centenas de contratos de fornecimento, atas societárias, aditivos e processos judiciais que ultrapassam milhares de páginas em formato digital.
Anteriormente, o escritório utilizava uma ferramenta de busca vetorial comum. Embora encontrasse cláusulas específicas de rescisão, a ferramenta falhava miseravelmente quando o sócio líder perguntava: ‘quais empresas terceirizadas possuem contratos ativos vinculados a sócios minoritários ou partes relacionadas?’. A busca vetorial não conseguia conectar os nomes dos acionistas constantes nas atas societárias com os CNPJs das empresas contratadas descritas nos anexos de suprimentos.
Ao estruturar uma esteira de GraphRAG com Neo4j e Python, a consultoria extraiu entidades do tipo ‘Pessoa’, ‘Empresa’, ‘Contrato’ e relacionamentos como ‘É_SÓCIO_DE’ e ‘CONTRATOU’. Ao rodar uma consulta Cypher combinada com geração em linguagem natural, o sistema mapeou em menos de 10 segundos uma rede de três empresas prestadoras de serviço pertencentes a familiares de um diretor financeiro, apontando exatamente as páginas contratuais onde as assinaturas cruzadas apareciam. O achado foi determinante para a renegociação do preço de aquisição da companhia.
Otimização de custos de inferência com cache semântico de grafos
Em ambientes de produção com centenas de consultas diárias ao GraphRAG, é fundamental implementar uma camada de cache semântico sobre as travessias mais frequentes do grafo. Utilizando bancos em memória como o Redis acoplados ao Neo4j, consultas recorrentes sobre a estrutura societária ou regulamentos internos podem ser respondidas instantaneamente sem acionar novamente o modelo generativo.
Essa arquitetura de cache reduz os custos operacionais de chamadas de API em até 60% e garante tempos de resposta inferiores a 500 milissegundos para perguntas habituais dos colaboradores, mantendo a flexibilidade da navegação por grafos apenas para consultas inéditas ou que demandam cruzamentos atípicos de dados.
Erros comuns
Subestimar os custos de chamadas de API na etapa de indexação. Extrair entidades e gerar resumos de comunidades consome muitos tokens de entrada e saída. Execute testes prévios com amostras reduzidas de documentos para calibrar os prompts de extração.
Criar entidades genéricas demais sem categorização. Permitir que o modelo crie tipos vagos de entidades como ‘Coisa’ ou ‘Conceito’ polui o grafo e dilui a relevância das buscas. Restrinja os tipos de nós no arquivo de configuração.
Não configurar índices e restrições de unicidade no Neo4j. Inserir entidades sem criar índices nos rótulos e propriedades principais degradará drasticamente a velocidade das consultas em bases com milhares de nós.
Usar GraphRAG para bases extremamente voláteis que mudam a cada minuto. Como a geração de comunidades e resumos exige processamento intensivo, o GraphRAG é ideal para acervos documentais estáveis ou que são atualizados em lotes periódicos.
Perguntas frequentes
O GraphRAG funciona com modelos de linguagem de código aberto?
Sim. É perfeitamente possível configurar o GraphRAG em Python para apontar para endpoints locais executados via vLLM ou Ollama, utilizando modelos como Llama 3.3 ou Qwen 2.5, desde que possuam capacidade comprovada de saída estruturada em JSON.
Qual a diferença entre a busca local e a busca global no GraphRAG?
A busca local foca em uma entidade específica e expande seus nós vizinhos imediatos para responder dúvidas detalhadas. A busca global analisa os resumos pré-compilados das comunidades de nós, sintetizando temas amplos que abrangem todo o acervo documental.
O Neo4j é obrigatório para rodar o GraphRAG da Microsoft?
O pacote original da Microsoft armazena tabelas e arquivos em formato Parquet na pasta local. A integração com o Neo4j é uma evolução recomendada pela comunidade corporativa para permitir consultas dinâmicas em tempo real e visualização gráfica interativa das redes.
Como lidar com entidades escritas com grafias ligeiramente diferentes?
O pipeline de extração pode incluir uma etapa de resolução de entidades (entity resolution) em Python, utilizando cálculos de distância de Levenshtein ou embeddings para unificar nós duplicados sob um identificador canônico único.