GraphRag实战-GraphRag与Neo4j集成案例

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 pdfrom neo4j import GraphDatabaseimport 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 
### 构建实现GraphRAG #### 一、基础知识准备 理解图(Graph)、图数据库(GraphDB)、知识图谱(Knowledge Graph)对于构建GraphRAG至关重要。这些概念构成了GraphRAG技术的核心基础[^2]。 #### 二、环境搭建 为了顺利开展项目,需安装必要的软件包和工具库: ```bash pip install neo4j torch transformers dgl ``` 上述命令用于安装Neo4J作为图数据库引擎;PyTorch提供深度学习框架支持;Transformers库来自Hugging Face, 提供预训练模型接口;DGL则是专门处理图形数据的深度学习平台。 #### 三、创建并填充图数据库 建立高质量的图数据库是提升GraphRAG性能的关键因素之一。这一步骤涉及定义节点属性模式、导入初始数据集以及设置索引来优化查询效率[^1]。 ```python from neo4j import GraphDatabase driver = GraphDatabase.driver("bolt://localhost", auth=("neo4j", "password")) def create_node(tx, label, properties): fields = ", ".join([f"{k}: ${k}" for k in properties]) query = f"CREATE (n:{label} {{{fields}}})" tx.run(query, **properties) with driver.session() as session: session.write_transaction(create_node, 'Person', {'name': 'Alice'}) ``` 此代码片段展示了如何向Neo4J实例中添加新记录。通过调整`create_node()`函数内的参数可以轻松扩展至其他类型的实体对象。 #### 四、设计检索增强机制 基于已有的图结构信息来改进传统的检索算法,使得系统能够更好地理解和利用实体间的关系链路。具体来说就是将自然语言处理技术和机器学习方法结合起来,在搜索过程中动态地考虑更多维度的信息输入[^3]。 ```python import torch from transformers import BertTokenizer, BertModel tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') text = "What is the relationship between Alice and Bob?" tokens = tokenizer(text, return_tensors='pt') outputs = model(**tokens) embeddings = outputs.last_hidden_state.mean(dim=1).squeeze() print(embeddings.shape) # tensor shape should be [768] ``` 这里展示了一个简单的例子,说明怎样使用BERT模型获取文本表示形式,进而辅助后续的任务执行过程。 #### 五、集成测试评估 完成以上各阶段工作之后,还需要进行全面的功能验证和技术指标测量,确保整个系统的稳定性和有效性。可以通过编写单元测试案例或者模拟真实应用场景来进行这项重要环节的工作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值