agentic_huge_data_base / wiki
页面 RAGFlow · 6.5 高级特性:GraphRAG 与 RAPTOR·DeepWiki 中文全文译文

6.5 · 高级特性:GraphRAG 与 RAPTOR(Advanced Features: GraphRAG and RAPTOR)

复杂文档理解与引用检索 · 聚焦本章的模块关系、源码依据与实现要点。

项目RAGFlow 章节6.5 状态全文译文 模块入库与解析、文档对象与元数据、界面与交互、图谱与关系
源码线索
  • api/db/__init__.py
  • api/db/db_models.py
  • api/db/services/dialog_service.py
  • api/db/services/document_service.py
  • api/db/services/file_service.py
  • api/db/services/knowledgebase_service.py
  • api/db/services/llm_service.py
  • api/db/services/task_service.py
  • api/db/services/user_service.py
  • rag/nlp/search.py
模块标签
  • 入库与解析
  • 文档对象与元数据
  • 界面与交互
  • 图谱与关系
  • 系统架构

章节正文

高级特性:GraphRAG 与 RAPTOR

高级功能:GraphRAG 与 RAPTOR

相关源文件

以下文件为本 Wiki 页面的生成提供了上下文:

  • api/db/__init__.py
  • api/db/db_models.py
  • api/db/services/dialog_service.py
  • api/db/services/document_service.py
  • api/db/services/file_service.py
  • api/db/services/knowledgebase_service.py
  • api/db/services/llm_service.py
  • api/db/services/task_service.py
  • api/db/services/user_service.py
  • rag/nlp/search.py
  • rag/raptor.py
  • rag/svr/task_executor.py
  • web/src/components/auto-keywords-form-field.tsx
  • web/src/components/delimiter-form-field.tsx
  • web/src/components/entity-types-form-field.tsx
  • web/src/components/excel-to-html-form-field.tsx
  • web/src/components/llm-setting-items/slider.tsx
  • web/src/components/max-token-number-from-field.tsx
  • web/src/components/originui/number-input.tsx
  • web/src/components/page-rank-form-field.tsx
  • web/src/components/parse-configuration/graph-rag-form-fields.tsx
  • web/src/components/parse-configuration/raptor-form-fields.tsx
  • web/src/components/slider-input-form-field.tsx
  • web/src/constants/form.ts
  • web/src/hooks/parser-config-utils.ts
  • web/src/interfaces/database/document.ts
  • web/src/interfaces/request/document.ts
  • web/src/pages/dataset/dataset/use-change-document-parser.ts
  • web/src/stories/number-input.stories.ts

目的与范围

本文档介绍 RAGFlow 中的两项高级检索增强功能:GraphRAGRAPTOR,以及思维导图等可视化工具。这些功能通过创建额外的索引结构(超越标准的基于片段的向量搜索),提升了复杂文档的检索性能。

  • GraphRAG:通过实体和关系抽取,从文档内容构建知识图谱,支持基于图的遍历以处理复杂查询。
  • RAPTOR:通过递归聚类和摘要生成,构建分层摘要,创建多层级表示以实现更好的长上下文检索。
  • 思维导图生成:利用分层结构生成文档聚类的可视化表示。

这两项功能均为可选增强特性,通过 parser_config 对象按数据集进行配置,并由 task_executor.py rag/svr/task_executor.py:124-127 作为异步后台任务执行。

RAPTOR:面向树状组织检索的递归抽象处理

概述

RAPTOR 通过递归聚类文档片段并生成每层的抽象摘要,创建了一种树状索引结构。这种分层组织方式支持多粒度检索:原始片段用于获取具体细节,摘要节点用于获取更广泛的上下文。

该实现主要位于 rag/raptor.py rag/raptor.py:157-158 中,执行编排则在任务执行器层完成。

架构
RAGFlow · 架构 · 图 1
RAGFlow · 架构 · 图 1

RAPTOR 架构与代码实体映射

来源:rag/raptor.py:157-186rag/svr/task_executor.py:124-124rag/raptor.py:21-24

配置参数

RAPTOR 通过传递给 RecursiveAbstractiveProcessing4TreeOrganizedRetrieval 构造函数的参数进行配置,这些参数通常来自知识库解析器设置:

