Zero
大模型时代,受限于模型上下文限制,模型能同时聚焦的信息量有限,于是 RAG 应运而生。
RAG 即一种让 AI 模型能“引经据典”的技术。相较于传统语言模型这能基于模型训练时的静态数据生成回答,RAG 通过如下方式增强了模型的能力:
- 检索阶段(Retrieval):当用户提问时,系统首先分析问题,从外部的知识库(文档,数据库,网页等)中检索相关信息,找到与查询最相关的片段
- 生成截断(Generation): 将用户检索的问题和检索到的内容一起输入给语言模型,模型基于减缩到的真实信息生成回答。
传统 RAG 通常采用向量数据库作为底层设计,依靠将需要检索的资料(文档,图片,视频等)转变为向量数据,通过基于向量相似度(例如余弦相似度)来直接查找最相关的文档。然而这样带来的缺陷也就导致检索结果往往过于聚焦在某些片面的点上,而忽略好多内容之间的关联性。于是微软于 2024 年 7 月份推出了 GraphRAG 并在 Github 上开源,开创了 GraphRAG 这一新的 RAG 模式。
GraphRAG 通过引入图结构化知识标识,显著增强了传统 RAG 系统的能力,特别适合需要深度结合上下文理解和复杂关系分析的任务,让 AI 不仅能够找到相关信息,同时还能理解相关信息之间的复杂关系。
当然在微软的 GraphRAG 刚发布之初,这个项目依旧有着不小的局限性:
- 知识图谱是一次性生成,无法进行增量更新,每次变动资料原文都需要重新构建知识图谱。
- 构建知识图谱的过程成本极高,尤其是 AI token 消耗,因为需要将所有的文本内容切片送给 AI 总结内容,抽取结点,总结关系。
到了 2025 年也就是的今天,微软对于 GraphRAG 新增了若干特性:支持增量更新,支持了 DRIFT search,以及推出了成本极低同时保证效果的 LazyGraphRAG。
First - 增量更新和 DRIFT-Search
- 支持增量更新:新版本的 GraphRAG 会对输入的数据集中的文档切片做唯一性校验以及打上版本标签,之后每次重新 Index 时都会对新输入的内容做增量对比,判断是否有文档的新增或者删除,而后仅针对变化的部分做出进一步处理,包括实体,关系,文本单元和社区等等。
- DRIFT-Search: GraphRAG 会针对输入的文档分片进行实体,社区(Community)等概念的抽取,同时在 Search 中直接检索这些概念体以定位内容。默认提供全局搜索(global-search)和本地检索(local-search)。
- 全局检索:会横跨整个数据集,综合不同层次来源的实体,社区以回答一个需要广泛了解整个数据库才能回答的问题。全局搜索对连接分散信息很有效但是需要占用大量资源。
- 本地检索:针对查询目标优化,从与用户输入密切匹配的较小的文档自己中提取,当此答案位于少量文本内时效果最佳。
- DRIFT 检索:通过在搜索过程中包含社区信息,引入一种新的本地检索查询办法:当用户提交查询时,首先会将其与其语义相近的 K 个社区报告做比较,生成一个初始回答和若干后续问题,这里相当于一个初步的全局检索。之后使用局部搜索执行上一个步骤中生成的若干后续问题,产生额外的中间答案和新的后续问题,在这之后不断的遍历后续问题最终满足到终止条件。最后输出答案时根据与原始查询的相关性进行排序并输出最终结果。
Second - LazyGraphRAG
LazyGraphRAG,顾名思义的 Lazy 同时依靠 Lazy 节约了大量的大模型 Token 开销。
之前版本的 GraphRAG 简单点在 Index 索引阶段需要将文档所有内容切片然后交给大模型,然后进行实体,关系,社区的抽取,基本差不多是整篇文档需要走多遍 LLM 因此成本极高。而 LazyGraphRAG 在初始 Index 索引时使用 NLP 自然语言处理以及关键词提取等方法来提取层次化的图谱结构,所有有关索引的汇总工作将全部“偷懒”到查询时期,以这样的方式大幅度降低索引和检索的成本。
LazyGraphRAG 使用传统 GraphRAG 0.1%的索引成本(与向量 RAG 基本相同),和 1/700 的检索查询成本,依靠 GraphRAG 4%的成本可以得到“显著超越所有竞争方法”(以上为官方数据)
LazyGraphRAG 并不是一个独立的项目,其直接包含于原始的 GraphRAG 项目,作为其索引器的可选方案之一。
二者的具体对比表格:
GraphRAG | LazyGraphRAG | |
---|---|---|
建立索引 | 使用 LLM 提取和描述实体和关系:1. 使用 LLM 总结每个实体和关系 2. 同时使用图形优化算法优化实体图并提取分层社区结构 | 使用 NLP 名词短语等关键词概念,使用统计图来优化提取层次社区结构 |
汇总索引 | 使用 LLM 总结每个社区中实体的关系 | 无 - “懒惰”得将这部分工作推迟到查询时 |
优化查询 | 无 - 始终使用原始查询 | 使用 LLM 来识别相关子查询并将它们重新组合成单个可扩展的查询,使用概念图中的匹配概念细化子查询 |
匹配查询 | 无 - 使用所有社区的摘要回答所有的查询(广度优先策略) | 针对 q 个子查询,1. 使用文本块和社区的关系与原始查询的相似性做文本块排序 2. 取前 K 个文本块对其社区进行排名(最优结果在前)。3.使用 LLM 对排序结果的文本块进行评级,在 z 个连续的社区云产生相关文本块之后递归到相关子社区,当没有社区或者达到阈值时终止 |
映射答案 | 使用 LLM 以原始查询并行查询随机批次的社区摘要内容 | 1. 对 q 个子查询中的每一个:1.从相关文本块构建知识图谱子图 2.使用概念的社区将相关的分组组合在一起 3.使用 LLM 从相关的块组中提取子查询相关的声明,作为仅关注相关内容的方式 4. 对提取的文明进行排名和过滤,以适应预定义的上下文窗口大小 |
综合答案 | 使用 LLM 根据原始回答和上一步的映射回答得出最终结果 | 使用 LLM 通过提取映射回答扩展查询 |
Third - 实操
- 准备一个干净的 python 环境,推荐 python 版本为 3.10-3.12,本文将要演示的 GraphRAG v2.7.0
|
|
- 为只是图谱创建一个文件夹名例如
guimizhizhu
,同时在内部创建子文件夹input
用作数据输入文件夹,将样例数据拷贝到input
文件夹内。这里以小说“诡秘之主”作为测试数据。
|
|
- 使用如下命令初始化 GraphRAG 项目,以下命令将会常见出
.env
文件和settings.yaml
文件在./guimizhizhu
文件夹中。
|
|
编辑
.env
文件,将GRAPHRAG_API_KEY
替换为对应的 openai api key。(可选)如果是 Azure api key 则还需要在
settings.yaml
中添加或修改如下额外的参数
|
|
- LazyGraphRAG 模式下官方内置的 NLP 模型默认对英文的兼容性更好,因此如果需要索引中文文档需要修改
settings.yaml
中extract_graph_nlp
相关的内容如下, 修改extractor_type
为cfg
,添加model_name
参数数值为zh_core_web_sm
如果使用的是英文文档则无需配置此步骤。
|
|
- 使用如下命令开始对
inputs
文件夹中的文档进行索引,以下给出两个索引命令,对应传统 GraphRAG 以及 LazyGraphRAG(官方称为 FastGraphRAG)
|
|
- 针对索引完成的项目进行检索
|
|
- 更新现有知识图谱
|
|
Forth - 结果对比
这里首先使用《诡秘之主》小说(一本克苏鲁风格的小说)内容分别做 fast(LazyGraphRAG)和 standard(GraphRAG)然后在相同查询模式下对同一个问题的输出做对比。
Q1: 小说中共提到了哪些神明,他们的位格和层次分别是什么,请全部罗列出来。
同在 Global Search 的模式下,fast 得到的结果中某些实体的认知明显更加模糊,对于书中神明的认知和位格了解程度不高。
Fast Global Search
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
在小说中,提到的神明及其位格和层次如下: ### 高位神明 1. **七神**:包括现任的六位神明,他们是高位的神灵,具有极大的影响力和权威 [Data: Reports (58)]。 2. **死亡之神**:作为一个重要的神灵,死亡之神在其领域中占据中心地位,尽管其形象是腐朽的,但其力量依然强大 [Data: Reports (111, 217)]。 3. **灵之神**:同样是高位神明之一,参与了“救赎蔷薇”组织 [Data: Reports (58)]。 4. **真实造物主**:一个强大的神灵,其影响力超越其他神灵,甚至能够改变克莱恩的形态 [Data: Reports (10)]。 5. **海神卡维图亚**:一个高位存在,通过仪式被频繁召唤,显示出其在神秘层级中的高地位 [Data: Reports (17)]。 6. **夜之女神**:在神秘社区中扮演关键角色,影响着各种实体的战略行动 [Data: Reports (187)]。 7. **星之女神**:在贝克兰德的权力动态中发挥重要作用 [Data: Reports (65)]。 ### 其他重要神灵和实体 1. **银色巨蛇**:类似于神灵的高位超自然实体,参与克莱恩的调查,暗示其威胁和影响力 [Data: Reports (212)]。 2. **灯神**:与克莱恩进行谈判,表明其在社区中的重要地位 [Data: Reports (192)]。 3. **欺诈之神阿蒙**:试图夺取“源堡”的控制权,显示出超凡实体之间的权力斗争 [Data: Reports (187)]。 4. **红天使与白圣女**:在贝克兰德的事件中扮演重要角色,影响神秘事件的结果 [Data: Reports (31, 187)]。 5. **灾厄女王**:一个具有丰富历史的强大实体,与角色如阿尔杰互动,提供通往力量的路径 [Data: Reports (180)]。 6. **愚者**:一个神秘而强大的实体,被阿尔杰提及为可能的净化和指导来源,显示出其在神秘领域中维持平衡的角色 [Data: Reports (180)]。 ### 组织与历史影响 1. **救赎蔷薇**:包括多位高位神灵成员,如风之天使、智慧天使和纯白天使,他们曾背叛古老的太阳神,这一背叛标志着神圣历史的重大转折 [Data: Reports (58)]。 2. **古老的太阳神**:被月亮城社区所崇拜,象征着纯洁和温暖 [Data: Reports (223)]。 这些神明和实体在小说中构成了复杂的神秘层级和权力动态,影响着故事的发展和角色的命运。
Standard - Global Search
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
在小说中提到的神明众多,他们在不同的神话和历史背景中扮演着重要角色。以下是一些主要神明及其位格和层次的概述: ### 主要神明 1. **愚者先生**:被克莱恩和多里安等人崇拜,寻求保护以免受诅咒的影响 [Data: Reports (87)]。 2. **欲望母树**:被称为“恶魔之父”和“迷失心灵之神”,通过间接手段施加影响,威胁主角克莱恩等人 [Data: Reports (410)]。 3. **时天使阿蒙**:被称为“亵渎者”和“时间天使”,在神秘事件中扮演重要角色,目标是成为真正的神 [Data: Reports (596)]。 4. **黑夜女神**:与黑暗、梦境和秘密的领域紧密相连,能够暂时隐藏其他神明,显示出显著的力量和影响力 [Data: Reports (584)]。 5. **古代太阳神**:作为一个基础性人物,其行为和预言塑造了世界的历史和文化景观 [Data: Reports (91)]。 6. **知识与智慧之神**:北大陆七大正神之一,参与神战,反对阿蒙成为“神秘主宰” [Data: Reports (587)]。 7. **大地母神**:六位真神之一,象征着滋养和生命的特质 [Data: Reports (575)]。 8. **永恒烈阳**:与太阳途径相关,被尊为北大陆的七位正统神明之一 [Data: Reports (588)]。 9. **风暴之主**:与风暴和海洋相关的强大神明,受到水手、渔民和海盗的崇拜 [Data: Reports (587)]。 10. **死神**:在西贝鲁恩地区有显著的影响力,尤其是在社会条件较为动荡的地区 [Data: Reports (472, 299)]。 ### 其他神明 - **海神**:与克莱恩有复杂的关系,涉及神秘的仪式和精神上的联系 [Data: Reports (13)]。 - **战争之神**:北大陆七位正统神祇之一,与“守护者”序列相关联 [Data: Reports (591)]。 - **莉莉丝**:被称为血族的始祖,与“月亮”途径有关联 [Data: Reports (723)]。 - **诡秘之主**:与灰雾和西大陆的封印有关,其意志部分复苏 [Data: Reports (138)]。 - **上帝**:宇宙层次中的三大支柱之一,历史上尝试容纳多个“源质” [Data: Reports (138)]。 - **真实造物主**:被视为潜在的危险神明,积极塑造环境和挑战 [Data: Reports (508)]。 - **隐匿贤者**:象征着秘密和智慧,尽管被视为邪神,但其影响力仍然延伸 [Data: Reports (779)]。 这些神明在小说中通过不同的途径和方式影响着世界的运作和角色的命运。每个神明都有其独特的特征和影响力,构成了小说中丰富的神话体系。
Q2: 亚伯拉罕家族的血月诅咒 是因为什么原因导致的?
针对这个问题的回答似乎 Fast Index 在问题重点的把握上是比 Standard 下的更加准确的。
Fast Global Search
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
### 亚伯拉罕家族的血月诅咒 亚伯拉罕家族的血月诅咒与他们的祖先 Mr. Door 有着密切的联系。这个诅咒已经困扰家族超过一千年,给他们带来了动荡并威胁到他们的存在。据信,这个诅咒与 Mr. Door 在满月时的求救声有关,这些求救声无意中给家族带来了不幸 [Data: Reports (155)]。 ### Mr. Door 的历史背景 Mr. Door 是亚伯拉罕家族历史中的一个关键人物,被认为是在“四皇之战”中失踪的祖先。他的求救声被认为是家族诅咒的来源,这种联系突显了家族在追求神秘知识的同时与过去负担的斗争 [Data: Reports (155)]。 ### 家族内部的冲突 亚伯拉罕家族目前正面临内部的纷争,他们在如何处理祖先的遗产问题上存在分歧。家族内部关于是否应该释放这位祖先的争论,反映了在保护家族传统与确保家族生存之间的紧张关系。这种内部冲突也反映了更广泛的权力、责任以及过去行为后果的主题 [Data: Reports (218)]。 ### 结论 尽管报告中没有明确提到“血月诅咒”或其具体原因,但可以看出,Mr. Door 的求救声和家族对神秘知识的追求是诅咒的关键因素。家族内部的争论和冲突进一步加剧了这一问题的复杂性 [Data: Reports (218)]
Standard Global Search
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
### 亚伯拉罕家族的血月诅咒起因 亚伯拉罕家族,亦称为亚伯拉罕家族(亚伯拉罕家族),是一个古老的家族,曾在第四纪元都铎王朝时期非常显赫,以掌握“学徒”途径而闻名,被称为“天使家族” [Data: Reports (83, 5, 440)]. 然而,在四皇之战后,这个家族遭受了诅咒,导致高序列成员的衰落,并在后代中引发了疯狂和灾难 [Data: Reports (83, 5, 440)]. #### 诅咒的起源 诅咒的起源与一个神秘而强大的存在“门先生”密切相关。门先生的求救声阻止了家族产生半神,可能是一种保护形式 [Data: Reports (83, 440)]. 这种联系导致了一个持续千年的世代诅咒,据信源于家族祖先在四皇之战中的参与 [Data: Reports (83, 440)]. #### 神秘力量的影响 诅咒被认为受到神秘力量的影响,尤其是在满月和血月期间 [Data: Reports (466, 92)]. 预言指出,一个“学徒”将在一个隐藏存在的帮助下解除这个诅咒,这表明家族在神秘叙事中扮演着重要角色 [Data: Reports (466, 92, 547)]. #### 其他相关因素 此外,亚伯拉罕家族的灾难还与极光会的秘密圣徒布提斯有关。布提斯与“真造物主”的关系及其强大的力量可能对家族的不幸有一定的影响 [Data: Reports (86)]. 综上所述,亚伯拉罕家族的血月诅咒是多种因素共同作用的结果,包括历史事件、神秘存在的影响以及家族在神秘领域中的重要地位。
Q3: 渎神者阿蒙是谁?
这个问题中 Fast 模式下回答有若干不太正确的地方,诸如“历史间隙”,“精神线”等词汇其实与“阿蒙”本人并无关系,而是与男主人公的能力相关,推测可能在 NLP 构建知识图谱的过程中通过关键词抓取的方式把这些词与“阿蒙”本人进行了关联。
Fast Global Search
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
### 渎神者阿蒙的背景 阿蒙是一个极具威胁的实体,以其操控和欺骗能力而闻名。他被称为“欺诈之神”,在神秘领域中扮演着重要角色。阿蒙的家族历史神秘,传说他们掌握了窃取神力的秘密,因此被称为“渎神者” [Data: Reports (174)]。阿蒙家族是支持都铎王朝建立的五大家族之一,仅次于血皇帝 [Data: Reports (174)]。 ### 阿蒙的能力与影响 阿蒙以其操控现实的能力而著称,能够在历史裂隙中改变现实的结构。他可以扩展自己的形态,操控其他实体的“精神线”,展示了其强大的力量和战略意图 [Data: Reports (262)]。此外,阿蒙还能够操控时间和空间,这在“尸体教堂”以及与“旧日之盒”的互动中得到了体现 [Data: Reports (247)]。 ### 阿蒙的战略与对手 阿蒙以其深谙神秘动态的欺骗手段而闻名,他曾利用克莱恩的名字制造混乱,从而操控局势 [Data: Reports (140)]。克莱恩作为神秘领域的核心人物,采取了一系列策略来躲避阿蒙的追捕,显示出阿蒙作为克莱恩的重要对手的角色 [Data: Reports (140)]。 ### 阿蒙的家族与历史 阿蒙家族声称自己是古代太阳神的后裔,这一主张由于当时神话记录中缺乏已知的太阳神而令人困惑 [Data: Reports (174)]。这一家族与神性实体的联系暗示了他们可能对历史事件产生了影响,并影响了社区对他们的看法 [Data: Reports (174)]。 ### 阿蒙的冒险与探索 阿蒙曾进入混沌之海,寻求埋藏的历史和世界的真相。这次旅程并非自愿,而是通过其化身之间的投票过程选出的 [Data: Reports (11)]。混沌之海切断了阿蒙与其主体和其他化身的联系,导致了一种独立状态,这种独立性既提供了潜在的自主权,也带来了欺骗和背叛的风险 [Data: Reports (11)]。 ### 结论 阿蒙是一个复杂而强大的存在,其操控和欺骗能力使其在神秘领域中占据重要地位。他的家族历史和与神性实体的联系为其增添了神秘色彩,而他在混沌之海的冒险则展示了其对历史和真相的追求。阿蒙的存在对神秘领域的平衡构成了持续的挑战。
Standard Global Search
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
### 渎神者阿蒙的身份与背景 阿蒙,又被称为“欺诈之神”和“时之天使”,是神秘社区中的核心人物,以其复杂的性格和强大的能力而闻名。他的能力包括时间操控和创造化身,使他成为一个极具威胁的存在 [Data: Reports (141, 596, 456, 83, 438, +more)]。阿蒙的终极目标是通过整合不同途径的独特特性成为真正的神 [Data: Reports (596)]。 ### 阿蒙的影响力与目标 阿蒙在神秘和超自然的对抗中扮演着重要角色,他的行为常常以欺骗和操控为特征。他的影响力不仅限于个人互动,还影响到各种事件和角色,包括阿兹克和塔罗会 [Data: Reports (596, 456, 91, +more)]。阿蒙积极参与召唤“古神之子”的事件,并试图通过欺骗和操控来获取源堡的控制权,这凸显了他在神秘空间斗争中的重要性 [Data: Reports (264)]。 ### 阿蒙与克莱恩的互动 阿蒙与克莱恩的互动复杂多样,既是对手又是引导者。他们之间的紧张关系和竞争使得阿蒙成为克莱恩的主要对手之一 [Data: Reports (596, 83, 141, +more)]。阿蒙的战略性互动和对命运领域的操控,展示了他在神秘世界中的强大存在和影响力 [Data: Reports (596, 91, +more)]。 ### 阿蒙家族的历史与影响 阿蒙家族,亦称“天使家族”,是都铎王朝的贵族世家,与古代力量和秘密有着深厚的联系。这个家族以“盗贼”途径的掌握和时间操控的能力而闻名。他们自称是古代太阳神的后裔,因此被称为“渎神者” [Data: Reports (596)]。 ### 结论 综上所述,阿蒙是一个复杂而强大的角色,他的存在对神秘世界的稳定构成了重大威胁。他的目标、能力和与其他角色的互动使他成为神秘叙事中的关键人物 [Data: Reports (141, 596, 264, 456, 83, +more)]。
廷根市事件的起因经过结果是什么,造成了哪些影响?
- Fast Global Search
|
|
- Standard Global Search
|
|
- 部分问题甚至会在 Fast 模式下的索引中检索时出现死循环的场景,很长时间不出结果,例如:
- Q:小说中提到的22条序列分别是什么?
- Q:占卜家完整的序列是什么?
Fifth - 总结
LazyGraphRAG 与传统 GraphRAG 相比而言最大的优势是极大程度的的降低了索引与查询过程中对 LLM Token 的消耗,使得成本极为可观可控的同时(成本可以近似于传统向量 RAG)下得到普遍优于传统向量 RAG 的结果。
但是就他们二者本身对比而言,GraphRAG 在对于数据内容的认知广度和深度上都是远强于 LazyGraphRAG 的。尤其是目前 LazyGraphRAG 使用官方内置的几个 NLP 模型替代 LLM 去抽取知识图谱以及生成图谱层级,内置 NLP 模型对于非英语语言的语料处理存在明显不足。同时由于没有事先预生成好的社区 Community,导致 LazyGraphRAG 在部分检索场景下效果差强人意。
当然以上结论均在中文语境下完成的测试,但是其实官方原本默认支持的是因为,以及在知识图谱的生成过程中所有的内容其实都会被转化成英文交给大模型去认知(非LazyGraphRAG下),不排除这样也导致了中文语境下不佳表现。(例如可以很明显在 LLM 很多的回答中有混杂英文的情况,如将“门先生”翻译为 Mr. Door,但是小说原文并不存在这样的表述。)可能可以通过调整抽取过程中使用的 prompt 来改进这点?