Graph RAG 体验 demo

操作流程

可以参照官网这个流程 https://microsoft.github.io/graphrag/posts/get_started/

也可以参照这个流程,但是我失败了。graphrag-accelerator Quickstart

提前准备 llm 和 embedding 账号

这里推荐 LLM 使用 deepseek,超省钱,主要是这个 graph RAG 太费 token 了。如果使用 deepseek 的话记得 max_tokens 设置 4096,因为官方最大支持 4096。

Embedding 可以使用openai 或者 Azure 的 text-embedding-3-small 模型。

初始化项目

在你工作目录内执行初始化命令

poetry run poe index --init --root .

他会自动生成 input 、output、prompts、cache目录,以及.env、settings.yaml文件

配置参数和索引文件

我们只需要修改这两个文件以及放入我们想要索引的文件即可。

现在你需要配置 settings.yaml文件内 llm 下的配置,以及embeddings下 llm 的配置。

我这边使用了一篇俄国作家契诃夫1884年创作的一篇短篇小说《变色龙》作为 demo。

将想要索引的文件放入input文件夹下。
《变色龙》契科夫 小说原文

构建索引

接着执行如下命令

python -m graphrag.index --root ./ragtest

进入漫长的等待,经过以下过程才能完成索引建立,耗时非常长,可能会耗费非常多的时间。所以第一次测试一定要使用小文件来测试,不然跑了很多 token又失败了会很难受。

下面是执行过程的一些截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Query

python -m graphrag.query \
--root ./ragtest \
--method global \
"奥楚蔑洛夫是一个什么样的人?"

我们使用 langchain写了一个普通的 RAG 代码附在下面,进行简单对比问题的回答情况
langchain rag 脚本

问题对比

奥楚蔑洛夫是一个什么样的人?

Graph RAG 300chunk size 100 overlap

奥楚蔑洛夫是一位警官,他在处理赫留金被狗咬伤的事件中扮演了关键角色。最初,他对狗的归属和伤害表示严厉态度,并打算采取行动惩罚放出狗的人。然而,当得知狗属于将军哥哥后,他的态度发生了显著变化,显示出他对权力的敏感和对法律执行的灵活性[Data: Reports (0, 2)].

此外,奥楚蔑洛夫在市集广场上执行巡回任务,与巡警一起巡逻,这表明他在社区中的执法地位和活动范围。他的行为不仅影响了他个人的形象,也反映了当时社会中权力结构和法律执行的复杂性[Data: Reports (1)].

总的来说,奥楚蔑洛夫是一个对权力敏感、执法态度灵活的警官,他的行为在一定程度上揭示了当时社会中权力与法律的关系。

Graph RAG 600 chunk size 50 overlap

 奥楚蔑洛夫是一位执法官员,他在处理赫留金被狗咬的事件中扮演了关键角色。他的行为和决策显示了他在社区中的权力和影响力。以下是对奥楚蔑洛夫的几个关键观察:

1. **对民众的态度**:奥楚蔑洛夫最初对赫留金被狗咬的事件表示怀疑,并质疑其受伤的真实性。他对赫留金进行威胁,这表明了官方对民众的态度可能存在一定的怀疑和不信任[Data: Reports (2)]。

2. **权力对执法态度的影响**:在得知狗可能属于日加洛夫将军后,奥楚蔑洛夫的态度有所转变。这显示了权力对执法态度的影响,表明他在面对更高权力时可能会调整自己的立场和决策[Data: Reports (2)]。

3. **决策的变化**:奥楚蔑洛夫在处理将军家的狗事件中展现了决策的变化。他最初决定狗是野狗并应被处理,但后来得知狗是将军哥哥的后改变了决定。这一变化可能反映了在处理公共事件时的复Data: Reports (3)]。

综上所述,奥楚蔑洛夫是一个在执法过程中表现出权力和影响力的人物,他的态度和决策受到外部因素(如权力关系)的影响,显示出在处理公共事件时的复杂性和不确定性。

RAG

奥楚蔑洛夫是一个市集的巡警,他在处理事件时表现出对上级(如乌拉吉米尔•伊凡尼奇)的尊敬和讨好,同时对普通民众(如赫留金)则显得傲慢和威胁。他的行为显示出他是一个趋炎附势、对权力敏感的人。

叶尔德林是一个什么样的人?

Graph RAG 300chunk size 100 overlap

叶尔德林是一名巡警,他在一次事件中被指派去调查狗的归属并准备相关报告。他的角色在确认狗的归属和处理事件中至关重要。叶尔德林被指示脱下奥楚洛夫的大衣,并可能被指派将狗送到将军家。这些行动显示他在事件处理中的重要性和责任。[Data: Reports (0)]

Graph RAG 600 chunk size 50 overlap

 叶尔德林作为巡警,在处理将军家的狗事件中扮演了关键角色。他被奥楚蔑洛夫命令调查狗的来源并准备报告,同时也被指派去将军家确认狗的归属,显示了他在将军家的狗有所了解,并提供关于狗品种的信息,巡警的角色在事件的调查和处理中起到关键作用[Data: Reports (2)]。

