graphrag最近引起了极大的关注,我在之前的两篇文章中分别介绍了GraphRag-知识图谱结合LLM 的检索增强的原理及GraphRag安装部署及简单测试,有兴趣的同学可以自行查看。今天重点聊一下GraphRag实战,将GraphRag与Neo4j集成实现一个简单的查询案例。
简单来讲,graphrag是从非结构化文本中提取实体及其关系,通过提取这些结构化信息来构建知识图谱,然后将这些实体通过Leiden算法进行社区划分并总结
这篇文章的重点是:将graphrag输出的结果存储到Neo4j,然后通过langchain和llamaindex等框架实现基于Neo4j的检索能力
本次GraphRag实战使用的数据是Charles的“A Christmas Carol” (圣诞颂歌),之所以用这篇来测试,因为这篇文章的实体比较明确突出,提取起来简单准确,提取的过程这里不再赘述,可以参考上一篇文章GraphRag安装部署及简单测试,配置一下相关的模型参数,依然友情提示一下提取费用还是比较贵的,测试下来gpt-4o-mini相对性价比最高,成本也比较低,准确性也比较高。
graphrag结果导入Neo4j
graphrag生成的结果文件都是parquet文件,首先将这些文件导入到neo4j
import pandas as pd
from neo4j import GraphDatabase
import time
NEO4J_URI="bolt://localhost"
NEO4J_USERNAME="neo4j"
NEO4J_PASSWORD="password"
NEO4J_DATABASE="neo4j"
driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USERNAME, NEO4J_PASSWORD))
批量导入方法
def batched_import(statement, df, batch_size=1000):
"""
Import a dataframe into Neo4j using a batched approach.
Parameters: statement is the Cypher query to execute, df is the dataframe to import, and batch_size is the number of rows to import in each batch.
"""
total = len(df)
start_s = time.time()
for