图谱驱动的智能:如何用Django实现GraphRAG的高效检索

前言

前面一章讲述了构建知识图谱来提高基于 RAG 的应用程序的准确性,并且使用 Neo4jLangChainRAG 应用程序中构建和检索知识图谱信息。

图形检索增强生成 (Graph RAG) 这种方法利用图形数据库的结构化特性,将数据组织为节点和关系,以增强检索信息的深度和上下文性。

由于篇幅可能会比较长,这一篇知识点较多,我单独分成了两个小节

一、给定 Cypher 查询结果图表

Cypher 是什么?可能很多小伙伴不太懂这个,一来就产生一个疑问,我这里简单描述一下。

Cypher 其实是 Neo4j的图形查询语言,可让您从图形中检索数据。

它就像是 SQL 语句,不过它是图形的 SQL,但它受到 SQL 的启发,因此我们可以专注于怎么从图形中获取什么数据(而不是如何获取数据)。

后面几章节我会详细对 Cypher 的 语句 进行详细说明。

打开我们 Jupyter(https://jupyter.org/try-jupyter/lab/index.html)或者 Colab(https://colab.research.google.com/drive/),因为下面使用到了 yfiles_jupyter_graphs 它支持的环境就是 Jupyter 环境,VS CodeGoogle Colab 环境:

%pip install --upgrade --quiet  langchain langchain-community langchain-openai langchain-experimental neo4j wikipedia tiktoken yfiles_jupyter_graphs
from neo4j import GraphDatabase
from yfiles_jupyter_graphs import GraphWidget

os.environ["NEO4J_URI"] = "bolt://*********"
os.environ["NEO4J_USERNAME"] = "ne*******"
os.environ["NEO4J_PASSWORD"] = "de**********"
os.environ["OPENAI_API_KEY"] = "sk-*********"

graph = Neo4jGraph()
# dire
ctly show the graph resulting from the given Cypher query
default_cypher = "MATCH (s)-[r:!MENTIONS]->(t) RETURN s,r,t LIMIT 50"

def showGraphDetail(cypher: str = default_cypher):
    # create a neo4j session to run queries
    driver = GraphDatabase.driver(
        uri = os.environ["NEO4J_URI"],
        auth = (os.environ["NEO4J_USERNAME"],
                os.environ["NEO4J_PASSWORD"]))
    session = driver.session()
    widget = GraphWidget(graph = session.run(cypher).graph())
    widget.node_label_mapping = 'id'

    return widget
showGraphDetail(default_cypher)

"MATCH (s)-[r:!MENTIONS]->(t) RETURN s,r,t LIMIT 50" 这就是一句我们的 Cypher 查询语句,它表示的意思是 “找出图数据库中所有通过非’MENTIONS’关系相连的节点对,返回这些节点和它们之间的关系,但最多只返回50组这样的结果。”

这个查询可以用来探索图中的各种关系,同时排除了 "MENTIONS" 这种特定的关系类型。

它对于了解图的结构和不同实体之间的连接方式很有用,尤其是当你想排除某种特定类型的关系时。
点击运行,出现下面界面:

我们在这里可以看到之前保存到 Neo4j 的图数据。

二、混合检索

图生成后,我们将使用混合检索方法,将向量和关键字索引与 RAG 应用程序的图检索相结合。

在检索过程中,从用户提出问题开始,然

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我码玄黄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值