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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对比多种方法执行命令行命令

在这两种方法中,一种是使用argparse模块来模拟命令行参数的解析,另一种是使用subprocess模块来直接执行一个命令行命令。下面是对两种方法的详细比较: 使用argparse模拟命令行参数 这种方法主要用于在Python脚本内部测试或集成其他使用argp…

深入剖析C++的 “属性“(Attribute specifier sequence)

引言 在阅读开源项目源代码是,发现了一个有趣且特殊的C特性:属性。 属性(attribute specifier sequences)是在C11标准引入的。在C11之前,编译器特有的扩展被广泛用来提供额外的代码信息。例如,GNU编译器&…

AcWing 3587:连通图 ← dfs(邻接矩阵 or 链式前向星)

【题目来源】https://www.acwing.com/problem/content/3590/【题目描述】 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。【输入格式】 输入包含若干组数据。 每组数据第一行包含两个整数 n 和 m,表示无向图的点和边数。 接下来 m 行…

Java面试题系列 - 第5天

题目:Java Lambda表达式与Stream API的深度应用 背景说明:Java 8引入了Lambda表达式和Stream API,极大地提升了Java函数式编程的能力,使代码更简洁、更易读。掌握Lambda表达式和Stream API的使用,对于优化数据处理流程…

Qt/C++项目积累: 2.主机监控器 - 2.2 历史功能实现

修订历史: 20240711:初始表设计,采用sqlite 正文: 关于历史数据存储,考虑的是用数据库来完成,目前考虑使用Sqlite和mysql,先用sqlite来实现,设计表过程如下: 机器总览…

白骑士的C++教学进阶篇 2.1 指针与引用

系列目录 上一篇:白骑士的C教学基础篇 1.5 数据结构 指针和引用是C中非常重要的概念,它们提供了强大的功能,使程序员能够直接操作内存,提高程序的效率和灵活性。在本篇博客中,我们将深入探讨指针与引用的基础知识&…

从零开始学习嵌入式----Makefile工具

一、Makefile 简明指南 你是否曾经面对过一堆源代码文件,却不知道如何将它们编译成可执行文件?或者你是否厌倦了每次修改代码后都要手动输入冗长的编译命令? 如果是的话,那么 Makefile 就是你的救星! 二、Makefile 是什…

全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗?

全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗? 摘要: 本文主要介绍了Python中类和对象中的类方法和静态方法,以及类方法和静态方法的定义、特点、应用场景和使用方…

网安防御保护-小实验

1、DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不允许访问DMZ区的FTP服务器和HTTP服务器,仅能ping通…

vue 环境变量那些事

常见的项目环境变量的使用 总则:使用 .env.环境名字文件去定义,运行命令的时候指定环境 比如:.env 代表所有环境变量使用的一些变量 .env.development 代表的开发环境变量 .env.production 代表的生产环境变量也就是上线以后使用的 vitevu…

自主研发接口测试框架

测试任务:将以前完成的所有的脚本统一改写为unitest框架方式 1、需求原型 1.1 框架目录结构 V1.0:一般的设计思路分为配置层、脚本层、数据层、结果层,如下图所示 V 2.0:加入驱动层testdriver 1.2 框架各层需要完成的工作 1、配…

Fast DDS library windows 下源码编译(cmake)

目录 编译环境: 编译需要的源码文件: Fast DDS编译: 注意事项: 参考文档: 基于Fast DDS 的源码来编译相关的库,然后可以通过python 来调用库文件实现dds 数据通信,本文就详细的介绍编译过程…

机器学习筑基篇,容器调用显卡计算资源,Ubuntu 24.04 快速安装 NVIDIA Container Toolkit!...

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Ubuntu 24.04 安装 NVIDIA Container Toolkit 什么是 NVIDIA Container Toolkit? 描述:NVIDIA Container Toolkit(容器工具包)使用户能够构建和运行 GPU 加速的容器,该工具包括一个容器运行时库和实用程序,用于自动…

石油巨头受冲击!埃克森美孚、BP接连发出盈利预警

KlipC报道:近日,BP(英国石油)预计其第二季度将面临10亿至20亿美元的减值费用,并发出警告称其炼油利润率“大幅下降”,石油交易收益预计出现疲软。消息公布后,其股价下跌超4%。 由于中间馏分油利…

JavaScript(8)——函数

函数 function,是被设计执行特定任务的代码块。 函数可以把具有相同或相似逻辑的代码包裹起来,通过函数调用执行这些代码,这么做的优势有利于精简代码方便复用。类似于alert(),prompt()和console.log(),这些都是js函数,不过已经…

STL(一)

书写形式:string (const string& str, size_t pos, size_t len npos); 举例: int main(){ string url("https://mp.csdn.net/mp_blog/creation/editor?spm1000.2115.3001.4503") string sub1(url,0,5);//从下标为0开始向后5个字符&…

如何在 Python 中创建一个类似于 MS 计算器的 GUI 计算器

问题背景 假设我们需要创建一个类似于微软计算器的 GUI 计算器。这个计算器应该具有以下功能: 能够显示第一个输入的数字。当按下运算符时,输入框仍显示第一个数字。当按下第二个数字时,第一个数字被替换。 解决方案 为了解决这个问题&am…

华为OD机考题(HJ108 求最小公倍数)

前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。 描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。 数据范围:1≤…

Spring中的适配器模式和策略模式

1. 适配器模式的应用 1.1适配器模式(Adapter Pattern)的原始定义是:将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。 1.2 AOP中的适配器模式 在Spring的AOP中,使用Advice&#…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十九章 Linux 工具之make 工具和 makefile 文件

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…