在 RAGFlow 中实践 GraphRAG

RAGFlow 0.9 版本发布,正式引入了对 GraphRAG 的支持。GraphRAG 由微软近期开源【参考文献1】,被称作下一代 RAG,并且在更早时间发表了相关论文【参考文献2】。关于下一代 RAG,在 RAGFlow 体系的定义更加完整,就是如下图所示的 RAG 2.0, 这是一个以搜索为中心的端到端的优化系统,分为 4 个阶段,除了后边 2 个阶段——索引与检索,这个大部分是需要一个专用数据库来提供服务,前边 2 个阶段的分工如下:

  1. 数据抽取:利用各类文档(大)模型保证被索引数据的高质量输入,避免 Garbage In,Garbage Out。

  2. 在抽取的数据被送到数据库之前,还可以选择性地加入一些预处理步骤,包括文档预聚类,知识图谱构建等,这些预处理,主要是解决针对多跳问答,跨文档提问等情况做出处理。因此,GraphRAG 确实是面向下一代 RAG 的方案,但站在 RAG 2.0 的角度,它则是整个 Pipeline 当中的一个单元。

从 0.9 版本开始,这个单元已经被补充到了 RAGFlow 当中。那么下边先来介绍下,为何要加入这样一个单元,它跟微软的 GraphRAG 有什么区别和联系。

知识图谱对于改进 RAG 的效果至关重要,因为简单的 RAG ,只能提供根据提问检索答案的功能,可是这只能找到跟提问相似的结果,而未必是答案。例如一些总结性的问题,这种场景本质上是一种聚焦于查询的总结 QFS(Query Focused Summarization),采用知识图谱可以很方便的解决这类问题,通过知识图谱按照文字相关性把内容聚合,在对话的时候按照这些聚合后的文字生成总结,就可以很好的回答问题。目前的很多专用 AI 搜索,就是这样工作的。RAGFlow 在过去的版本所提供的 RAPTOR,就是对文本做聚类,其实也是类似的原理,只不过相比 RAPTOR, 以知识图谱为中心的工作,可以形成以命名体实体节点为中心更有层次的结果,因此对于这种 QFS 查询,采用知识图谱的准确性和体系性更好。在其他一些场景中,采用知识图谱依然可以改善 RAG 的返回结果,因为它为返回结果添加了更多的知识图谱上下文,从而可以让 LLM 产生更有解释性的回答。采用知识图谱在 RAG 的有效性已经得到了很多研究工作的证实,因此从 GraphRAG 一推出,就迅速得到了社区的广泛关注。在过去,采用知识图谱进行问答的工作有很多,在 RAG 出现之前的 KGQA 就已经存在很多年。这些工作最大的瓶颈之一,就是如何让知识图谱的构建自动化和标准化,这大大阻碍了基于知识图谱的工作在企业内大规模得到运用。随着 LLM 和 RAG 出现和广泛使用,用 LLM 来自动构建知识图谱成为一种可行的方案,GraphRAG 就是这些工作中最著名的一个。近期另一个这方面比较知名的工作是所谓模仿人类大脑海马体的 HippoRAG【参考文献3】,GraphRAG 和 HippoRAG 有一定的相似性:

在离线处理阶段,GraphRAG 和 HippoRAG 都将用户的文档首先送给 LLM 然后进行命名实体的自动抽取。但 GraphRAG 只抽取实体,而实体之间的关系并不做判断,仅仅用是否“相关”作为两者的联系;而 HippoRAG 则按照标准知识图谱的定义抽取整个三元组——就是说在一个图的定义中,实体 1 和实体 2 之间的关系是何种类型。在整个 GraphRAG 过程中,都没有利用到三元组的关系类型这个信息,这可能是因为 LLM 针对该关系的抽取无法做到非常准确导致的。 在完成实体抽取后, GraphRAG 还用到了2个算法来补全这种关系: 一个是社区检测算法,一个是 Graph Embedding。社区检测是存在已久的一类应用算法,本质上是聚类,它递归地利用图谱当中的节点命名体信息补全图的社区结构,从而为更多的节点之间建立是否“相关”的关系。在建立了社区结构之后,再利用 LLM 根据社区内的节点描述信息产生相应的摘要内容。Graph Embedding 在 GraphRAG 中是一个可选项,采用的是 Node2Vec,这也是存在已久的算法,它在现有的图上利用随机游走(就是类似 PageRank)结合节点命名体信息产生 Embedding ,因此这些 Embedding 可以看作是包含了经过了随机游走之后经过的子图节点所包含的语义信息。在查询时,可以利用这些 Graph Embedding 来返回更多的子图节点。

