GraphRAG local: RAG por grafo de conhecimento (guia avançado)
O RAG vetorial clássico responde muito bem a perguntas pontuais, mas entra em colapso assim que é necessário conectar vários documentos entre si para produzir uma síntese. O GraphRAG enfrenta esse problema construindo um grafo de conhecimento — entidades, relações, comunidades — a partir do seu corpus e, depois, consultando esse grafo em vez de uma simples base vetorial. Este guia mostra como implementar um RAG baseado em grafos com um LLM local usando o Ollama, sem chamar nenhuma API remota, e, sobretudo, quando essa abordagem realmente supera a busca vetorial.
#Por que usar o GraphRAG?
Imagine o corpus de um escritório jurídico: 200 contratos, 500 e-mails, 80 decisões. Você faz a pergunta: “Quais são os principais riscos jurídicos mencionados em nossos contratos com clientes nos últimos três anos, e com quais clientes recorrentes?”. Um RAG vetorial clássico busca 5 ou 10 chunks “relevantes”, fornece esses trechos ao LLM, e ele responde… com uma visão parcial. Ele não identifica os padrões transversais.
GraphRAG, em vez de retornar apenas trechos brutos, raciocina sobre uma estrutura: quem menciona o quê, quais entidades se repetem, quais relações as ligam. Para esse tipo de pergunta de síntese (« global ») sobre um corpus, o grafo supera a abordagem vetorial — exatamente o que demonstrava o artigo original da Microsoft Research em 2024.
#GraphRAG vs RAG vetorial: a verdadeira diferença
Seus documentos, sua IA: um RAG local confiável para seus PDFs, notas e e-mails — sem enviar nada para a nuvem.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
As duas abordagens compartilham um objetivo: injetar contexto externo no prompt do LLM para limitar as alucinações. Mas elas não recuperam a mesma coisa.
- RAG vetorial
- Divide o corpus em chunks, calcula um embedding por chunk e armazena em uma base vetorial (ChromaDB, Qdrant, FAISS). Ao receber uma consulta, recupera os k chunks mais próximos pela similaridade de cosseno.
- GraphRAG
- Solicita a um LLM que extraia entidades e relações de cada chunk, constrói um grafo, agrupa as entidades em comunidades e resume cada comunidade. Ao receber uma consulta, percorre o grafo ou agrega resumos de comunidades.
- Pontos fortes do RAG vetorial
- Rápido para indexação (alguns minutos para 10 MB de texto), barato, excelente para perguntas específicas (« qual é a cláusula de rescisão no contrato Acme? »).
- Pontos fortes do GraphRAG
- Excelente para perguntas gerais (“quais são os temas recorrentes?”, “quais entidades estão mais conectadas?”), rastreabilidade detalhada por meio das arestas, multi-hop nativo.
- Limitação da abordagem vetorial
- Perde as relações entre documentos. Uma pergunta que exige relacionar 3 documentos semanticamente distantes não recupera os trechos corretos.
- Fraqueza do GraphRAG
- Indexação pesada: é preciso passar cada chunk por um LLM. Para um corpus de 10 MB, conte com várias horas e muita VRAM, enquanto a indexação vetorial termina em 5 minutos.
#Como funciona internamente
Um pipeline GraphRAG completo encadeia 5 etapas. Todas utilizam o LLM (exceto o clustering).
- 01ChunkingO corpus é dividido em trechos de 500 a 1500 tokens, como em um RAG clássico. O tamanho tem impacto direto na qualidade da extração: se o trecho for curto demais, o LLM deixa de identificar relações; se for longo demais, ele esquece algumas delas.
- 02Extração de entidades e relaçõesCada chunk é enviado a um LLM com um prompt estruturado do tipo: “Extraia todas as entidades (pessoa, organização, local, conceito) e as relações entre elas. Formato JSON.” Esta é a etapa custosa — uma chamada ao LLM por chunk.
- 03Construção do grafoEntidades extraídas tornam-se nós, as relações tornam-se arestas. Entidades idênticas que aparecem em vários chunks são mescladas (resolução de entidades, geralmente por embedding ou por regra de normalização).
- 04Detecção de comunidadesUm algoritmo de agrupamento (Leiden no caso da Microsoft, um algoritmo mais simples no nano-graphrag) agrupa os nós fortemente conectados em comunidades. Essas comunidades são a chave do raciocínio “global”.
- 05Resumo das comunidadesO LLM gera um resumo textual de cada comunidade a partir das entidades e relações que ela contém. Esses resumos tornam-se as unidades de recuperação para perguntas globais.
Na consulta, o GraphRAG distingue dois modos: local (busca de uma entidade específica e de seu entorno) e global (agregação de resumos de comunidades). O LLM combina depois o contexto recuperado com a pergunta para produzir a resposta final.
#Ferramentas disponíveis para uma implantação local
- Microsoft GraphRAG
- A implementação de referência (github.com/microsoft/graphrag). Completa, bem feita, mas pesada: pensada inicialmente para Azure OpenAI, a adaptação para Ollama exige paciência. Indexação muito custosa em tokens.
- nano-graphrag
- Implementação mínima (~1000 linhas) compatível nativamente com Ollama (github.com/gusye1234/nano-graphrag). É essa implementação que vamos usar aqui: 10 vezes menos código para entender, com a mesma ideia.
- LightRAG
- Variante mais recente, otimizada para a latência das consultas. Compatível com o Ollama. Mais simples que o Microsoft GraphRAG, mais estruturada que o nano-graphrag.
- LlamaIndex KnowledgeGraphIndex
- Se você já está usando LlamaIndex, a integração é imediata, mas a abordagem é mais rudimentar (sem comunidades).
#Pré-requisitos
- Ollama instalado e funcionando
- Se não for o caso, siga primeiro nosso guia de instalação do Ollama.
- Um LLM de raciocínio sólido (14-24B)
- A extração de entidades exige bastante capacidade de processamento. gpt-oss 20B, Mistral Small 24B ou Qwen 3.5 9B (limite inferior) funcionam bem. Abaixo de 8B, o JSON gerado costuma estar malformado.
- Um modelo de embeddings local
- nomic-embed-text via Ollama, ou bge-m3 / multilingual-e5-large via sentence-transformers.
- No mínimo 16 GB de VRAM
- 12 GB servem como solução provisória para um modelo de 8-9B em Q4 (Qwen 3.5 9B), mas a indexação será lenta. 16 GB acomodam gpt-oss 20B ou Mistral Small 24B; 24 GB (RTX 4090, M-Max) oferecem uma margem confortável.
- Python 3.10+
- nano-graphrag e a maioria dos frameworks RAG modernos exigem 3.10 ou mais.
#1. Indexar um corpus com nano-graphrag
Prepare primeiro os modelos no Ollama. Para este tutorial, usamos gpt-oss 20B (quantização MXFP4 por padrão, ~14 GB) e nomic-embed-text como modelo de embeddings.
Instale em seguida o nano-graphrag em um ambiente venv dedicado.
O script de indexação cabe em cerca de vinte linhas. Ele é conectado ao Ollama pelo endpoint compatível com a OpenAI na porta 11434.
Inicie a indexação. Conforme o tamanho do corpus e a GPU, conte com um tempo de alguns minutos (1 MB de texto) a várias horas (50 MB).
No final, o diretório graphrag_cache/ contém o grafo serializado, os embeddings e os resumos de comunidades.
#2. Consultar o grafo
Após a indexação, a consulta é rápida (alguns segundos por requisição), pois o LLM passa a ler apenas o contexto recuperado do grafo, e não a totalidade do corpus.
#Custo de computação local: o que se pode esperar
Esta é a parte que surpreende todo mundo na primeira vez. Indexar 5 MB de texto em GraphRAG exige cerca de 50 a 200 vezes mais processamento do que um RAG vetorial sobre o mesmo corpus. Aqui estão referências concretas, em termos de ordens de grandeza.
- Corpus de 1 MB (~300 páginas)
- gpt-oss 20B (MXFP4) na RTX 4090: ~25 minutos de indexação. Na RTX 3060 de 12 GB (offload parcial): ~3 h. No Mac M3 Max de 64 GB: ~40 minutos.
- Corpus de 5 MB (~1500 páginas)
- RTX 4090: ~2h. M4 Pro 48 GB: ~3h. Acima desse volume, planeje deixar rodando durante a noite.
- Pico de uso de VRAM
- O modelo gpt-oss 20B (MXFP4) ocupa ~14 GB permanentemente. Os embeddings nomic adicionam ~1 GB. Com menos de 16 GB de VRAM, espere uma transferência parcial para a RAM, com execução na CPU (offload parcial).
- Custo por requisição
- Alguns segundos no modo local, 5 a 30 s no modo global (agregação de várias comunidades). Pouco oneroso em comparação com a indexação.
- Reindexação incremental
- O nano-graphrag atualmente não consegue atualizar corretamente um grafo existente. Adicionar 10% de novos documentos = executar novamente uma indexação parcial ou completa. O Microsoft GraphRAG lida melhor com esse ponto.
#Quando o GraphRAG realmente supera a busca vetorial
GraphRAG não é um substituto universal do RAG vetorial. Ele o supera de longe em certos casos de uso, mas tem desempenho claramente inferior em outros.
- Síntese de um corpus
- “Quais são os 5 temas principais discutidos em nossos 200 e-mails sobre o assunto X?” → GraphRAG vence com folga. A busca vetorial traz apenas 5 a 10 e-mails, enquanto o grafo agrega as comunidades.
- Perguntas multi-hop
- “Quais fornecedores trabalham tanto com a Acme quanto com a Beta Corp?” → O GraphRAG resolve isso percorrendo as arestas. A abordagem vetorial precisa encontrar os trechos corretos e contar com o LLM para fazer o join.
- Exploração de relações
- “Quem são as pessoas mais mencionadas em relação ao projeto Atlas?” → O GraphRAG foi concebido para isso (centralidade, vizinhança). A abordagem vetorial não tem a noção de relação.
- Perguntas e respostas factuais focadas
- « Qual a duração do aviso prévio no contrato Acme de 12 de março de 2024? » → RAG vetorial ganha: mais rápido, mais preciso, menos caro para indexar.
- Corpus que muda com muita frequência
- Se você adicionar documentos todos os dias, o custo de reindexação do GraphRAG se torna proibitivo. Continue usando busca vetorial ou busca vetorial + BM25.
- Corpus < 500 kB
- Não é necessário um grafo: o LLM pode ler tudo no contexto se você tiver 32k+ tokens. O GraphRAG só se justifica para corpora grandes demais para caber no contexto.
#Para se aprofundar
GraphRAG é um campo ativo: as implementações evoluem rápido, os benchmarks também. Algumas dicas para continuar.
- RAG local: introdução
- Se alguns conceitos do RAG vetorial ainda forem confusos, o guia de introdução é uma boa base antes de empregar o GraphRAG em produção.
- Estratégias de chunking
- A qualidade de extração de entidades depende diretamente do tamanho e da coerência dos chunks. Este guia aprofunda as boas práticas.
- Busca híbrida BM25 + vetorial
- Para combinar o GraphRAG com um retrieval clássico, veja primeiro a pesquisa híbrida: mesma lógica de união de sinais.
- Escolher sua GPU para IA local
- A indexação GraphRAG exige muitos recursos. Se você usa uma GPU de 8 a 12 GB hoje, passar para 16 a 24 GB muda radicalmente o ritmo de processamento.
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.