创建知识库&上传文档

1 创建知识库

在 Dify 主导航栏中点击知识库,在该页面你可以看到已有的知识库。你可以点击 创建知识库 进入创建向导:

  • 如果你已经准备好了文件,可以从上传文件开始;

  • 如果你还没有准备好文档,可以先创建一个空数据集;

如果你在创建数据集时选择了使用外部数据源,该知识库的类型不可更改。这是为了防止单一知识库存在多数据源而造成的管理困难。如果你需要使用多个数据源,建议创建多个知识库。


2 上传文档

知识库内上传文档的步骤:

  1. 从本地选择你需要上传的文档;

  2. 分段与清洗,预览效果;

  3. 选择及配置索引和检索策略;

  4. 等待分段嵌入;

  5. 完成上传,可以在应用中使用了🎉

上传文档的限制:

  • 单文档的上传大小限制为 15MB;

  • 单次批量上传文件个数上限为 20 个;

  • SaaS 版本的不同订阅计划限定了批量上传个数、文档上传总数、向量存储

3 分段与清洗

分段:大语言模型存在有限的上下文窗口,通常需要将整段文本进行分段处理后,将与用户问题关联度最高的几个段落召回,即分段 TopK 召回模式。此外,在用户问题与文本分段进行语义匹配时,合适的分段大小将有助于匹配关联性最高的文本内容,减少信息噪音。

清洗:为了保证文本召回的效果,通常需要在将数据传入模型之前对其进行清理。例如,如果输出中存在不需要的字符或者空行,可能会影响问题回复的质量。为了帮助用户解决这个问题, Dify 提供了多种清洗方法,可以帮助用户在将输出发送到下游应用程序之前对其进行清理。

分段与清洗支持两种配置策略

  • 自动模式(即将下线)

  • 自定义模式

在自定义模式下,用户可以根据不同的文档格式和场景要求来配置文本的分段和清洗策略。

分段规则:

  • 分段标识符,设置标识符如“\n”,系统将在文本中出现该标识符时分段;

  • 分段最大长度,根据分段的文本字符数最大上限来进行分段,超出该长度时将强制分段;

  • 分段重叠长度,设置分段间的重叠字符数,建议设置为分段长度的 10-25%,有助于保留分段之间的语义相关性,在多分段召回时提高召回效果。

预处理规则:

  • 替换连续的空格、换行符和制表符;

  • 删除所有 URL 和电子邮件地址;


4 ETL 可选配置

在 RAG 的生产级应用中,为了获得更好的数据召回效果,需要对多源数据进行预处理和清洗,即 ETL (extract, transform, load)。为了增强非结构化/半结构化数据的预处理能力,Dify 支持了可选的 ETL 方案:Dify ETL Unstructured ETL

Unstructured 能够高效地提取并转换您的数据为干净的数据用于后续的步骤。

Dify 各版本的 ETL 方案选择:

  • SaaS 版不可选,默认使用 Unstructured ETL;

  • 社区版可选,默认使用 Dify ETL ,可通过环境变量开启 Unstructured ETL;

文件解析支持格式的差异:

DIFY ETLUnstructured ETL

txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv

txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv、eml、msg、pptx、ppt、xml、epub

不同的 ETL 方案在文件提取效果的方面也会存在差异,想了解更多关于 Unstructured ETL 的数据处理方式,请参考官方文档


5 索引方式

你需要选择文本的索引方式来指定数据的匹配方式,索引策略往往与检索方式相关,你需要根据场景需求来选择合适的索引方式。

高质量模式:将调用 OpenAI 的嵌入接口进行处理,以在用户查询时提供更高的准确度。

经济模式:会使用关键词索引方式,降低了准确度但无需花费 Token。

Q&A 模式(仅社区版支持):Q&A 分段模式功能,与上述普通的「Q to P」(问题匹配文本段落)匹配模式不同,它是采用「Q to Q」(问题匹配问题)匹配工作,在文档经过分段后,经过总结为每一个分段生成 Q&A 匹配对,当用户提问时,系统会找出与之最相似的问题,然后返回对应的分段作为答案。这种方式更加精确,因为它直接针对用户问题进行匹配,可以更准确地获取用户真正需要的信息。

在知识库上传文档时,系统将对文本进行分段,使得用户的提问(输入)能匹配到相关的文本段落(Q to P),最后输出结果。

问题文本是具有完整语法结构的自然语言,而不是文档检索任务中的一些关键字,所以 Q to Q (问题匹配问题)的模式会令语意和匹配更加清晰,并同时满足一些高频和高相似度问题的提问场景。


6 检索设置

在高质量索引模式下,Dify 提供了 3 种检索方案:

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

  • 全文检索,索引文档中的所有词汇,从而允许用户查询任意词汇,并返回包含这些词汇的文本片段。

  • 混合检索,同时执行全文检索和向量检索,并附加重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API。

三种检索方式的具体配置如下:

向量检索

定义:通过生成查询嵌入并查询与其向量表示最相似的文本分段。

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 步骤生效。

最后更新于