Integrando Microsoft GraphRAG no Neo4j
A implementação do GraphRAG da Microsoft tem sido efetivamente utilizada para construir grafos de conhecimento a partir de documentos de origem processados por um Modelo de Linguagem Grande (LLM). A saída é informação estruturada sobre entidades e suas relações, que é posteriormente processada usando algoritmos de grafos como o algoritmo de detecção de comunidades de Leiden para gerar resumos. Este post discute como armazenar a saída do GraphRAG no Neo4j e implementar retrievers locais e globais usando LangChain ou LlamaIndex.
O conjunto de dados usado é "Um Conto de Natal" de Charles Dickens. Embora o processo de extração de grafos possa ser omitido, algumas configurações importantes incluem selecionar tipos de entidades (organizações, pessoas, eventos, geo) e definir o máximo de colheitas para realizar várias passes de extração para capturar informações abrangentes. A saída do pipeline de extração de grafos é armazenada como arquivos parquet, que são então importados para o Neo4j. O processo de importação pode ser feito usando uma instância de nuvem Aura gratuita ou um ambiente Neo4j local, com o código de importação fornecido como um caderno Jupyter no GitHub.
Depois de importar os dados para o Neo4j, uma análise de grafos simples é realizada usando consultas Cypher para entender a estrutura e o conteúdo dos dados extraídos. Por exemplo, a distribuição de entidades extraídas e graus de nó podem ser analisadas para obter insights sobre os dados. As entidades extraídas e suas relações são visualizadas e validadas usando o navegador Neo4j.
Para implementar retrievers, o retriever local utiliza busca de vetor para identificar nós relevantes e, em seguida, percorre informações vinculadas para injetar no prompt LLM. O índice de vetor é configurado e a consulta de recuperação é definida para coletar dados de texto relevantes, como pedaços de texto, relatórios de comunidade e descrições de relacionamento. Isso é implementado usando tanto LangChain quanto LlamaIndex, com a consulta de recuperação adaptada para cada framework.
O retriever global, por outro lado, itera sobre resumos de comunidades em um nível hierárquico especificado, gerando resumos intermediários e uma resposta final. Essa abordagem simplifica o processo de recuperação, mas requer selecionar o nível hierárquico apropriado para os melhores resultados.
Em resumo, a integração do GraphRAG com o Neo4j e frameworks de retriever como LangChain e LlamaIndex permite a recuperação de dados sofisticada de grafos de conhecimento estruturados, aproveitando tanto estratégias de recuperação locais quanto globais. Esta implementação mostra as aplicações práticas do GraphRAG na análise e consulta de informações estruturadas extraídas de fontes textuais.