Dify平台如何利用RAG技术提升问答系统的准确性和可靠性
本教程将深入解析Dify平台中检索增强生成(RAG)技术的工作原理、核心优势以及与其他方案的对比,并详细讲解混合检索、重排序、召回模式等关键功能,帮助您构建更可靠的问答系统。
一、RAG 的概念解释
RAG(Retrieval-Augmented Generation) 是一种结合了信息检索和文本生成的自然语言处理(NLP)技术,旨在通过动态引入外部知识来提升生成模型的准确性和可靠性。它的核心思想是:先检索相关信息,再生成回答。
RAG 的工作原理
- 检索(Retrieval)
- 当用户输入一个问题或指令时,RAG 会首先从外部知识库(如文档、数据库、网页等)中检索与问题相关的文本片段。
- 例如:用户问“量子力学的基本原理是什么?”,RAG 会从预存的资料中找到相关的段落。
- 增强(Augmentation)
- 将检索到的信息与原始问题结合,作为上下文输入给生成模型(如 GPT 等)。
- 这一步相当于给生成模型提供了“参考资料”,避免它完全依赖内部训练数据的记忆。
- 生成(Generation)
- 生成模型基于检索到的信息和用户输入,生成最终的回答或内容。
RAG 的核心优势
- 准确性提升:传统生成模型(如 GPT-3)依赖内部训练数据,可能产生“幻觉”(编造虚假信息)。RAG 通过检索外部知识,生成的答案更可靠。
- 动态更新知识:只需更新外部知识库,无需重新训练模型,即可让模型掌握最新信息(例如新闻、领域动态)。
- 可解释性增强:检索到的文档可以作为答案的依据,方便追溯信息来源。
- 支持长尾问题:对于训练数据中罕见的冷门问题,RAG 能通过检索找到答案,而纯生成模型可能无法回答。

