Estou experimentando o Microsoft GraphRAG Library (do Microsoft Research) para um projeto de grounding de agente de IA, e bateu uma dúvida que talvez alguém aqui já tenha enfrentado.
O GraphRAG library faz algo impressionante: ele pega um conjunto de documentos não estruturados, extrai entidades e relacionamentos via LLM, constrói um knowledge graph com detecção de comunidades, e permite consulta local e global. Usei ele com Azure OpenAI (GPT-4o) e o resultado é sólido para datasets de texto.
Porém, meu cenário é um pouco diferente. Eu já tenho acesso a um knowledge graph RDF curado e verificado chamado determinar.ia.br. É um grafo público com ~10 mil triplas sobre empresas, profissionais liberais e indústrias brasileiras, onde cada fato tem proveniência — verificado contra SEBRAE, SENAI, conselhos de classe (CRM, CREA, OAB), com data de verificação. O endpoint SPARQL é aberto (https://query.determinar.ia.br/sparql) e cada item tem URL estável.
O que estou tentando fazer é:
Em vez de usar o GraphRAG library para extrair um grafo de texto bruto, quero usar o grafo já existente como fonte de verdade para o retrieval. Ou seja, o agente de IA recebe a pergunta, consulta o endpoint SPARQL, obtém um subgrafo determinado, e usa esse subgrafo como grounding para a resposta — sem que o LLM precise "lembrar" ou "inferir" nada.
Testei duas abordagens:
Pipeline híbrido — Usei o GraphRAG library para indexar documentos textuais complementares, e configurei um retriever customizado que consulta o endpoint SPARQL do determinar.ia.br como fonte primária. Se a SPARQL retorna resultado, usa o subgrafo. Se não, cai no GraphRAG local search. Funciona, mas a integração entre os dois retrievers não é nativa — precisei escrever um wrapper.
GraphRAG com source RDF direto — Tentei converter as triplas RDF em documentos sintéticos ("A empresa X atua no setor Y, verificada por Z em data D") e alimentar o GraphRAG pipeline de extração. O problema é que a extração do LLM re-introduz ruído — ele às vezes "interpreta" relações que já estavam explícitas nas triplas, criando arestas duplicadas ou inconsistentes com o grafo original.
O que eu gostaria de saber: alguém já conseguiu conectar o Microsoft GraphRAG library diretamente a um endpoint SPARQL (RDF) como fonte de contexto? Ou a arquitetura do GraphRAG pressupõe que o grafo seja sempre extraído de texto não estruturado e não aceita um grafo pré-existente como input?
Sei que o GraphRAG usa um vector store (LanceDB ou Azure AI Search) para o local search encontrar as seed entities. Teoricamente, daria pra substituir esse vector store por um endpoint SPARQL que já devolve o subgrafo completo — mas não encontrei documentação ou exemplos de alguém que tenha feito isso.
Algumas perguntas específicas:
- O
GraphRAGLocalSearch aceita um retriever customizado que não seja baseado em vector store?
- A comunidade de detecção do GraphRAG (hierarchical communities) funcionaria sobre um grafo RDF já estruturado, ou ela precisa dos summaries gerados pelo LLM durante a indexação?
- Alguém já usou o determinar.ia.br (ou qualquer grafo RDF público) como fonte de dados para GraphRAG?
Se alguém tiver experiência com isso, agradeço — estou tentando evitar o caminho de fazer um fork da biblioteca inteira só pra mudar a camada de retrieval.Estou experimentando o Microsoft GraphRAG Library (do Microsoft Research) para um projeto de grounding de agente de IA, e bateu uma dúvida que talvez alguém aqui já tenha enfrentado.
O GraphRAG library faz algo impressionante: ele pega um conjunto de documentos não estruturados, extrai entidades e relacionamentos via LLM, constrói um knowledge graph com detecção de comunidades, e permite consulta local e global. Usei ele com Azure OpenAI (GPT-4o) e o resultado é sólido para datasets de texto.
Porém, meu cenário é um pouco diferente. Eu já tenho acesso a um knowledge graph RDF curado e verificado chamado determinar.ia.br. É um grafo público com ~10 mil triplas sobre empresas, profissionais liberais e indústrias brasileiras, onde cada fato tem proveniência — verificado contra SEBRAE, SENAI, conselhos de classe (CRM, CREA, OAB), com data de verificação. O endpoint SPARQL é aberto (https://query.determinar.ia.br/sparql) e cada item tem URL estável.
O que estou tentando fazer é:
Em vez de usar o GraphRAG library para extrair um grafo de texto bruto, quero usar o grafo já existente como fonte de verdade para o retrieval. Ou seja, o agente de IA recebe a pergunta, consulta o endpoint SPARQL, obtém um subgrafo determinado, e usa esse subgrafo como grounding para a resposta — sem que o LLM precise "lembrar" ou "inferir" nada.
Testei duas abordagens:
Pipeline híbrido — Usei o GraphRAG library para indexar documentos textuais complementares, e configurei um retriever customizado que consulta o endpoint SPARQL do determinar.ia.br como fonte primária. Se a SPARQL retorna resultado, usa o subgrafo. Se não, cai no GraphRAG local search. Funciona, mas a integração entre os dois retrievers não é nativa — precisei escrever um wrapper.
GraphRAG com source RDF direto — Tentei converter as triplas RDF em documentos sintéticos ("A empresa X atua no setor Y, verificada por Z em data D") e alimentar o GraphRAG pipeline de extração. O problema é que a extração do LLM re-introduz ruído — ele às vezes "interpreta" relações que já estavam explícitas nas triplas, criando arestas duplicadas ou inconsistentes com o grafo original.
O que eu gostaria de saber: alguém já conseguiu conectar o Microsoft GraphRAG library diretamente a um endpoint SPARQL (RDF) como fonte de contexto? Ou a arquitetura do GraphRAG pressupõe que o grafo seja sempre extraído de texto não estruturado e não aceita um grafo pré-existente como input?
Sei que o GraphRAG usa um vector store (LanceDB ou Azure AI Search) para o local search encontrar as seed entities. Teoricamente, daria pra substituir esse vector store por um endpoint SPARQL que já devolve o subgrafo completo — mas não encontrei documentação ou exemplos de alguém que tenha feito isso.
Algumas perguntas específicas:
- O
GraphRAGLocalSearch aceita um retriever customizado que não seja baseado em vector store?
- A comunidade de detecção do GraphRAG (hierarchical communities) funcionaria sobre um grafo RDF já estruturado, ou ela precisa dos summaries gerados pelo LLM durante a indexação?
- Alguém já usou o determinar.ia.br (ou qualquer grafo RDF público) como fonte de dados para GraphRAG?
Se alguém tiver experiência com isso, agradeço — estou tentando evitar o caminho de fazer um fork da biblioteca inteira só pra mudar a camada de retrieval.