Dify中的RAG和知识库
一.RAG 基本架构

当用户提问 “美国总统是谁?” 时,系统并不是将问题直接交给大模型来回答,而是先将用户问题在知识库中进行向量搜索,通过语义相似度匹配的方式查询到相关的内容(拜登是美国现任第46届总统…),然后再将用户问题和搜索到的相关知识提供给大模型,使得大模型获得足够完备的知识来回答问题,以此获得更可靠的问答结果。
二.混合检索
1.为什么需要混合检索
向量检索优势:复杂语义的文本查找,相近语义理解,多语言理解,多模态理解,容错性。传统关键词搜索优势:精确匹配,少量字符的匹配,倾向低频词汇的匹配。向量检索和关键词检索在检索领域各有其优势。混合检索通过多个检索系统的组合,实现了多个检索技术之间的互补。

2.向量检索
通过生成查询嵌入并查询与其向量表示最相似的文本分段。

TopK:用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。
Score 阈值:用于设置文本片段筛选的相似度阈值,即:只召回超过设置分数的文本片段。系统默认关闭该设置,即不会对召回的文本片段相似值过滤。打开后默认值为 0.5 。
Rerank 模型:可以在"模型供应商"页面配置 Rerank 模型的 API 秘钥之后,在检索设置中打开"Rerank 模型",系统会在语义检索后对已召回的文档结果再一次进行语义重排序,优化排序结果。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
3.全文检索
索引文档中的所有词汇,从而允许用户查询任意词汇,并返回包含这些词汇的文本片段。

TopK:用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。
Rerank 模型:可在"模型供应商"页面配置 Rerank 模型的 API 秘钥之后,在检索设置中打开"Rerank 模型",系统会在全文检索后对已召回的文档结果再一次进行语义重排序,优化排序结果。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
4.混合检索
同时执行全文检索和向量检索,并应用重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API。

TopK:用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。
Rerank 模型:可在"模型供应商"页面配置 Rerank 模型的 API 秘钥之后,在检索设置中打开"Rerank 模型",系统会在混合检索后对已召回的文档结果再一次进行语义重排序,优化排序结果。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
5.创建数据集时设置检索模式
通过进入“数据集->创建数据集”页面并在检索设置中设置不同的检索模式:

6.数据集设置中修改检索模式
通过进入“数据集->选择数据集->设置”页面中可以对已创建的数据集修改不同的检索模式。

7.提示词编排中修改检索模式
通过进入“提示词编排->上下文->选择数据集->设置”页面中可以在创建应用时修改不同的检索模式。

三.重排序
1.为什么需要重排序
重排序模型会计算候选文档列表与用户问题的语义匹配度,根据语义匹配度重新进行排序,从而改进语义排序的结果。其原理是计算用户问题与给定的每个候选文档之间的相关性分数,并返回按相关性从高到低排序的文档列表。常见的 Rerank 模型如:Cohere rerank、bge-reranker 等。重排序一般都放在搜索流程的最后阶段,非常适合用于合并和排序来自不同检索系统的结果。

2.如何配置 Rerank 模型
Dify 目前已支持 Cohere Rerank 模型,通过进入“模型供应商-> Cohere”页面填入 Rerank 模型的 API 秘钥:

3.如何获取 Cohere Rerank 模型
登录:https://cohere.com/rerank,在页内注册并申请 Rerank 模型的使用资格,获取 API 秘钥。
4.数据集检索模式中设置 Rerank 模型
通过进入“数据集->创建数据集->检索设置”页面并在添加 Rerank 设置。除了在创建数据集可以设置 Rerank ,也可在已创建的数据集设置内更改 Rerank 配置,在应用编排的数据集召回模式设置中更改 Rerank 配置。

TopK:用于设置 Rerank 后返回相关文档的数量。
Score 阈值:用于设置 Rerank 后返回相关文档的最低分值。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。
5.数据集多路召回模式中设置 Rerank 模型
通过进入“提示词编排->上下文->设置”页面中设置为多路召回模式时需开启 Rerank 模型。

四.召回模式
当用户构建知识库问答类的 AI 应用时,如果在应用内关联了多个数据集,Dify 在检索时支持两种召回模式:N选1召回模式和多路召回模式。

