创建知识库&上传文档
Last updated
Last updated
创建知识库并上传文档大致分为以下步骤:
在 Dify 团队内创建知识库,从本地选择你需要上传的文档;
选择分段与清洗模式,预览效果;
配置索引方式和检索设置;
等待分段嵌入;
完成上传,在应用内关联并使用 🎉
以下是各个步骤的详细说明:
在 Dify 主导航栏中点击知识库,在该页面你可以看到团队内的知识库,点击“创建知识库” 进入创建向导。
拖拽或选中文件进行上传,批量上传的文件数量取决于订阅计划;
如果还没有准备好文档,可以先创建一个空知识库;
如果你在创建知识库时选择了使用外部数据源(Notion 或同步 Web 站点),该知识库的类型不可更改;此举是为了防止单一知识库存在多数据源而造成的管理困难。如果你需要使用多个数据源,建议创建多个知识库并使用 多路召回 模式在同一个应用内引用多个知识库。
上传文档存在以下限制:
单文档的上传大小限制为 15MB;
SaaS 版本的不同订阅计划限定了批量上传个数、文档上传总数、向量存储空间。
将内容上传至知识库后,需要先对内容进行分段与数据清洗,该阶段可以被理解为是对内容预处理与结构化。
支持以下两种策略:
自动分段与清洗
自定义
指定内容的预处理方法(分段与清洗)后,接下来需要指定对结构化内容的索引方式。索引方式将直接影响 LLM 对知识库内容的检索效率以及回答的准确性。
系统提供以下三种索引方式,你可以根据实际需求调整每种方式内的检索设置:
高质量
经济
Q&A 模式
在高质量模式下,将首先调用 Embedding 嵌入模型(支持切换)将已分段的文本转换为数字向量,帮助开发者更有效地实现大量文本信息的压缩与存储;同时还能够在用户与 LLM 对话时提供更高的准确度。
如需了解更多,请参考《Embedding 技术与 Dify》。
高质量索引方式提供向量检索、全文检索和混合检索三种检索设置。关于更多检索设置的说明,请阅读 检索设置。
在高质量索引方式下,Dify 提供以下 3 种检索方案:
全文检索
混合检索
定义:向量化用户输入的问题并生成查询向量,比较查询向量与知识库内对应的文本向量距离,寻找最近的分段内容。
向量检索设置:
Rerank 模型:使用第三方 Rerank 模型对向量检索召回后的分段再一次进行语义重排序,优化排序结果。在“模型供应商”页面配置 Rerank 模型的 API 秘钥之后,在检索设置中打开“Rerank 模型”。
TopK:用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。默认值为 3,数值越高,预期被召回的文本分段数量越多。
Score 阈值:用于设置文本片段筛选的相似度阈值,只召回超过设置分数的文本片段,默认值为 0.5。数值越高说明对于文本与问题要求的相似度越高,预期被召回的文本数量也越少。
TopK 和 Score 设置仅在 Rerank 步骤生效,因此需要添加并开启 Rerank 模型才能应用两者中的设置。
在经济索引方式下,Dify 仅提供 1 种检索设置:
倒排索引是一种用于快速检索文档中关键词的索引结构,它的基本原理是将文档中的关键词映射到包含这些关键词的文档列表,从而提高搜索效率。具体原理请参考《倒排索引》。
TopK:用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。数值越高,预期被召回的文本分段数量越多。
指定检索设置后,你可以参考 召回测试/引用归属 查看关键词与内容块的匹配情况。
配置完上文所述的各项配置后,轻点“保存并处理”即可完成知识库的创建。你可以参考 在应用内集成知识库,搭建出能够基于知识库进行问答的 LLM 应用。
在 RAG 的生产级应用中,为了获得更好的数据召回效果,需要对多源数据进行预处理和清洗,即 ETL (extract, transform, load)。为了增强非结构化/半结构化数据的预处理能力,Dify 支持了可选的 ETL 方案:Dify ETL 和 Unstructured ETL 。Unstructured 能够高效地提取并转换您的数据为干净的数据用于后续的步骤。Dify 各版本的 ETL 方案选择:
SaaS 版不可选,默认使用 Unstructured ETL;
社区版可选,默认使用 Dify ETL ,可通过环境变量开启 Unstructured ETL;
文件解析支持格式的差异:
DIFY ETL | Unstructured 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 的数据处理方式,请参考官方文档。
Embedding 模型
Embedding 嵌入是一种将离散型变量(如单词、句子或者整个文档)转化为连续的向量表示的技术。它可以将高维数据(如单词、短语或图像)映射到低维空间,提供一种紧凑且有效的表示方式。这种表示不仅减少了数据的维度,还保留了重要的语义信息,使得后续的内容检索更加高效。
Embedding 模型是一种专门用于将文本向量化的大语言模型,它擅长将文本转换为密集的数值向量,有效捕捉语义信息。
如需了解更多,请参考:《Dify:Embedding 技术与 Dify 数据集设计/规划》。