在线处理阶段,首先将用户的查询转成向量,然后找到知识图谱中最接近的节点,再根据该节点所在的社区,以及社区摘要信息,共同返回给 LLM ,从而让 LLM 来根据这些上下文做最后的答案生成,如下图所示。在实际查询中,除了查询这些知识图谱数据,还针对原文进行查询,然后两路结果归并后共同作为上下文返回给 LLM 。所有这些查询,跟传统上采用图数据库来代表知识图谱截然不同,这里几乎没有必须依赖图数据库的地方。

HippoRAG 的离线阶段,在利用 LLM 抽取知识图谱三元组信息之后,再利用现成的知识图谱如 OpenIE,来补全抽取的知识图谱。在查询阶段,要同样利用类似的随机游走算法(PageRank)在知识图谱上做子图遍历,从而根据返回的子图确定最终交给 LLM 的上下文。

可以看到, GraphRAG 和 HippoRAG ,都利用到了 PageRank 做子图遍历,只是前者放在离线阶段(尽管目前还没有实际使用这些结果),后者是在线查询阶段。至于为何采用 PageRank,是因为一些认知科学家发现了人类回忆过程和 PageRank 算法的输出之间有相关性。

因此, GraphRAG 实际上对于知识图谱的抽象和构建做了相当的简化:三元组不要了,图抽象表达也不要了,正是这些简化,使得工程上推出标准产品的可行性大为增加。所以 RAGFlow 也借鉴了 GraphRAG 的实现,在文档预处理阶段,引入知识图谱构建作为可选项,服务于一些高级问答场景。在 GraphRAG 的基础之上, RAGFlow 做了这些改进:

  1. 引入了去重步骤,原版的 GraphRAG 抽取出的命名实体,直接用于构建知识图谱,对于一些同义词实体,例如 “2024”和“2024年”,“IT”和“信息科技”,如果不做去重,会影响知识图谱的结构。命名实体去重在学术上叫做 Entity Resolution,实际上是一类复杂的算法,并且很难做到通用化。 RAGFlow 仍然是借鉴了 LLM 自身的能力来去重,因为从广义上来看,LLM 其实就是一个超级大的知识图谱。

  2. 降低了 Token 消耗。GraphRAG 从它的工作原理上,就需要消耗大量的 Token,因为需要把用户自己上传的所有文档,都送到 LLM,甚至对于 GraphRAG 原版实现来说,这些文档被送了不止一次给 LLM ,对于使用一些 SaaS 服务的 RAG 系统来说,这里的 Token 消耗非常大。RAGFlow 主要通过一些流程上的优化,确保所有文档只会被提交给 LLM 一次,尽可能避免无效的 Token 消耗。当然,真正从根本上解决这个问题,可以利用一些较小的单独部署的模型来做知识图谱构建,例如一个成功的案例是 Triplex ,它是基于 Phi-3 做微调得到,参数量为 3B,相比采用 LLM 可以有数十倍的成本节约。 在未来,RAGFlow 也会提供类似的解决方案,从而帮助降低 GraphRAG 的构建成本。

下边是 RAGFlow 中实现 GraphRAG 的产品效果展示:

