RAGFlow v0.9 引入了对 GraphRAG 的支持,这是最近由微软开源的,据称是下一代检索增强生成(RAG)。在 RAGFlow 框架中,我们对 RAG 2.0 有更全面的定义。这个提出的端到端系统以搜索为中心,由四个阶段组成。最后两个阶段——索引和检索——主要需要一个专用的数据库,而前两个阶段定义如下:
- 数据提取:利用各种文档模型确保高质量的数据用于索引,从而避免“垃圾进,垃圾出”的问题。
- 文档预处理:在提取的数据发送到数据库之前,可以实施可选的预处理步骤,例如文档聚类和知识图谱构建。这些步骤主要增强多跳问答和跨文档查询。虽然GraphRAG确实很先进,但它只是RAG 2.0管道的一部分。

从版本v0.9开始,这部分已集成到RAGFlow中。下面,我们将探讨添加此部分的原因以及它与Microsoft的GraphRAG的比较。
知识图谱对于提高RAG的效果至关重要。简单的RAG系统通常检索与用户查询相似的内容,因此可能并不总是提供正确的答案。像总结问题这样的任务本质上是查询聚焦总结(QFS),可以通过使用知识图谱来处理。知识图谱可以有效地基于文本相关性聚合内容,并在对话过程中基于这些聚合内容生成总结,从而提高最终响应的准确性。许多现代AI搜索解决方案采用这种方法。顺便提一下,RAGFlow早期版本中引入的RAPTOR也采用文本聚类来提高检索效果;知识图谱特定的方法可以基于命名实体生成更“分层”的结果,为QFS查询提供更好的准确性和更全面的响应。现在,许多研究已经证明,知识图谱可以提高RAG输出的效果,并通过提供额外的上下文信息,使LLM在许多情况下生成更可解释的答案。这就是为什么GraphRAG的发布迅速引起了社区的极大兴趣。在RAG兴起之前,已经有许多努力将知识图谱用于问答(KGQA)。然而,它们在企业中广泛采用的一个主要障碍一直是知识图谱构建的自动化和标准化。随着LLM和RAG的出现,现在自动化这一过程变得更加可行,而GraphRAG是最显著的例子之一。
GraphRAG 显著简化了知识图谱的抽象和构建,并极大地促进了标准产品的推出。因此,我们在 RAGFlow 中实现 GraphRAG 时参考了这种方法。RAGFlow 在文档预处理阶段引入了知识图谱构建作为可选功能,以支持更复杂的问答场景。它还对原始的 GraphRAG 进行了以下改进:
- 引入了去重步骤。在原始的GraphRAG中,提取的命名实体直接使用而没有去重,这可能会导致将诸如“2024”和“2024年”或“IT”和“信息技术”等同义词视为不同的实体。这一挑战在学术上被称为实体解析,通常涉及复杂的算法。然而,RAGFlow利用LLMs进行去重,因为LLMs可以被广泛视为隐式知识图谱。
- 减少令牌消耗:GraphRAG 本质上消耗大量令牌,因为在其原始实现中,它需要将所有用户上传的文档多次发送到 LLM。这导致显著的令牌使用,特别是对于使用 SaaS 服务的 RAG 系统。RAGFlow 通过确保所有文档仅提交一次到 LLM 来优化此过程,从而最大限度地减少不必要的令牌消耗。为了从根本上解决这个问题,可以使用较小的独立模型来构建知识图谱。一个成功的例子是 Triplex,它基于具有 30 亿参数的 Phi-3 进行微调,提供比使用 LLM 节省数倍的成本。未来,RAGFlow 还将提供类似的解决方案,以进一步降低与 GraphRAG 相关的构建成本。
以下是RAGFlow版本的GraphRAG演示:
在文档解析阶段,用户可以选择“知识图谱”作为特定知识库的分块方法。他们还必须定义希望LLM提取的命名实体类型,例如“组织”、“人物”和“位置”,如下图所示:


选择分块方法后,您可以触发LLM提取实体并构建知识图谱。RAGFlow直观地显示这些知识图谱,包括节点名称、节点描述和“社区”:


知识图谱也可以显示为思维导图:

知识图谱的可视化对于用户调试对话至关重要。目前,RAGFlow支持使用任何连接的LLM来生成知识图谱。然而,LLM在数据提取方面的能力各不相同,未能提取知识图谱可能导致错误的对话。在这种情况下,可以使用可视化工具查看生成的知识图谱并分析对话。
目前,RAGFlow的知识图谱生成是在文档级别进行的,这意味着它不支持为知识库中的所有文档构建知识图谱。换句话说,RAGFlow中当前版本的GraphRAG无法链接从多个文档生成的知识图谱。此功能需要显著更多的内存和计算资源。RAGFlow将根据用户反馈在后期重新考虑此功能。
下图并排展示了从权力的游戏生成的对话。左侧的对话是使用GraphRAG生成的,表明GraphRAG为涉及嵌套逻辑的多跳查询提供了更深入和全面的答案。右侧的对话基于使用GENERAL解析方法解析的文档,没有显示结果。

总结来说,RAGFlow的GraphRAG实现旨在自动化构建RAG的知识图谱。虽然GraphRAG消除了与传统知识图谱算法相关的许多复杂性,但它并不是在RAG应用中使用知识图谱的最终解决方案。在实际的企业场景中,很大一部分数据不适合构建知识图谱,或者为所有数据构建知识图谱可能不划算。事实上,知识图谱还有许多其他应用,例如使用知识图谱来重写查询。RAGFlow计划在不久的将来支持这些功能。
参考文献
- GraphRAG, https://github.com/microsoft/graphrag
- 从局部到全局:一种图RAG方法用于查询聚焦摘要,https://arxiv.org/abs/2404.16130
- HippoRAG:受神经生物学启发的大型语言模型长期记忆,https://arxiv.org/abs/2405.14831
