微信扫码
添加专属顾问
我要投稿
Dify平台如何利用RAG技术提升问答系统的准确性和可靠性
核心内容:
1. RAG技术的工作原理:检索、增强、生成三个步骤
2. RAG的核心优势:准确性提升、动态更新知识、可解释性增强
3. RAG与传统预训练模型的对比分析
一、RAG 的概念解释
RAG(Retrieval-Augmented Generation) 是一种结合了信息检索和文本生成的自然语言处理(NLP)技术,旨在通过动态引入外部知识来提升生成模型的准确性和可靠性。它的核心思想是:先检索相关信息,再生成回答。
检索(Retrieval)
增强(Augmentation)
生成(Generation)
准确性提升
动态更新知识
可解释性增强
支持长尾问题
在下图中,当用户提问时 “美国总统是谁?” 时,系统并不是将问题直接交给大模型来回答,而是先将用户问题在知识库中(如下图中的维基百科)进行向量搜索,通过语义相似度匹配的方式查询到相关的内容(拜登是美国现任第46届总统…),然后再将用户问题和搜索到的相关知识提供给大模型,使得大模型获得足够完备的知识来回答问题,以此获得更可靠的问答结果。
为什么需要这样做呢?
我们可以把大模型比做是一个超级专家,他熟悉人类各个领域的知识,但他也有自己的局限性,比如他不知道你个人的一些状况,因为这些信息是你私人的,不会在互联网上公开,所以他没有提前学习的机会。
当你想雇佣这个超级专家来充当你的家庭财务顾问时,需要允许他在接受你的提问时先翻看一下你的投资理财记录、家庭消费支出等数据。这样他才能根据你个人的实际情况提供专业的建议。
这就是 RAG 系统所做的事情:帮助大模型临时性地获得他所不具备的外部知识,允许它在回答问题之前先找答案。
根据上面这个例子,我们很容易发现 RAG 系统中最核心是外部知识的检索环节。专家能不能向你提供专业的家庭财务建议,取决于能不能精确找到他需要的信息,如果他找到的不是投资理财记录,而是家庭减肥计划,那再厉害的专家都会无能为力。
二、RAG vs 其它文本训练方案
对比维度 | RAG | 传统预训练模型 |
---|---|---|
知识来源 | ||
知识更新 | ||
准确性 | ||
长尾问题 | ||
计算成本 | ||
典型应用 |
关键区别:
RAG 通过外部知识增强生成结果的可控性和准确性,但牺牲了部分实时性;传统预训练模型生成更灵活,但可能“编造事实”。
对比维度 | RAG | 微调模型 |
---|---|---|
训练目标 | ||
知识灵活性 | ||
数据需求 | ||
适用场景 | ||
可解释性 |
关键区别:
微调模型专注于特定任务优化,但知识封闭;RAG 更注重动态知识整合,适合开放域任务。
对比维度 | RAG | 混合模型(如 RETRO) |
---|---|---|
架构设计 | ||
检索效率 | ||
知识整合方式 | ||
灵活性 | ||
代表模型 |
关键区别:
混合模型将检索能力嵌入生成模型内部,效率更高;RAG 的模块化设计更易扩展和维护。
对比维度 | RAG | 知识蒸馏模型 |
---|---|---|
核心目标 | ||
知识来源 | ||
适用场景 | ||
灵活性 | ||
计算成本 |
关键区别:
知识蒸馏旨在压缩模型,RAG 旨在增强生成能力,两者目标不同。
对比维度 | RAG | 强化学习(RLHF) |
---|---|---|
优化目标 | ||
反馈机制 | ||
知识更新 | ||
典型应用 | ||
优势 |
关键区别:
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 步骤也能有效改进文档召回效果。因此,当创建的知识库问答应用关联了多个知识库时,我们更推荐将召回模式配置为多路召回。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-21
改进RAG:利用混合搜索与重排序优化检索效果(含代码示例)
2025-04-21
检索增强生成(RAG)深度教程
2025-04-21
MCP 实践:基于 MCP 架构实现知识库答疑系统
2025-04-20
谈谈RAG 的四个级别
2025-04-20
大模型能像专业分析师一样提取用户需求吗?
2025-04-19
基于Embedding分块 - 文本分块(Text Splitting),RAG不可缺失的重要环节
2025-04-19
RAG升级-基于知识图谱+deepseek打造强大的个人知识库问答机器人
2025-04-19
RAG vs. CAG vs. Fine-Tuning:如何为你的大语言模型选择最合适的“脑力升级”?
2024-10-27
2024-09-04
2024-07-18
2024-05-05
2024-06-20
2024-06-13
2024-07-09
2024-07-09
2024-05-19
2024-07-07
2025-04-20
2025-04-19
2025-04-18
2025-04-16
2025-04-14
2025-04-13
2025-04-11
2025-04-09