在文档上传后的解析阶段,用户可以在知识库级的配置选择采用“Knowledge Graph”作为 Chunking 方案,并且用户需要自行定义需要 LLM 抽取的命名实体类型,如图中的 “organization”,“person”,“location” 等等:

针对知识库的特定文档,用户可以选择更改 Chunking 为其他方式,也可以更改该文档所要抽取的命名实体。如果一个知识库定义了采用 Knowledge Graph 作为 Chunking 方式,那么该知识库的所有文档,都会采用 GraphRAG 的方式召回:先召回知识图谱的实体和社区总结,再召回原文 —— 哪怕整个知识库大部分文档都采用的是其他 Chunking 方式。

在选择完 Chunking 后,LLM 就会自动抽取并构建知识图谱,这些知识图谱在 RAGFlow 中可以提供可视化展现,包括节点名称,节点描述,以及“社区”:

还可以以思维导图形式查看知识图谱:

知识图谱的可视化,对于用户调试对话有着重要意义。当前, RAGFlow 可以利用所有接入的 LLM 来生成知识图谱,然而这种较为复杂的信息抽取,在不同的 LLM 上能力表现差异较大,如果出现知识图谱抽取错误的情况,那么会导致最终对话结果的错误。在这种情况下,可以利用这些可视化工具查看图谱的结果分析对话生成。当前 RAGFlow 对知识图谱的生成,是文档级的,就是说目前没有针对整个知识库的所有文档统一构建知识图谱,因此目前的 GraphRAG 实现还无法对跨文档的知识图谱做关联。该特性需要更大的内存和计算资源,在未来 RAGFlow 会根据用户的使用反馈再决定是否添加这样的特性。

下图是一个以西游记第3-7回内容为基础的对话生成对比,左边是采用了 GraphRAG 的结果,可以看到在这些涉及到多跳或者嵌套逻辑的结果,GraphRAG 可以提供更加深入和全面的回答。

GraphRAG 是在 RAG 当中引入知识图谱自动构建的一个工程化有效实践,它的成功得益于去除了传统知识图谱中大量复杂的部分,然而,这并不代表知识图谱在 RAG 应用的终点。在实际的企业应用中,适合拿来做知识图谱构建的数据,只是一小部分,有大量的数据或者并不适合构建知识图谱,或者出于成本考虑,只在部分数据上构建知识图谱。因此,知识图谱的利用方式,还需要补充更多,例如如何利用知识图谱改写查询等,这些都会在未来的 RAGFlow 版本中逐步推出。

参考文献

  1. GraphRAG, https://github.com/microsoft/graphrag

  2. From Local to Global: A Graph RAG Approach to Query-Focused Summarization, https://arxiv.org/abs/2404.16130

  3. HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models , https://arxiv.org/abs/2405.1483

