再揭秘Graph RAG-面向实际场景的实现逻辑
GraphRAG 这玩意儿,说白了不只是个文本分析工具那么简单。它的核心魅力在于——知识模型和工作流程都是可以灵活配置的,能够针对不同的应用场景和用户需求进行适配。那这套东西具体是怎么运作的呢?大致可以归纳为以下几个关键步骤,用来高效处理文本数据并提取知识。
索引数据流
图形化知识模型(GraphRAG Knowledge Model)
先看看它的数据输出规范,定义在 GraphRAG 仓库的 python/graphrag/graphrag/model 文件夹里。主要包含以下几个实体类型:
- :系统输入,可以是 CSV 行或者 .txt 文件。
文档
- :用于分析的文本块,大小、重叠和数据边界都可以按需配置。
文本单元
- :从文本单元中提取出来的对象,比如人、地点、事件等。
实体
- :两个实体之间的联系,由协变量生成。
关系
- :提取出的声明性信息,往往与时间挂钩。
协变量
- :实体生成后,会进行层次社区检测,然后生成对应的报告。
社区报告
- :包含实体和文档的布局信息,用于渲染图形视图。
节点
默认配置工作流程
简单来说,就是把文本文档转换成上面那个图形化知识模型的过程。整个过程分为六个阶段:网络可视化、文档处理、社区总结、图形增强、图形提取、文本单元组合。

阶段详解
第1阶段:组合文本单元(Compose TextUnits)
目的很明确:把输入文档拆成更小、更容易处理的文本单元,方便后续提取。具体做法是根据用户配置的 token 数量来分割文档。文本单元大小默认是 300 个 token,如果需要加快处理速度,也可以用更大的单元。

第2阶段:图形提取(Graph Extraction)
这一步要分析每个文本单元,从中提取实体、关系和声明。实体和关系通过 entity_extract 提取,声明通过 claim_extract 提取。提取出来的子图会进行合并——同名同类型的实体、以及相同源目标的关系,都会合并到一起。

第3阶段:图形增强(Graph Augmentation)
目标是增强对实体间复杂关系的理解和表示。具体做法是:用层次 Leiden 算法做社区检测,然后用 Node2Vec 算法做图形嵌入。
这里多说一句,Leiden 算法是目前社区检测领域的热门选择,比传统的 Louvain 算法更稳定;而 Node2Vec 则能让节点在向量空间里“学会”邻居关系。
第4阶段:社区总结(Community Summarization)
这一步要生成不同层次社区的总结报告,提供对图形的高层次理解。方法很直接——直接用大型语言模型(LLM)来生成社区的概要和关键信息描述。

第5阶段:文档处理(Document Processing)
创建知识模型中的文档表,把文档转换成结构化的数据表。需要链接文本单元、生成文档嵌入。如果处理 CSV 数据,还可以配置添加额外字段。文档链接到文本单元后,就会生成文档嵌入。

第6阶段:网络可视化(Network Visualization)
最后一步,通过降维技术把高维数据可视化,方便理解和分析。这里用了 UMAP 算法,把实体-关系图和文档图都降到 2D 空间。

总结
GraphRAG 的知识模型和工作流程,提供了一套非常系统的方法来处理和分析文本数据、提取知识,并且以图形化的方式展示数据关系。对于文本密集型领域来说,这确实是一把利器。整个结构化解决方案可以简述为:
- :接收原始文本,执行预处理和文本单元化。
文本分割
- :通过 LLM 自动提取实体和关系,同时提取并评估文本中的声明,确保知识真实性。
知识提取
- :应用社区检测和图形嵌入技术,增强对数据结构的理解。
图形增强
- :生成社区报告,提供高层次的图形理解。
社区分析
- :构建文档表,链接文本单元,整合文档信息。
文档整合
- :应用 UMAP 等降维技术,实现数据的二维图形展示。
网络可视化
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名