参数类型描述来源
max_clusterint每层最大聚类数。rag/raptor.py:174-174
thresholdfloat聚类的相似度阈值。rag/raptor.py:177-177
max_tokenint生成摘要的最大 Token 数。rag/raptor.py:179-179
promptstr用于摘要生成的大语言模型提示模板。rag/raptor.py:178-178
tree_builderstr树构建策略(例如 predicated)。rag/raptor.py:182-182
clustering_methodstr使用的算法(GMM 或 AHC)。rag/raptor.py:185-185
执行流程

RecursiveAbstractiveProcessing4TreeOrganizedRetrieval 类实现了构建分层树的逻辑。

  1. 任务触发task_executor.pyTASK_TYPE_TO_PIPELINE_TASK_TYPE 中识别出 raptor 任务类型,并启动处理流程 rag/svr/task_executor.py:122-124
  2. 跳过逻辑:系统使用 should_skip_raptor 根据文档状态判断是否需要处理 rag/svr/task_executor.py:50-50
  3. 聚类与摘要生成:使用高斯混合模型等算法对片段进行分组 rag/raptor.py:24-24。对于每个聚类,大语言模型生成一个摘要。
  4. 索引:RAPTOR 摘要片段通过 make_raptor_summary_chunk_id 分配唯一 ID 并进行索引。它们与一个"虚拟"文档 ID GRAPH_RAPTOR_FAKE_DOC_ID 关联,以区别于标准文档片段 rag/svr/task_executor.py:49-49api/db/services/task_service.py:39-39

来源:rag/svr/task_executor.py:122-124rag/raptor.py:21-24api/db/services/task_service.py:38-39

GraphRAG 与思维导图

知识图谱抽取

当任务类型映射到 PipelineTaskType.GRAPH_RAG 时,task_executor.py 会触发 GraphRAG 任务 rag/svr/task_executor.py:125-125。抽取过程受 kg_limiter 调控以管理并发,具体允许最多 2 个并发知识图谱任务 rag/svr/task_executor.py:149-149

思维导图生成

思维导图基于文档聚类或抽取实体的分层结构生成。MindMapExtractor api/db/services/dialog_service.py:47-47 在对话服务中使用,用于在聊天会话期间抽取分层概念以进行可视化。

RAGFlow · 思维导图生成 · 图 2
RAGFlow · 思维导图生成 · 图 2

GraphRAG 与思维导图代码实体映射

来源:api/db/services/dialog_service.py:47-47rag/svr/task_executor.py:125-126rag/nlp/search.py:37-38

实现细节
  1. 任务编排task_executor.py 将特定任务标签映射到管线类型:raptorgraphragmindmap rag/svr/task_executor.py:122-127
  2. 实体过滤rag/nlp/search.py 中的 Dealer 类支持通过图相关的元数据字段进行过滤,例如 knowledge_graph_kwdentity_kwdfrom_entity_kwdto_entity_kwd rag/nlp/search.py:126-129
  3. 搜索集成:在检索过程中,Dealer.search 方法将 knowledge_graph_kwd 包含在默认源字段(src)中,以便在获取文本片段的同时获取图元数据 rag/nlp/search.py:151-151

来源:rag/svr/task_executor.py:122-127rag/nlp/search.py:126-151

集成与缓存

缓存机制

为降低大语言模型调用成本并提升性能,RAGFlow 为 GraphRAG 和 RAPTOR 操作实现了缓存层。

  • 大语言模型缓存:通过 get_llm_cacheset_llm_cache 存储大语言模型生成的结果 rag/svr/task_executor.py:54-54
  • 嵌入向量缓存:在 RAPTOR 中通过 get_embed_cacheset_embed_cache 使用,以避免重复的向量计算 rag/raptor.py:32-35
  • 标签缓存:专门用于实体标签,系统使用 get_tags_from_cacheset_tags_to_cache rag/svr/task_executor.py:54-54
  • 速率限制:高级大语言模型调用受 chat_limiter 控制,以防止超出提供商的 API 限制 rag/svr/task_executor.py:89-89

来源:rag/svr/task_executor.py:54-89rag/raptor.py:30-36

高级功能的数据存储

高级功能的结果存储在底层文档存储中,使用专门的字段:

字段名描述来源
knowledge_graph_kwd存储抽取的实体/关系数据。rag/nlp/search.py:126-126
entity_kwd用于实体过滤的关键字字段。rag/nlp/search.py:126-126
from_entity_kwd关系中的源实体。rag/nlp/search.py:126-126
to_entity_kwd关系中的目标实体。rag/nlp/search.py:126-126
chunk_order_int用于维护 RAPTOR 节点中的层级/顺序。rag/nlp/search.py:150-150

来源:rag/nlp/search.py:126-150