1.N选1召回模式
在用户上传数据集时,系统将自动为数据集创建一个摘要式的描述。为了在该模式下获得最佳的召回效果,可以"数据集->设置->数据集描述"中查看到系统默认创建的摘要描述,并检查该内容是否可以清晰的概括数据集的内容。根据用户意图和数据集描述,由 Agent 自主判断选择最匹配的单个数据集来查询相关文本,适合数据集区分度大且数据集数量偏少的应用。

提示:OpenAI Function Call已支持多个工具调用,Dify将在后续版本中升级该模式为"N选M召回"。
2.多路召回模式(推荐)
根据用户意图同时匹配所有数据集,从多路数据集查询相关文本片段,经过重排序步骤,从多路查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API。在多路召回模式下,检索器会在所有与应用关联的数据集中去检索与用户问题相关的文本内容,并将多路召回的相关文档结果合并,并通过 Rerank 模型对检索召回的文档进行语义重排序。

参考文献
[1] 检索增强生成(RAG):https://docs.dify.ai/v/zh-hans/learn-more/extended-reading/retrieval-augment
[2] 知识库:https://docs.dify.ai/v/zh-hans/guides/knowledge-base
[3] Unstructured:https://docs.unstructured.io/welcome
[4] dify源码解析-RAG:https://zhuanlan.zhihu.com/p/704341817
相关文章:
Dify中的RAG和知识库
一.RAG 基本架构 当用户提问 “美国总统是谁?” 时,系统并不是将问题直接交给大模型来回答,而是先将用户问题在知识库中进行向量搜索,通过语义相似度匹配的方式查询到相关的内容(拜登是美国现任第46届总统…࿰…...
vue3 + i18n 中英文切换
第一步:安装vue-i18n npm install vue-i18n 第二步:配置语言包及js文件 目录如下: 英文语言包 en.js // lang/en.js - 英文语言包 export default {menu: { 库房管理: Warehouse Management,入库检测: Incoming Inspection, 设…...
one-hot-zhu案例
# 导入用于对象保存与加载的joblib # from sklearn.externals import joblib import joblib # 导入keras中的词汇映射器Tokenizer from keras.preprocessing.text import Tokenizer def one_hot_01(): # 1 准备语料 vocabs # vocabs {“周杰伦”, “陈奕迅”, “王力宏”, “…...
数据库课设---酒店管理系统(MySQL、VBNet)
目录 一. 知识技术 二. 需求分析 2.1 功能需求 2.2 数据需求 三. 数据流图与数据字典 3.1 数据流图 3.1.1 业务流图 3.1.2 数据流图 3.1.3 关系图 3.2 数据字典 四. 数据库设计 4.1 概念模型设计 4.2 逻辑模型设计 4.3 数据库实现 …...
NLP入门——前馈词袋分类模型的搭建、训练与预测
模型的搭建 线性层 >>> import torch >>> from torch import nn >>> class DBG(nn.Module): ... def forward(self,x): ... print(x.size()) ... return x ... >>> tmod nn.Sequential(nn.Linear(3,4),DB…...
GD32F303RET6读取SGM58031电压值
1、SGM58031芯片详解 (1)SGM58031是一款低功耗,16位精度,delta-sigma (ΔΣ)模数转换器(ADC)。它从3V到5.5V供电。 (2)SGM58031包含一个片上参考和振荡器。它有一个I2C兼容接口,可以选择四个I2…...
Pandas实战指南:any()函数深度解析与高效应用
Pandas实战指南:any()函数深度解析与高效应用 引言 在数据分析和处理过程中,经常需要快速检查数据集中是否存在满足特定条件的元素。Pandas库中的any()函数正是这样一个强大的工具,它可以帮助我们沿着指定的轴检查是否至少有一个元素满足某…...
ClickHouse中PRIMARY KEY和ORDER BY关键字的关系
在ClickHouse中,PRIMARY KEY和ORDER BY关键字在表的创建过程中扮演着重要的角色,它们共同决定了数据在物理存储上的排序方式,这对查询性能有着直接的影响。理解它们之间的关系对于设计高效的ClickHouse表结构至关重要。 ORDER BY ORDER BY定…...
android 图片轮播
在Android中,实现图片轮播(也称为图片滑动或图片轮转)通常涉及到使用ViewPager、RecyclerView配合PagerAdapter、RecyclerView.Adapter或者第三方库如Glide、Picasso来处理图片加载,以及一个定时器(如Handler、Timer、…...
进度条提示-在python程序中使用避免我误以为挂掉了
使用库tqdm 你还可以手写一点,反正只要是输出点什么东西都可以; Demo from chatgpt import time from tqdm import tqdm# 示例函数,模拟长时间运行的任务 def long_running_task():total_steps 100for step in tqdm(range(total_steps), …...
【案例】python集成OCR识别工具调研
目录 一、前言二、Tesseract_OCR2.1、安装过程2.2、python代码使用三、PaddleOCR3.1、安装过程3.2、python代码使用四、EasyOCR五、ddddOCR六、CnOCR七、总结一、前言 因项目需要OCR识别能力,且要支持私有化部署。本文将对比市场一些开源的OCR识别工具,从中选择适合项目需要…...
第一关:Linux基础知识
Linux基础知识目录 前言LinuxInternStudio 关卡1. InternStudio开发机介绍2. SSH及端口映射2.1 什么是SSH?2.2 如何使用SSH远程连接开发机?2.2.1 使用密码进行SSH远程连接2.2.2 配置SSH密钥进行SSH远程连接2.2.3 使用VScode进行SSH远程连接 2.3. 端口映射…...
qt 自定义信号和槽举例
在Qt中,自定义信号和槽是对象间通信的一种强大机制。以下是一个简单的例子,展示了如何定义和使用自定义信号和槽。 首先,我们定义一个简单的Worker类,它有一个自定义信号workCompleted,当某个任务完成时,这…...
编程语言与数据结构的关系:深度解析与探索
编程语言与数据结构的关系:深度解析与探索 在编程的世界中,编程语言和数据结构是两个不可或缺的元素。它们之间既相互依存,又各自独立,共同构成了编程的核心。本文将深入探索编程语言与数据结构之间的复杂关系,从四个…...
了解AsyncRotationController
概述 基于android 15.0, 以从强制横屏App上滑退回桌面流程来分析 frameworks/base/services/core/java/com/android/server/wm/AsyncRotationController.javaAsyncRotationController 是一种控制器,用于处理设备显示屏旋转时非活动窗口的异步更新。这种控制器通过…...
有必要找第三方软件测评公司吗?如何选择靠谱软件测评机构?
软件测试是确保软件质量的重要环节,而在进行软件测试时,是否有必要找第三方软件测评公司呢?第三方软件测评公司是指独立于软件开发公司和用户之间的中立机构,专门从事软件测试和测评工作。与自身开发团队或内部测试团队相比,选择…...
物联网系统中市电电量计量方案(一)
为什么要进行电量计量? 节约资源:电量计量可以帮助人们控制用电量,从而达到节约资源的目的。在当前严峻的资源供应形势下,节约能源是我们应该重视的问题。合理计费:电表可以帮助公共事业单位进行合理计费,…...
2024年热门无线领夹麦克风哪款好,麦克风品牌排行榜前十名推荐
在音频领域,无线领夹麦克风不断推陈出新,为我们带来了更出色的声音体验。无论你是主播、自媒体创作者、教师还是商务人士,都能从中找到适合自己的那一款。为了帮助大家轻松挑选到理想的无线领夹麦克风,我特别挑选了几款具有代表…...
IEEE顶刊“放水”?稳居1区Top,发文扩张IF稳长,CCF推荐,审稿友好!
本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • CCF推荐,4.5-5.0(2天见刊) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用)…...
发布:PhonePrompter_PC(手机录视频提词器_电脑版)
PhonePrompter_PC(手机录视频提词器_电脑版) 目 录 1. 概述... 2 2. 应用手册... 3 下载地址:百度网盘 请输入提取码 提取码:8wsa 1. 概述 平时工作和生活中需要用手机竖屏或横屏模式录制造工作、科技、历史、生活等方面的一些视…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
