高级特性:GraphRAG 与 RAPTOR
高级功能:GraphRAG 与 RAPTOR
相关源文件
以下文件为本 Wiki 页面的生成提供了上下文:
api/db/__init__.pyapi/db/db_models.pyapi/db/services/dialog_service.pyapi/db/services/document_service.pyapi/db/services/file_service.pyapi/db/services/knowledgebase_service.pyapi/db/services/llm_service.pyapi/db/services/task_service.pyapi/db/services/user_service.pyrag/nlp/search.pyrag/raptor.pyrag/svr/task_executor.pyweb/src/components/auto-keywords-form-field.tsxweb/src/components/delimiter-form-field.tsxweb/src/components/entity-types-form-field.tsxweb/src/components/excel-to-html-form-field.tsxweb/src/components/llm-setting-items/slider.tsxweb/src/components/max-token-number-from-field.tsxweb/src/components/originui/number-input.tsxweb/src/components/page-rank-form-field.tsxweb/src/components/parse-configuration/graph-rag-form-fields.tsxweb/src/components/parse-configuration/raptor-form-fields.tsxweb/src/components/slider-input-form-field.tsxweb/src/constants/form.tsweb/src/hooks/parser-config-utils.tsweb/src/interfaces/database/document.tsweb/src/interfaces/request/document.tsweb/src/pages/dataset/dataset/use-change-document-parser.tsweb/src/stories/number-input.stories.ts
目的与范围
本文档介绍 RAGFlow 中的两项高级检索增强功能:GraphRAG 和 RAPTOR,以及思维导图等可视化工具。这些功能通过创建额外的索引结构(超越标准的基于片段的向量搜索),提升了复杂文档的检索性能。
- GraphRAG:通过实体和关系抽取,从文档内容构建知识图谱,支持基于图的遍历以处理复杂查询。
- RAPTOR:通过递归聚类和摘要生成,构建分层摘要,创建多层级表示以实现更好的长上下文检索。
- 思维导图生成:利用分层结构生成文档聚类的可视化表示。
这两项功能均为可选增强特性,通过 parser_config 对象按数据集进行配置,并由 task_executor.py rag/svr/task_executor.py:124-127 作为异步后台任务执行。
RAPTOR:面向树状组织检索的递归抽象处理
概述
RAPTOR 通过递归聚类文档片段并生成每层的抽象摘要,创建了一种树状索引结构。这种分层组织方式支持多粒度检索:原始片段用于获取具体细节,摘要节点用于获取更广泛的上下文。
该实现主要位于 rag/raptor.py rag/raptor.py:157-158 中,执行编排则在任务执行器层完成。
架构
RAPTOR 架构与代码实体映射
来源:rag/raptor.py:157-186、rag/svr/task_executor.py:124-124、rag/raptor.py:21-24
配置参数
RAPTOR 通过传递给 RecursiveAbstractiveProcessing4TreeOrganizedRetrieval 构造函数的参数进行配置,这些参数通常来自知识库解析器设置:
| 参数 | 类型 | 描述 | 来源 |
|---|---|---|---|
max_cluster | int | 每层最大聚类数。 | rag/raptor.py:174-174 |
threshold | float | 聚类的相似度阈值。 | rag/raptor.py:177-177 |
max_token | int | 生成摘要的最大 Token 数。 | rag/raptor.py:179-179 |
prompt | str | 用于摘要生成的大语言模型提示模板。 | rag/raptor.py:178-178 |
tree_builder | str | 树构建策略(例如 predicated)。 | rag/raptor.py:182-182 |
clustering_method | str | 使用的算法(GMM 或 AHC)。 | rag/raptor.py:185-185 |
执行流程
RecursiveAbstractiveProcessing4TreeOrganizedRetrieval 类实现了构建分层树的逻辑。
- 任务触发:
task_executor.py在TASK_TYPE_TO_PIPELINE_TASK_TYPE中识别出raptor任务类型,并启动处理流程rag/svr/task_executor.py:122-124。 - 跳过逻辑:系统使用
should_skip_raptor根据文档状态判断是否需要处理rag/svr/task_executor.py:50-50。 - 聚类与摘要生成:使用高斯混合模型等算法对片段进行分组
rag/raptor.py:24-24。对于每个聚类,大语言模型生成一个摘要。 - 索引:RAPTOR 摘要片段通过
make_raptor_summary_chunk_id分配唯一 ID 并进行索引。它们与一个"虚拟"文档 IDGRAPH_RAPTOR_FAKE_DOC_ID关联,以区别于标准文档片段rag/svr/task_executor.py:49-49、api/db/services/task_service.py:39-39。
来源:rag/svr/task_executor.py:122-124、rag/raptor.py:21-24、api/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 在对话服务中使用,用于在聊天会话期间抽取分层概念以进行可视化。
GraphRAG 与思维导图代码实体映射
来源:api/db/services/dialog_service.py:47-47、rag/svr/task_executor.py:125-126、rag/nlp/search.py:37-38
实现细节
- 任务编排:
task_executor.py将特定任务标签映射到管线类型:raptor、graphrag和mindmaprag/svr/task_executor.py:122-127。 - 实体过滤:
rag/nlp/search.py中的Dealer类支持通过图相关的元数据字段进行过滤,例如knowledge_graph_kwd、entity_kwd、from_entity_kwd和to_entity_kwdrag/nlp/search.py:126-129。 - 搜索集成:在检索过程中,
Dealer.search方法将knowledge_graph_kwd包含在默认源字段(src)中,以便在获取文本片段的同时获取图元数据rag/nlp/search.py:151-151。
来源:rag/svr/task_executor.py:122-127、rag/nlp/search.py:126-151
集成与缓存
缓存机制
为降低大语言模型调用成本并提升性能,RAGFlow 为 GraphRAG 和 RAPTOR 操作实现了缓存层。
- 大语言模型缓存:通过
get_llm_cache和set_llm_cache存储大语言模型生成的结果rag/svr/task_executor.py:54-54。 - 嵌入向量缓存:在 RAPTOR 中通过
get_embed_cache和set_embed_cache使用,以避免重复的向量计算rag/raptor.py:32-35。 - 标签缓存:专门用于实体标签,系统使用
get_tags_from_cache和set_tags_to_cacherag/svr/task_executor.py:54-54。 - 速率限制:高级大语言模型调用受
chat_limiter控制,以防止超出提供商的 API 限制rag/svr/task_executor.py:89-89。
来源:rag/svr/task_executor.py:54-89、rag/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