综上所述,叶尔德林是一个在事件处理中具有重要责任和作用的巡警,他不仅负责调查和报告,还提供关键信息和法律观点,对事件的解决起到了重要作用。

RAG

叶尔德林是奥楚蔑洛夫警官的下属,他在故事中负责执行警官的命令,如脱下和穿上警官的大衣,以及将狗送到将军家确认其身份。从描述中可以看出,叶尔德林是一个服从命令、执行任务的巡警。

狗起到了什么作用

Graph RAG 300chunk size 100 overlap

 狗在事件中扮演了核心角色,涉及其归属问题以及可能的恶行。狗被描述为一条宠物狗,被怀疑是日加洛夫将军家的,且被认为是可能的疯狗。狗因咬人而引起了和价值。[Data: Reports (0, 3, 2)]

此外,狗是事件中的关键元素,被描述为伶俐且咬了某人的手指。狗的归属问题成为事件的核心,影响了社区的动态。白毛小猎狗是事件中的关键角色,它坐在人群中央,表现出苦恼和恐惧。赫留金与白毛小猎狗之间存在冲突,赫留金似乎因为白毛小猎狗而受伤并表现出愤怒。[Data: Reports (3, 2)]

综上所述,狗不仅是事件的触发点,也是推动情节发展和人物关系变化的关键因素。

Graph RAG 600 chunk size 50 overlap

在将军家的狗事件中,白毛小猎狗起到了关键作用。首先,它是导致赫留金手指受伤的动物,这一行为直接引发了后续的事件 [Data: Reports (2)]。其次,狗在复杂性 [Data: Reports (2)]。

奥楚蔑洛夫最初决定狗是野狗并应被处理,但后来得知狗是将军哥哥的后改变了决定。这一转变不仅影响了事件的处理方式,也可能影响公众对执法机构的信任和看法 [Data: Reports (3)]。因此,狗不仅是事件的直接原因,也是影响事件发展和公众反应的重要因素。

RAG

狗在故事中起到了引发事件和冲突的作用。它被误认为是将军家的狗,导致人们对它的态度和行为发生了变化。最终,狗的身份和行为成为了人们争论和判断的焦点。

介绍下赫留金

Graph RAG 300chunk size 100 overlap

 赫留金是社区中一个引人注目的人物,他在一次事件中被狗咬伤,成为受害者。他的遭遇不仅引起了社区的关注,还激发了他寻求赔偿和正义的决心。赫留金在事件中表现出强烈的愤怒和揭露真相的决心,尽管他也成为了人群嘲笑的对象。

此外,赫留金的受伤和后续行动引起了奥楚蔑洛夫的关注,并成为事件的关键人物。他的角色在事件的发展中起到了至关重要的作用,推动了整个事件的进展。

Graph RAG 600 chunk size 50 overlap

 赫留金是社区中的一个关键人物,他遭受了不公正的待遇。具体来说,他的手指被一只白毛小猎狗咬伤,这一事件在社区中引起了关注。赫留金在人群中展示他受区中的弱势地位。这些情况揭示了赫留金在社区中的复杂处境和他对正义的坚持。[Data: Reports (2)]

RAG

赫留金是一位首饰匠,他在与他人谈论木柴时,被一条狗咬伤了手指。他要求赔偿,认为法律不应让人忍受畜生的伤害。人群和官员奥楚蔑洛夫对此事进行了讨论和处理。

可以发现确实如论文所说,Graph RAG 在全面性和多样性上 效果出众,但是朴素 RAG 的回答相对更加直接。

使用Neo4j 可视化

这个可视化是从 github 上看一个大佬分享的(原文地址)。

下载运行 neo4j 的 docker

docker run \
    -p 7474:7474 -p 7687:7687 \
    --name neo4j-apoc \
    -e NEO4J_apoc_export_file_enabled=true \
    -e NEO4J_apoc_import_file_enabled=true \
    -e NEO4J_apoc_import_file_use__neo4j__config=true \
    -e NEO4J_PLUGINS=\[\"apoc\"\] \
    neo4j:5.21.2

安装依赖

pip install --quiet pandas neo4j-rust-ext

浏览器设置

浏览器打开http://localhost:7474/,然后输入默认用户名neo4j,默认密码neo4j即可登录,登录之后要求重设密码。

执行脚本

下面脚本已经调整好了,可以直接使用脚本,修改对应 OPENAI_API_KEY、GRAPHRAG_FOLDER、NEO4J_PASSWORD 参数即可。
neo4j转换成图的脚本

也可以直接看我这边生成好的图。

http://10.189.124.193:7474/browser/

Username: neo4j

Password: liujiangbo

浏览器查看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他

因为免费的 neo4j 只支持 1 个 db,不支持多个。

如果想要用新数据,我们可以执行下面两个命令删除现有数据。修改GRAPHRAG_FOLDER, 再重新执行上面的 py 脚本即可再次生成。

删除所有关系 MATCH ()-[r]-() DELETE r;

删除所有节点 MATCH (n) DELETE n;
当然,我这里也写了对 Graph RAG 的解析和自己的理解

Graph RAG 图的检索增强生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天马行空波

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

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

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

打赏作者

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

抵扣说明:

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

余额充值