在下图中,当用户提问时 “美国总统是谁?” 时,系统并不是将问题直接交给大模型来回答,而是先将用户问题在知识库中(如下图中的维基百科)进行向量搜索,通过语义相似度匹配的方式查询到相关的内容(拜登是美国现任第46届总统…),然后再将用户问题和搜索到的相关知识提供给大模型,使得大模型获得足够完备的知识来回答问题,以此获得更可靠的问答结果。
为什么需要这样做呢? 我们可以把大模型比做是一个超级专家,他熟悉人类各个领域的知识,但他也有自己的局限性,比如他不知道你个人的一些状况,因为这些信息是你私人的,不会在互联网上公开,所以他没有提前学习的机会。当你想雇佣这个超级专家来充当你的家庭财务顾问时,需要允许他在接受你的提问时先翻看一下你的投资理财记录、家庭消费支出等数据。这样他才能根据你个人的实际情况提供专业的建议。
这就是 RAG 系统所做的事情:帮助大模型临时性地获得他所不具备的外部知识,允许它在回答问题之前先找答案。
根据上面这个例子,我们很容易发现 RAG 系统中最核心是外部知识的检索环节。专家能不能向你提供专业的家庭财务建议,取决于能不能精确找到他需要的信息,如果他找到的不是投资理财记录,而是家庭减肥计划,那再厉害的专家都会无能为力。
二、RAG vs 其它文本训练方案
1. RAG vs 传统预训练模型(如 GPT-3、PaLM)
| 对比维度 | RAG | 传统预训练模型 |
|---|---|---|
| 知识来源 | 外部知识库 + 内部参数 | 仅限训练时的静态语料库 |
| 知识更新 | 动态更新知识库,无需重新训练模型 | 需重新训练模型才能更新知识 |
| 准确性 | 依赖检索质量,答案可追溯来源 | 可能生成“幻觉”(虚构内容) |
| 长尾问题 | 擅长处理冷门问题(检索外部知识) | 依赖训练数据覆盖,冷门问题可能回答错误 |
| 计算成本 | 高(检索+生成两阶段) | 低(仅需生成) |
| 典型应用 | 问答系统、事实性任务 | 开放域生成、创意写作 |
关键区别:RAG 通过外部知识增强生成结果的可控性和准确性,但牺牲了部分实时性;传统预训练模型生成更灵活,但可能“编造事实”。
2. RAG vs 微调模型(如 BERT、T5 微调)
| 对比维度 | RAG | 微调模型 |
|---|---|---|
| 训练目标 | 检索器(DPR) + 生成器(如 GPT)联合训练 | 在特定任务上微调预训练模型的参数 |
| 知识灵活性 | 支持动态更新知识库 | 知识固化在模型参数中,更新需重新训练 |
| 数据需求 | 需要外部知识库 + 对齐的问答对 | 仅需特定任务的标注数据 |
| 适用场景 | 需要结合外部知识的任务 | 特定领域任务(如情感分析、摘要) |
| 可解释性 | 高(检索结果可追溯) | 低(黑盒模型) |
关键区别:微调模型专注于特定任务优化,但知识封闭;RAG 更注重动态知识整合,适合开放域任务。
3. RAG vs 混合模型(如 RETRO、Florence)
| 对比维度 | RAG | 混合模型(如 RETRO) |
|---|---|---|
| 架构设计 | 分离式架构(检索器 + 生成器) | 统一架构(检索模块嵌入生成模型内部) |
| 检索效率 | 独立检索器(如 DPR),可复用 | 检索模块与模型耦合,针对性优化 |
| 知识整合方式 | 显式检索 + 生成器显式引用 | 隐式学习检索(通过上下文学习) |
| 灵活性 | 更灵活(支持更换检索器或生成器) | 优化后的模型更高效,但架构固定 |
| 代表模型 | Facebook RAG、RAG-Token | RETRO(Meta)、Florence(微软) |
关键区别:混合模型将检索能力嵌入生成模型内部,效率更高;RAG 的模块化设计更易扩展和维护。
4. RAG vs 知识蒸馏(如 DistilBERT、TinyBERT)
| 对比维度 | RAG | 知识蒸馏模型 |
|---|---|---|
| 核心目标 | 动态结合外部知识 | 压缩大模型为小模型,保持性能 |
| 知识来源 | 外部知识库 | 教师模型的输出(如 BERT 蒸馏为 TinyBERT) |
| 适用场景 | 需要实时更新知识的任务 | 资源受限场景(边缘设备部署) |
| 灵活性 | 高(知识库可独立更新) | 低(模型固化) |
| 计算成本 | 高(检索+生成) | 低(仅需小模型推理) |
关键区别:知识蒸馏旨在压缩模型,RAG 旨在增强生成能力,两者目标不同。
5. RAG vs 强化学习(RLHF,如 ChatGPT)
| 对比维度 | RAG | 强化学习(RLHF) |
|---|---|---|
| 优化目标 | 提升生成结果的准确性和可解释性 | 对齐人类偏好(如安全、有用性) |
| 反馈机制 | 依赖检索质量 | 依赖人工标注或偏好模型 |
| 知识更新 | 动态更新知识库 | 需重新训练或微调 |
| 典型应用 | 事实性问答、企业知识管理 | 对话系统、伦理对齐(如 ChatGPT) |
| 优势 | 可控性强,避免幻觉 | 生成结果更符合人类期望 |
关键区别:RLHF 侧重对齐人类偏好,RAG 侧重知识准确性,两者可结合使用(如 RAG+RLHF)。
三、混合检索
为什么需要混合检索?
RAG 检索环节中的主流方法是向量检索,即语义相关度匹配的方式。技术原理是通过将外部知识库的文档先拆分为语义完整的段落或句子,并将其转换(Embedding)为计算机能够理解的一串数字表达(多维向量),同时对用户问题进行同样的转换操作。计算机能够发现用户问题与句子之间细微的语义相关性,比如 “猫追逐老鼠” 和 “小猫捕猎老鼠” 的语义相关度会高于 “猫追逐老鼠” 和 “我喜欢吃火腿” 之间的相关度。在将相关度最高的文本内容查找到后,RAG 系统会将其作为用户问题的上下文一起提供给大模型,帮助大模型回答问题。
除了能够实现复杂语义的文本查找,向量检索还有其他的优势:
- 相近语义理解(如老鼠/捕鼠器/奶酪,谷歌/必应/搜索引擎)
- 多语言理解(跨语言理解,如输入中文匹配英文)
- 多模态理解(支持文本、图像、音视频等的相似匹配)
- 容错性(处理拼写错误、模糊的描述)
虽然向量检索在以上情景中具有明显优势,但有某些情况效果不佳。比如:
- 搜索一个人或物体的名字(例如,伊隆·马斯克,iPhone 15)
- 搜索缩写词或短语(例如,RAG,RLHF)
- 搜索 ID(例如,
gpt-3.5-turbo,titan-xlarge-v1.01)
而上面这些的缺点恰恰都是传统关键词搜索的优势所在,传统关键词搜索擅长:
- 精确匹配(如产品名称、姓名、产品编号)
- 少量字符的匹配(通过少量字符进行向量检索时效果非常不好,但很多用户恰恰习惯只输入几个关键词)
- 倾向低频词汇的匹配(低频词汇往往承载了语言中的重要意义,比如“你想跟我去喝咖啡吗?”这句话中的分词,“喝”“咖啡”会比“你”“想”“吗”在句子中承载更重要的含义)
对于大多数文本搜索的情景,首要的是确保潜在最相关结果能够出现在候选结果中。向量检索和关键词检索在检索领域各有其优势。混合搜索正是结合了这两种搜索技术的优点,同时弥补了两方的缺点。
在混合检索中,你需要在数据库中提前建立向量索引和关键词索引,在用户问题输入时,分别通过两种检索器在文档中检索出最相关的文本。
“混合检索”实际上并没有明确的定义,本文以向量检索和关键词检索的组合为示例。如果我们使用其他搜索算法的组合,也可以被称为“混合检索”。 比如,我们可以将用于检索实体关系的知识图谱技术与向量检索技术结合。
不同的检索系统各自擅长寻找文本(段落、语句、词汇)之间不同的细微联系,这包括了精确关系、语义关系、主题关系、结构关系、实体关系、时间关系、事件关系等。可以说没有任何一种检索模式能够适用全部的情景。混合检索通过多个检索系统的组合,实现了多个检索技术之间的互补。
四、向量检索
定义: 通过生成查询嵌入并查询与其向量表示最相似的文本分段。
- TopK: 用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3。
- Score 阈值: 用于设置文本片段筛选的相似度阈值,即:只召回超过设置分数的文本片段。系统默认关闭该设置,即不会对召回的文本片段相似值过滤。打开后默认值为 0.5。
- Rerank 模型: 你可以在“模型供应商”页面配置 Rerank 模型的 API 秘钥之后,在检索设置中打开“Rerank 模型”,系统会在语义检索后对已召回的文档结果再一次进行语义重排序,优化排序结果。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
五、全文检索
定义: 索引文档中的所有词汇,从而允许用户查询任意词汇,并返回包含这些词汇的文本片段。
- TopK: 用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3。
- Rerank 模型: 你可以在“模型供应商”页面配置 Rerank 模型的 API 秘钥之后,在检索设置中打开“Rerank 模型”,系统会在全文检索后对已召回的文档结果再一次进行语义重排序,优化排序结果。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
六、混合检索
同时执行全文检索和向量检索,并应用重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API。
- TopK: 用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3。
- Rerank 模型: 你可以在“模型供应商”页面配置 Rerank 模型的 API 秘钥之后,在检索设置中打开“Rerank 模型”,系统会在混合检索后对已召回的文档结果再一次进行语义重排序,优化排序结果。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
创建知识库时设置检索模式
进入“知识库->创建知识库”页面并在检索设置中设置不同的检索模式。
知识库设置中修改检索模式
进入“知识库->选择知识库->设置”页面中可以对已创建的知识库修改不同的检索模式。
提示词编排中修改检索模式
进入“提示词编排->上下文->选择知识库->设置”页面中可以在创建应用时修改不同的检索模式。
七、重排序
为什么需要重排序?
混合检索能够结合不同检索技术的优势获得更好的召回结果,但在不同检索模式下的查询结果需要进行合并和归一化(将数据转换为统一的标准范围或分布,以便更好地进行比较、分析和处理),然后再一起提供给大模型。这时候我们需要引入一个评分系统:重排序模型(Rerank Model)。
重排序模型会计算候选文档列表与用户问题的语义匹配度,根据语义匹配度重新进行排序,从而改进语义排序的结果。 其原理是计算用户问题与给定的每个候选文档之间的相关性分数,并返回按相关性从高到低排序的文档列表。常见的 Rerank 模型如:Cohere rerank、bge-reranker 等。
在大多数情况下,在重排序之前会有一次前置检索,这是由于计算查询与数百万个文档之间的相关性得分将会非常低效。所以,重排序一般都放在搜索流程的最后阶段,非常适合用于合并和排序来自不同检索系统的结果。
不过,重排序并不是只适用于不同检索系统的结果合并,即使是在单一检索模式下,引入重排序步骤也能有效帮助改进文档的召回效果,比如我们可以在关键词检索之后加入语义重排序。
在具体实践过程中,除了将多路查询结果进行归一化之外,在将相关的文本分段交给大模型之前,我们一般会限制传递给大模型的分段个数(即 TopK,可以在重排序模型参数中设置),这样做的原因是大模型的输入窗口存在大小限制(一般为 4K、8K、16K、128K 的 Token 数量),你需要根据选用的模型输入窗口的大小限制,选择合适的分段策略和 TopK 值。
小提示: 需要注意的是,即使模型上下文窗口很足够大,过多的召回分段可能会引入相关度较低的内容,导致回答的质量降低,所以重排序的 TopK 参数并不是越大越好。
重排序并不是搜索技术的替代品,而是一种用于增强现有检索系统的辅助工具。它最大的优势是不仅提供了一种简单且低复杂度的方法来改善搜索结果,允许用户将语义相关性纳入现有的搜索系统中,而且无需进行重大的基础设施修改。
以 Cohere Rerank 为例,你只需要注册账户和申请 API,接入只需要两行代码。另外,他们也提供了多语言模型,也就是说你可以将不同语言的文本查询结果进行一次性排序。
如何配置 Rerank 模型?
Dify 目前已支持 Cohere Rerank 模型,进入“模型供应商-> Cohere”页面填入 Rerank 模型的 API 秘钥。
如何获取 Cohere Rerank 模型?
登录:https://cohere.com/rerank,在页内注册并申请 Rerank 模型的使用资格,获取 API 秘钥。
知识库检索模式中设置 Rerank 模型
进入“知识库->创建知识库->检索设置”页面并在添加 Rerank 设置。除了在创建知识库可以设置 Rerank,你也可以在已创建的知识库设置内更改 Rerank 配置,在应用编排的知识库召回模式设置中更改 Rerank 配置。
- TopK: 用于设置 Rerank 后返回相关文档的数量。
- Score 阈值: 用于设置 Rerank 后返回相关文档的最低分值。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
知识库多路召回模式中设置 Rerank 模型
进入“提示词编排->上下文->设置”页面中设置为多路召回模式时需开启 Rerank 模型。查看更多关于多路召回模式的说明,《多路召回》。
八、召回模式
当用户构建知识库问答类的 AI 应用时,如果在应用内关联了多个知识库,此时需要应用 Dify 的召回策略决定从哪些知识库中检索内容。
多路召回模式: 根据用户意图同时匹配所有知识库,从多路知识库查询相关文本片段,经过重排序步骤,从多路查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API。在多路召回模式下,检索器会在所有与应用关联的知识库中去检索与用户问题相关的文本内容,并将多路召回的相关文档结果合并,并通过 Rerank 模型对检索召回的文档进行语义重排序。在多路召回模式下,建议配置 Rerank 模型。你可以阅读 重排序,了解更多。
由于多路召回模式不依赖于模型的推理能力或知识库描述,该模式在多知识库检索时能够获得质量更高的召回效果,除此之外加入 Rerank 步骤也能有效改进文档召回效果。因此,当创建的知识库问答应用关联了多个知识库时,我们更推荐将召回模式配置为多路召回。
常见问题解答
- 问:RAG 与传统模型相比,最大的优势是什么?
答:RAG 最大的优势在于通过外部知识检索大幅提升答案的准确性和可解释性,同时支持动态更新知识库而无需重新训练模型,非常适合事实性问答场景。 - 问:混合检索中的“混合”具体指什么?
答:本文中混合检索指同时使用向量检索和关键词检索,但广义上可以是任意两种或多种检索技术的组合(如知识图谱+向量检索),目的是取长补短。 - 问:重排序模型必须配置吗?
答:不是必须,但强烈推荐。重排序能显著提升结果的相关性,尤其在混合检索或多路召回模式下,它负责合并和归一化不同来源的结果,使排序更合理。 - 问:TopK 值设得越大越好吗?
答:不是。TopK 过大可能引入低相关度内容,反而降低回答质量。应根据模型上下文窗口和实际需求选择合适数值,一般建议从 3-5 开始尝试。 - 问:多路召回模式适用于单知识库吗?
答:多路召回模式专为多知识库设计。如果只有一个知识库,使用单路召回(向量检索或全文检索)即可,无需多路召回。
通过本教程,您应已掌握在 Dify 平台上运用 RAG 技术构建高准确率问答系统的核心方法。从原理到实践,从检索到重排序,每一步都旨在让您的 AI 应用更可靠、更智能。如有更多问题,欢迎查阅 Dify 官方文档或社区讨论。
