深入解析 GraphRAG 的工作流程:从输入到知识图谱
GraphRAG 的整个工作流程可以分为多个阶段,每个阶段都有着特定的任务,从数据的加载到构建一个完整的图结构。Loading Input - 加载输入数据create_base_text_units - 创建基础文本单元create_base_extracted_entities - 基础实体提取create_summarized_entities - 实体汇总create_base_entit
在现代信息检索和生成应用中,图形增强的检索-生成(RAG)技术正在逐步成为主流,而 GraphRAG 则是其中的代表性应用之一。GraphRAG 通过将输入文本构建为知识图谱,不仅提高了信息的组织方式,还提升了检索与生成任务的质量。在这篇文章中,我们将详细解析 GraphRAG 的工作流程,并通过实例一步步展示其处理过程。
GraphRAG 工作流程概述
GraphRAG Indexer
├── Loading Input (InputFileType.text)
├── create_base_text_units
├── create_base_extracted_entities
├── create_summarized_entities
├── create_base_entity_graph
├── create_final_entities
├── create_final_nodes
├── create_final_communities
├── create_final_relationships
├── create_final_text_units
├── create_final_community_reports
├── create_base_documents
└── create_final_documents
GraphRAG 的整个工作流程可以分为多个阶段,每个阶段都有着特定的任务,从数据的加载到构建一个完整的图结构。以下是这些步骤的详细解析:
- Loading Input - 加载输入数据
- create_base_text_units - 创建基础文本单元
- create_base_extracted_entities - 基础实体提取
- create_summarized_entities - 实体汇总
- create_base_entity_graph - 创建基础实体图
- create_final_entities - 创建最终实体集
- create_final_nodes - 创建最终节点
- create_final_communities - 创建最终社区
- create_final_relationships - 创建最终关系
- create_final_text_units - 创建最终文本单元
- create_final_community_reports - 创建最终社区报告
- create_base_documents - 创建基础文档
- create_final_documents - 创建最终文档
我们将通过以下示例文本,逐步了解 GraphRAG 如何处理这些步骤。
示例输入文本
谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将共享核心算法和人工智能技术,预计将在未来五年内取得突破性进展。
1. Loading Input - 加载输入数据
首先,GraphRAG 需要从外部输入中加载数据。在这个阶段,系统从指定路径加载了上述输入文本。这是最基础的准备步骤,系统在读取文本时,也会进行一些基础清理,如去除空白和规范标点符号。这一步的目的是确保输入文本是干净和一致的,适合后续的处理。
2. create_base_text_units - 创建基础文本单元
在这一阶段,GraphRAG 将文本划分为多个较小的文本单元(text units),以便于后续的处理。这些文本单元通常基于句子或段落进行划分,使得每个单元具有独立的语义信息。
示例划分:对于我们的示例文本,系统将其划分为两个文本单元:
- “谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。”
- “CEO桑达尔·皮查伊表示,双方将共享核心算法和人工智能技术,预计将在未来五年内取得突破性进展。”
目的:
- 细化文本,使得每个单元易于分析。
- 减少复杂度,提高实体提取和关系分析的精度。
3. create_base_extracted_entities - 基础实体提取
系统对每个文本单元进行实体提取,识别出文本中的重要实体。这一步是通过自然语言处理(NLP)技术,例如命名实体识别(NER),从文本中提取出特定类型的信息,如人名、组织名、日期等。
示例实体提取:
- “谷歌公司”(组织)
- “2023年”(日期)
- “特斯拉”(组织)
- “自动驾驶技术”(概念)
- “桑达尔·皮查伊”(人名)
- “核心算法”(概念)
- “人工智能技术”(概念)
- “五年”(时间段)
目的:
- 将文本中的关键元素提取出来,形成结构化的数据,便于后续的分析和图谱构建。
4. create_summarized_entities - 实体汇总
在实体提取之后,GraphRAG 需要对这些实体进行汇总和标准化。实体汇总的目的是合并重复的实体并消除歧义。例如,将“谷歌公司”统一为“Google”,以确保整个数据集中的实体一致。
示例实体汇总:
- “谷歌公司” 被统一为 “Google”
- “桑达尔·皮查伊” 被标准化为 “Sundar Pichai”
- 最终得到以下实体集合:
- “Google”、“Tesla”、“Sundar Pichai”、“自动驾驶技术”、“核心算法”、“人工智能技术”、“2023年”、“五年”
目的:
- 消除重复实体,确保数据的一致性。
- 使得后续图谱构建中的实体节点更加准确和规范。
5. create_base_entity_graph - 创建基础实体图
在这个步骤中,系统基于提取的实体构建一个基础的实体图。每个实体作为图中的一个节点,节点之间的边表示实体之间的关系。
示例图构建:
- “Google” ↔ “Tesla”(合作伙伴关系)
- “Google” ↔ “自动驾驶技术”(研发关系)
- “Sundar Pichai” ↔ “Google”(从属关系)
目的:
- 创建初步的图结构,展示实体之间的联系。
- 这一图结构为后续的社区检测和关系进一步细化提供基础。
6. create_final_entities - 创建最终实体集
在这一阶段,GraphRAG 对之前的实体集进行进一步处理,以确保所有实体在不同上下文中具有唯一性并且高质量。系统会对实体进行消歧,确保每个实体的含义明确且不重复。
示例处理:
- 进一步确认 “Google” 仅指代公司,而不是其他可能的含义。
- 确保 “Sundar Pichai” 明确指代谷歌公司的 CEO。
- 最终实体集包括:“Google”、“Tesla”、“Sundar Pichai”、“自动驾驶技术”、“核心算法”、“人工智能技术”、“2023年”、“五年”。
目的:
- 提高实体的准确性,减少误解或错误。
7. create_final_nodes - 创建最终节点
基于最终的实体集,GraphRAG 创建图谱中的节点。每个节点不仅代表一个实体,还包含该实体的属性(如名称、类型)以及它在文本中的位置等详细信息。
示例节点创建:
- “Google”(类型:组织,出现位置:文本单元 1)
- “Tesla”(类型:组织,出现位置:文本单元 1)
- “Sundar Pichai”(类型:人名,出现位置:文本单元 2)
目的:
- 确保每个节点都包含丰富的上下文信息,便于图谱的进一步分析和操作。
8. create_final_communities - 创建最终社区
社区检测通过分析节点之间的关系,将紧密联系的实体组合在一起,形成社区。社区的形成可以帮助识别文本中的不同主题或子主题。
示例社区检测:
- 社区1:包含 Google、Tesla、自动驾驶技术、核心算法、人工智能技术,反映出合作研发的技术主题。
- 社区2:包含 Google、Sundar Pichai,代表公司与 CEO 之间的从属关系。
目的:
- 将相关的实体聚集在一起,便于理解文本的主题结构。
- 社区的形成有助于后续的信息检索和问答生成。
9. create_final_relationships - 创建最终关系
在这一阶段,GraphRAG 会分析每个社区中的节点,系统创建节点之间的最终关系,并对每个关系进行标注,说明关系的类型和性质。
示例关系创建:
- “Google” 和 “Tesla” 之间标注为合作关系。
- “Sundar Pichai” 和 “Google” 之间标注为从属关系(CEO)。
- “Google” 和 “自动驾驶技术” 之间标注为研发关系。
目的:
- 明确实体之间的具体关系,为后续的推理和回答生成提供支持。
10. create_final_text_units - 创建最终文本单元
每个文本单元在此阶段得到进一步增强,不仅包含原始内容,还附加了对应的实体和关系信息。这些增强的信息使得每个文本单元更加语义丰富。
示例文本增强:
- “谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。”(实体:Google, Tesla, 自动驾驶技术;关系:合作, 研发)
目的:
- 为后续的生成任务提供更全面的上下文支持。
11. create_final_community_reports - 创建最终社区报告
系统为每个社区生成详细的报告,报告中包含社区内所有的实体和关系,以及它们之间的联系。这些报告能够帮助总结每个社区的内容和主题。
示例社区报告:
- 社区 1 报告:
- 实体:Google, Tesla, 自动驾驶技术, 核心算法, 人工智能技术。
- 主要关系:Google 和 Tesla 的合作关系,共同研发自动驾驶技术。
- 主题描述:该社区围绕 Google 和 Tesla 之间的合作研发展开,主要涉及自动驾驶领域的技术共享和研发。
目的:
- 提供对每个社区的总结,以支持用户理解每个社区的主题和内容。
12. create_base_documents - 创建基础文档
基于文本单元和实体关系信息,GraphRAG 创建基础文档。这些文档将文本的内容结构化地呈现出来,便于后续的检索和生成。
示例基础文档:
Google 和 Tesla 宣布在 2023 年合作研发自动驾驶技术,双方将共享核心算法和人工智能技术。CEO Sundar Pichai 表示,这一合作预计将在未来五年内取得突破性进展。
(附加信息:Google ↔ Tesla [合作]; Sundar Pichai ↔ Google [从属])
目的:
- 生成结构化的文本,帮助系统更好地进行信息的检索和生成。
13. create_final_documents - 创建最终文档
在最后一步,GraphRAG 整合所有信息,生成最终文档。最终文档包含了所有的文本、实体、关系和社区信息,形成了一个完整的知识库,供后续的检索和增强生成(RAG)任务使用。
示例最终文档:
社区 1 - Google 和 Tesla 的合作社区:
Google 和 Tesla 在 2023 年宣布合作,共同研发自动驾驶技术。Sundar Pichai 表示,该合作包括核心算法和人工智能技术的共享,预计五年内取得突破性进展。
(社区关系:Google ↔ Tesla [合作]; Google ↔ 自动驾驶技术 [研发]; Sundar Pichai ↔ Google [CEO])
目的:
- 整合所有的处理结果,形成完整、结构化的文档,供后续的 RAG 模型使用。
总结
GraphRAG 通过多步骤将原始文本转化为结构化的知识图谱,为信息检索和生成提供了丰富的上下文支持。从文本的基础划分、实体提取到图谱的社区构建,每一步都在增加文本的语义深度和组织程度。这些最终生成的文档和图谱能够显著提高 RAG 模型的检索与回答质量,例如,当用户询问“谷歌与特斯拉的合作情况”时,GraphRAG 可以快速定位相关节点及其关系,并生成准确的回答。
如果你正在开发类似的系统或对 RAG 技术感兴趣,希望这篇详细的解析能帮助你理解 GraphRAG 的工作原理。欢迎在评论区交流你的想法或分享你的经验!
附录
执行日志:
$ python -m graphrag.index --root ./ragtest_test
Logging enabled at /Users/xxx/Documents/RAG/GraphRAG/ragtest_test/output/indexing-engine.log
🚀 create_base_text_units
id chunk chunk_id document_ids n_tokens
0 3bc34cda152c2cd07dc2a3c3a59d8a5b 谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将... 3bc34cda152c2cd07dc2a3c3a59d8a5b
[4fe1675455c7c894551a951ae99a075a] 89
🚀 create_base_extracted_entities
entity_graph
0 <graphml xmlns="http://graphml.graphdrawing.or..."
🚀 create_summarized_entities
entity_graph
0 <graphml xmlns="http://graphml.graphdrawing.or..."
🚀 create_base_entity_graph
level clustered_graph
0 0 <graphml xmlns="http://graphml.graphdrawing.or..."
🚀 create_final_entities
id name type ... graph_embedding text_unit_ids description_embedding
0 7116acb486744b61a7b5c4703afec26f 谷歌公司 ORGANIZATION ... None [3bc34cda152c2cd07dc2a3c3a59d8a5b] [-1.640625, -2.203125, -4.09375, 0.41015625,
-...
1 aaa9bcb2e9d94f9e833f1f9107e37712 特斯拉 ORGANIZATION ... None [3bc34cda152c2cd07dc2a3c3a59d8a5b] [-1.6796875, -3.109375, -6.40625, -2.359375, -...
2 6f90552bec1040adb3ef97b74dedfd1d 桑达尔·皮查伊 PERSON ... None [3bc34cda152c2cd07dc2a3c3a59d8a5b] [-0.890625, -2.984375, -9.6875, -3.71875,
-1.4...
3 0b3d7c778438407282ee56e2e25d38b6 自动驾驶技术 ... None [3bc34cda152c2cd07dc2a3c3a59d8a5b] [1.0625, -1.515625, -4.625, -3.078125,
1.26562...
[4 rows x 8 columns]
🚀 create_final_nodes
level title type description source_id ... size graph_embedding top_level_node_id x
y
0 0 谷歌公司 ORGANIZATION 谷歌公司是一家全球知名的科技公司,主要从事互联网搜索、广告技术、云计算等业务 3bc34cda152c2cd07dc2a3c3a59d8a5b ... 3
None 7116acb486744b61a7b5c4703afec26f 0 0
1 0 特斯拉 ORGANIZATION 特斯拉是一家美国电动汽车及能源公司,产销电动汽车、太阳能板及储能设备 3bc34cda152c2cd07dc2a3c3a59d8a5b ... 2 None
aaa9bcb2e9d94f9e833f1f9107e37712 0 0
2 0 桑达尔·皮查伊 PERSON 桑达尔·皮查伊是谷歌公司的 CEO 3bc34cda152c2cd07dc2a3c3a59d8a5b ... 1 None
6f90552bec1040adb3ef97b74dedfd1d 0 0
3 0 自动驾驶技术 3bc34cda152c2cd07dc2a3c3a59d8a5b ... 2 None
0b3d7c778438407282ee56e2e25d38b6 0 0
[4 rows x 14 columns]
🚀 create_final_communities
id title level relationship_ids text_unit_ids
0 0 Community 0 0 [67a62ebf4b74461db29102e42e4a52a0, 18b9ef185fb... [3bc34cda152c2cd07dc2a3c3a59d8a5b]
🚀 create_final_relationships
source target weight description ... human_readable_id source_degree target_degree rank
0 谷歌公司 特斯拉 8.0 谷歌公司宣布与特斯拉合作,共同研发自动驾驶技术 ... 0 3 2 5
1 谷歌公司 桑达尔·皮查伊 5.0 桑达尔·皮查伊是谷歌公司的 CEO ... 1 3 1 4
2 谷歌公司 自动驾驶技术 8.0 自动驾驶技术是谷歌公司和特斯拉合作研发的 ... 2 3 2 5
3 特斯拉 自动驾驶技术 1.0 自动驾驶技术是谷歌公司和特斯拉合作研发的 ... 3 2 2 4
[4 rows x 10 columns]
🚀 create_final_text_units
id ... relationship_ids
0 3bc34cda152c2cd07dc2a3c3a59d8a5b ... [67a62ebf4b74461db29102e42e4a52a0, 18b9ef185fb...
[1 rows x 6 columns]
🚀 create_final_community_reports
community full_content ... full_content_json id
0 0 # 谷歌公司、特斯拉和自动驾驶技术\n\n该社区主要由谷歌公司、特斯拉和自动驾驶技术组成,其... ... {\n "title": "谷歌公司、特斯拉和自动驾驶技术",\n
"summa... a03df35b-b42b-4f40-8771-8c60e18f15b1"
[1 rows x 10 columns]
🚀 create_base_documents
id text_units raw_content title
0 4fe1675455c7c894551a951ae99a075a [3bc34cda152c2cd07dc2a3c3a59d8a5b] 谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将...
test1.txt
🚀 create_final_documents
id text_unit_ids raw_content title
0 4fe1675455c7c894551a951ae99a075a [3bc34cda152c2cd07dc2a3c3a59d8a5b] 谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将...
test1.txt
⠙ GraphRAG Indexer
├── Loading Input (InputFileType.text) - 1 files loaded (0 filtered) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 0:00:00
├── create_base_text_units
├── create_base_extracted_entities
├── create_summarized_entities
├── create_base_entity_graph
├── create_final_entities
├── create_final_nodes
├── create_final_communities
├── create_final_relationships
├── create_final_text_units
├── create_final_community_reports
├── create_base_documents
└── create_final_documents
🚀 All workflows completed successfully.
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)