diff --git a/zh_CN/.gitbook/assets/image (111).png b/zh_CN/.gitbook/assets/image (111).png index 8621e9f..37fb6bc 100644 Binary files a/zh_CN/.gitbook/assets/image (111).png and b/zh_CN/.gitbook/assets/image (111).png differ diff --git a/zh_CN/.gitbook/assets/image (112).png b/zh_CN/.gitbook/assets/image (112).png new file mode 100644 index 0000000..f948b4d Binary files /dev/null and b/zh_CN/.gitbook/assets/image (112).png differ diff --git a/zh_CN/.gitbook/assets/image (113).png b/zh_CN/.gitbook/assets/image (113).png new file mode 100644 index 0000000..31431f7 Binary files /dev/null and b/zh_CN/.gitbook/assets/image (113).png differ diff --git a/zh_CN/.gitbook/assets/image (114).png b/zh_CN/.gitbook/assets/image (114).png new file mode 100644 index 0000000..03ded40 Binary files /dev/null and b/zh_CN/.gitbook/assets/image (114).png differ diff --git a/zh_CN/.gitbook/assets/image (115).png b/zh_CN/.gitbook/assets/image (115).png new file mode 100644 index 0000000..03ded40 Binary files /dev/null and b/zh_CN/.gitbook/assets/image (115).png differ diff --git a/zh_CN/SUMMARY.md b/zh_CN/SUMMARY.md index f4befa1..eeba88f 100644 --- a/zh_CN/SUMMARY.md +++ b/zh_CN/SUMMARY.md @@ -42,6 +42,10 @@ * [提示词编排专家模式](advanced/prompt-engineering/README.md) * [提示词初始模版参考](advanced/prompt-engineering/prompt-engineering-template.md) +* [检索增强生成](advanced/jian-suo-zeng-qiang-sheng-cheng/README.md) + * [混合检索](advanced/jian-suo-zeng-qiang-sheng-cheng/hun-he-jian-suo.md) + * [召回模式](advanced/jian-suo-zeng-qiang-sheng-cheng/zhao-hui-mo-shi.md) + * [重排序](advanced/jian-suo-zeng-qiang-sheng-cheng/zhong-pai-xu.md) * [数据集管理](advanced/datasets/README.md) * [从 Notion 导入数据](advanced/datasets/sync-from-notion.md) * [通过 API 维护数据集](advanced/datasets/maintain-dataset-via-api.md) diff --git a/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/README.md b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/README.md new file mode 100644 index 0000000..95afc70 --- /dev/null +++ b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/README.md @@ -0,0 +1,19 @@ +# 检索增强生成 + +### RAG 的概念解释 + +向量检索为核心的 RAG 架构已成为解决大模型获取最新外部知识,同时解决其生成幻觉问题时的主流技术框架,并且已在相当多的应用场景中落地实践。开发者可以利用该技术低成本地构建一个 AI 智能客服、企业智能知识库、AI 搜索引擎等,通过自然语言输入与各类知识组织形式进行对话。以一个有代表性的 RAG 应用为例: + +在下图中,当用户提问时 “美国总统是谁?” 时,系统并不是将问题直接交给大模型来回答,而是先将用户问题在知识库中(如下图中的维基百科)进行向量搜索,通过语义相似度匹配的方式查询到相关的内容(拜登是美国现任第46届总统…),然后再将用户问题和搜索到的相关知识提供给大模型,使得大模型获得足够完备的知识来回答问题,以此获得更可靠的问答结果。 + + + +为什么需要这样做呢? + +我们可以把大模型比做是一个超级专家,他熟悉人类各个领域的知识,但他也有自己的局限性,比如他不知道你个人的一些状况,因为这些信息是你私人的,不会在互联网上公开,所以他没有提前学习的机会。 + +当你想雇佣这个超级专家来充当你的家庭财务顾问时,需要允许他在接受你的提问时先翻看一下你的投资理财记录、家庭消费支出等数据。这样他才能根据你个人的实际情况提供专业的建议。 + +**这就是 RAG 系统所做的事情:帮助大模型临时性地获得他所不具备的外部知识,允许它在回答问题之前先找答案。** + +根据上面这个例子,我们很容易发现 RAG 系统中最核心是外部知识的检索环节。专家能不能向你提供专业的家庭财务建议,取决于能不能精确找到他需要的信息,如果他找到的不是投资理财记录,而是家庭减肥计划,那再厉害的专家都会无能为力。 diff --git a/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/hun-he-jian-suo.md b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/hun-he-jian-suo.md new file mode 100644 index 0000000..f1b19c5 --- /dev/null +++ b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/hun-he-jian-suo.md @@ -0,0 +1,97 @@ +# 混合检索 + +### 为什么需要混合检索? + +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 步骤生效。\ + + +### 创建数据集时设置检索模式 + +通过进入“数据集->创建数据集”页面并在检索设置中设置不同的检索模式: + +创建数据集时设置检索模式 + +### 数据集设置中修改检索模式 + +通过进入“数据集->选择数据集->设置”页面中可以对已创建的数据集修改不同的检索模式。 + +数据集设置中修改检索模式 + +### 提示词编排中修改检索模式 + +通过进入“提示词编排->上下文->选择数据集->设置”页面中可以在创建应用时修改不同的检索模式。 + +提示词编排中修改检索模式 diff --git a/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/zhao-hui-mo-shi.md b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/zhao-hui-mo-shi.md new file mode 100644 index 0000000..d144dcc --- /dev/null +++ b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/zhao-hui-mo-shi.md @@ -0,0 +1,35 @@ +# 召回模式 + +当用户构建知识库问答类的 AI 应用时,如果在应用内关联了多个数据集,Dify 在检索时支持两种召回模式:N选1召回模式和多路召回模式。 + +召回模式设置 + +### N选1召回模式 + +根据用户意图和数据集描述,由 Agent 自主判断选择最匹配的单个数据集来查询相关文本,适合数据集区分度大且数据集数量偏少的应用。N选1召回模式依赖模型的推理能力,模型需要根据用户意图,选择最符合的一个数据集召回。在推理选择数据集时,数据集将作为 Agent 的工具类通过意图推理来进行选择,工具描述即数据集描述。 + +在用户上传数据集时,系统将自动为数据集创建一个摘要式的描述。为了在该模式下获得最佳的召回效果,你可以在“数据集->设置->数据集描述”中查看到系统默认创建的摘要描述,并检查该内容是否可以清晰的概括数据集的内容。 + +以下是N选1召回模式的技术流程图: + +N 选 1 召回 + +因此,在查询数据集过多,或者数据集描述差异较小时,该模式的保证召回的效果会受到影响。该模式更适用于数据集数量较少的应用。OpenAI Function Call 已支持多个工具调用,Dify 将在后续版本中改进该模式为 “N选M召回” 。\ + + +### 多路召回模式 + +根据用户意图同时匹配所有数据集,从多路数据集查询相关文本片段,经过重排序步骤,从多路查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API。在多路召回模式下,检索器会在所有与应用关联的数据集中去检索与用户问题相关的文本内容,并将多路召回的相关文档结果合并,并通过 Rerank 模型对检索召回的文档进行语义重排序。 + +在多路召回模式下,你需要配置 Rerank 模型,如何配置 Rerank 模型:[🔗](zhong-pai-xu.md#ru-he-pei-zhi-rerank-mo-xing) + +以下是多路召回模式的技术流程图: + +多路召回 + +由于多路召回模式不依赖于模型的推理能力或数据集描述,该模式在多数据集检索时能够获得质量更高的召回效果。因此,当创建的知识库问答应用关联了多个数据集时,我们推荐将召回模式配置为多路召回。\ +\ +\ +\ +\ +\ diff --git a/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/zhong-pai-xu.md b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/zhong-pai-xu.md new file mode 100644 index 0000000..745b080 --- /dev/null +++ b/zh_CN/advanced/jian-suo-zeng-qiang-sheng-cheng/zhong-pai-xu.md @@ -0,0 +1,52 @@ +# 重排序 + +### 为什么需要重排序? + +混合检索能够结合不同检索技术的优势获得更好的召回结果,但在不同检索模式下的查询结果需要进行合并和归一化(将数据转换为统一的标准范围或分布,以便更好地进行比较、分析和处理),然后再一起提供给大模型。这时候我们需要引入一个评分系统:重排序模型(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 模型 + +### 如何获取 Cohere Rerank 模型? + +登录:[https://cohere.com/rerank](https://cohere.com/rerank),在页内注册并申请 Rerank 模型的使用资格,获取 API 秘钥。 + +### 在数据集检索模式中设置 Rerank 模型 + +通过进入“数据集->创建数据集->检索设置”页面并在添加 Rerank 设置。除了在创建数据集可以设置 Rerank ,你也可以在已创建的数据集设置内更改 Rerank 配置,在应用编排的数据集召回模式设置中更改 Rerank 配置。 + +在数据集检索模式中设置 Rerank 模型 + +**TopK:**用于设置 Rerank 后返回相关文档的数量。 + +**Score 阈值:**用于设置 Rerank 后返回相关文档的最低分值。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。\ + + +### 在数据集多路召回模式中设置 Rerank 模型 + +通过进入“提示词编排->上下文->设置”页面中设置为多路召回模式时需开启 Rerank 模型。关于多路召回模式的说明:链接 + +在数据集多路召回模式中设置 Rerank 模型
混合检索
语义检索设置
全文检索设置
混合检索设置
创建数据集时设置检索模式
数据集设置中修改检索模式
提示词编排中修改检索模式
召回模式设置
N 选 1 召回
多路召回
混合检索 + 重排序
在模型供应商内配置 Cohere Rerank 模型
在数据集检索模式中设置 Rerank 模型
在数据集多路召回模式中设置 Rerank 模型