<think>首先,用户的问题是:“我想在RAGFLOW中配置提示词以规范知识库内容生成的工作总结 请问如何在RAGFLOW中使用提示词模板来引导生成结构化的工作总结”。这是一个关于如何在RAGFLOW中使用提示词模板来生成结构化工作总结的查询。 从系统级指令中,我需要: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如:[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用:引用[1]和引用[2],但用户说“上述引用仅供参考,并不是用户真正的需求”,所以我应该基于用户当前的问题来回答,而不是依赖那些引用。用户说:“请尽可能多的参考用户上一次的问题和你的回答”,但在这个对话中,没有“上一次的问题”,因为这是新的上下文。所以,我应该专注于当前问题。 用户提供的引用: - 引用[1]:关于如何让DeepSeek辅助写提示词,用户描述了一个提示词模板。 - 引用[2]:关于RAGFLOW的优势和功能。 但用户明确说:“上述引用仅供参考,并不是用户真正的需求”,所以我不能直接依赖它们。我需要基于对RAGFLOW的理解来回答。RAGFLOW是一个检索增强生成引擎,用户想配置提示词来生成结构化的工作总结。 我的回答结构应该清晰: 1. **理解问题**:解释什么是提示词模板在RAGFLOW中的作用。 2. **步骤指南**:提供逐步指导如何在RAGFLOW中使用提示词模板。 3. **示例**:给出一个具体的提示词模板示例。 4. **最佳实践**:分享一些优化提示词的技巧。 5. **生成相关问题**:在最后生成相关问题。 由于用户提到“使用提示词模板来引导生成结构化的工作总结”,我需要确保回答结构化。 关键点: - RAGFLOW允许用户配置提示词模板来控制生成的内容。 - 对于工作总结,提示词应该指定结构,如引言、主体、结论等。 - 用户可能需要在RAGFLOW的界面中设置这些模板。 回想RAGFLOW的功能(基于引用[2]): - 支持深度文档理解。 - 智能化分块与检索优化。 - 减少幻觉与可信引用。 - 动态工作流。 - 用户可以在提示词模板中定义结构。 步骤: 1. **访问提示词模板设置**:在RAGFLOW中,用户应该有一个地方来配置提示词模板。 2. **设计提示词**:创建一个提示词,指定生成结构化工作总结的要求。 3. **集成模板**:将提示词模板应用到知识库生成工作流中。 4. **测试和优化**:测试生成的内容并调整提示词。 示例提示词模板: - 例如: "请生成一个结构化的工作总结,包括以下部分:1. 项目概述;2. 完成的任务;3. 遇到的挑战;4. 解决方案;5. 成果;6. 未来计划。" 生成相关问题: - 在最后,添加“§§相关问题§§”部分,列出相关问题。 确保回答是中文。 最终回答结构: - 引言:重述问题。 - 主体:分步骤解释。 - 示例:提供代码或文本示例(如果需要)。 - 结论:总结。 - 相关问题。 在回答中,如果引用任何东西,添加引用标识,但在这个案例中,可能没有外部引用,所以或许不需要。</think>### 如何在RAGFLOW中使用提示词模板生成结构化工作总结 RAGFLOW 是一款开源的检索增强生成(RAG)引擎,它允许用户通过配置提示词模板来规范生成内容的结构和质量。对于生成结构化工作总结(如项目总结、周报等),提示词模板可以引导大模型生成符合特定格式的文本,减少“幻觉”并提高可信度。以下我将一步步解释如何实现这一目标,确保内容清晰、可靠。整个过程基于 RAGFLOW 的核心功能,如深度文档理解、分块策略和动态工作流优化。 #### 步骤 1: 理解提示词模板的作用 在 RAGFLOW 中,提示词模板是一段预设的文本指令,用于指导大模型(如 GPT、Gemini 等)如何生成响应。通过模板,您可以: - **定义结构**:指定工作总结的组成部分(如标题、项目概述、任务列表、挑战与解决方案、成果、未来计划)。 - **控制内容质量**:减少模型编造信息(幻觉),确保生成内容基于知识库的真实数据。 - **添加引用**:RAGFLOW 会自动标注来源,便于追溯原始文档片段[^2]。 例如,一个有效的提示词模板可能包括变量(如 `{document}` 表示检索到的知识库片段),以动态填充内容。 #### 步骤 2: 创建和配置提示词模板 在 RAGFLOW 的界面中,您可以通过以下步骤设置提示词模板: 1. **登录 RAGFLOW 控制台**:访问 RAGFLOW 的 Web 界面,进入“工作流管理”或“提示词模板”模块。 2. **新建模板**:点击“创建新模板”,选择“生成式模板”类型。 3. **编写模板内容**:在编辑器中输入您的提示词。模板应明确指定结构,并使用占位符引用知识库内容。以下是一个针对工作总结的示例模板: ```text 请基于以下知识库内容生成一份结构化的工作总结。总结必须包括以下部分: 1. **项目概述**:简要描述项目背景和目标。 2. **完成的任务**:列出关键任务,使用项目符号格式。 3. **遇到的挑战**:总结主要挑战,并引用相关数据。 4. **解决方案**:针对每个挑战提出解决方案。 5. **成果**:量化成果(如时间节省、效率提升)。 6. **未来计划**:提出下一步行动建议。 知识库内容:{retrieved_documents} 注意:所有信息必须基于知识库,不得编造。生成时自动标注引用来源。 ``` - 这里,`{retrieved_documents}` 是一个内置变量,表示 RAGFLOW 检索到的相关文档片段。 - **关键优化点**: - 使用清晰的分节标题,确保模型输出结构化。 - 添加约束(如“不得编造”)以减少幻觉。 - 结合 RAGFLOW 的 Self-RAG 技术,模型在生成过程中会自我评估检索结果的合理性[^2]。 4. **保存并命名模板**:例如,命名为“工作总结生成模板”。 #### 步骤 3: 将模板集成到知识库工作流 RAGFLOW 支持动态工作流,您可以将提示词模板应用到特定知识库: 1. **选择知识库**:在“知识库管理”中,选择或创建您的知识库(支持 PDF、Word、Excel 等格式)。 2. **配置分块策略**:RAGFLOW 提供智能化分块功能。例如,对于工作总结: - 选择“按语义单元分块”,确保文档片段(如段落或表格)被合理分割。 - 在可视化界面中手动调整分块大小,以匹配总结的结构需求(如将每个项目任务作为一个分块)[^2]。 3. **绑定模板到工作流**: - 进入“工作流设计器”,创建一个新工作流。 - 添加“检索”步骤:配置检索策略(如混合检索模式,结合向量搜索和全文搜索)。 - 添加“生成”步骤:从模板库中选择“工作总结生成模板”,并设置输出格式(如 Markdown 或 HTML)。 4. **测试工作流**:输入一个查询(如“生成上周项目总结”),RAGFLOW 会自动检索知识库内容,并应用模板生成响应。检查输出是否结构化,并验证引用来源(例如,生成的文本末尾会显示类似 `[来源:文档A, 第5页]` 的标识)。 #### 步骤 4: 优化提示词模板 为确保生成的工作总结高质量,您可以: - **迭代测试**:运行多个查询,分析输出。如果结构不理想,调整模板(如添加更多分节细节)。 - **减少幻觉**:在模板中加入强化指令,例如:“所有数据和事实必须严格来自知识库;如有不明确处,标记为‘未知’”。 - **利用高级功能**: - 结合知识图谱(GraphRAG):对于复杂工作总结(如多项目关联),启用知识图谱以聚合实体关系,提升推理准确性[^2]。 - 动态调整:RAGFLOW 支持基于查询复杂度自动切换检索策略(如分层检索),确保模板适应不同场景。 - **性能监控**:在 RAGFLOW 的日志中查看生成时间和准确性指标,持续优化模板。 #### 示例输出 假设知识库包含一个项目文档,应用上述模板后,RAGFLOW 可能生成如下结构的工作总结: ```markdown ### 项目概述 上周项目聚焦于客户系统升级,目标是在月底前完成迁移[来源:项目计划书, 第2页]。 ### 完成的任务 - 部署新服务器环境。 - 测试数据迁移脚本。 - 培训用户使用新界面。 ### 遇到的挑战 数据兼容性问题导致迁移延迟[来源:测试报告, 第5页]。 ### 解决方案 优化脚本并添加回滚机制,问题已解决。 ### 成果 迁移时间缩短20%,用户满意度提升至95%。 ### 未来计划 下月进行性能优化和安全审计。 ``` #### 总结 通过在 RAGFLOW 中配置提示词模板,您可以高效引导生成结构化工作总结,确保内容基于真实知识库数据并减少错误。关键是将模板设计为清晰、约束性强,并利用 RAGFLOW 的混合检索和引用功能。实践中,建议从简单模板开始,逐步迭代优化。如果您有特定知识库格式或需求,我可以帮助定制更详细的模板。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值