当前位置: 首页 > news >正文

【学习笔记】Dify知识库配置参数解析

一、知识库的作用

       知识库功能是将检索增强生成()上的各环节可视化,提供了一套简单易用的用户界面来方便应用构建者管理个人或者团队的知识库,并能够快速集成至 AI 应用中。

       开发者可以将企业内部文档、FAQ、规范信息等内容上传至知识库进行结构化处理,供后续 LLM 查询。

        相比于 AI 大模型内置的静态预训练数据,知识库中的内容能够实时更新,确保 LLM 可以访问到最新的信息,避免因信息过时或遗漏而产生的问题。

        LLM 接收到用户的问题后,将首先基于关键词在知识库内检索内容。知识库将根据关键词,召回相关度排名较高的内容区块,向 LLM 提供关键上下文以辅助其生成更加精准的回答。

        开发者可以通过此方式确保 LLM 不仅仅依赖于训练数据中的知识,还能够处理来自实时文档和数据库的动态数据,从而提高回答的准确性和相关性。

核心优势:

• 实时性:知识库中的数据可随时更新,确保模型获得最新的上下文。

• 精准性:通过检索相关文档,LLM 能够基于实际内容生成高质量的回答,减少幻觉现象。

• 灵活性:开发者可自定义知识库内容,根据实际需求调整知识的覆盖范围。

       知识库接收多类文件,例如:

  • 长文本内容(TXT、Markdown、DOCX、HTML、JSON 甚至是 PDF)
  • 结构化数据(CSV、Excel 等)
  • 在线数据源(网页爬虫、Notion 等)

    将文件上传至“知识库”即可自动完成数据处理。

二、知识库的管理

       Dify中创建知识库并上传文档大致分为以下步骤:

    (1)创建知识库。通过上传本地文件、导入在线数据或创建一个空的知识库。

     (2)指定分段模式。该阶段是内容的预处理与数据结构化过程,长文本将会被划分为多个内容分段。你可以在此环节预览文本的分段效果。

     (3)设定索引方法和检索设置。知识库在接收到用户查询问题后,按照预设的检索方式在已有的文档内查找相关内容,提取出高度相关的信息片段供语言模型生成高质量答案。

        Dify默认支持的格式为:txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv

        Unstructured ETL支持的格式为:txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv、eml、msg、pptx、ppt、xml、epub

三、知识库的元数据

       元数据是用于描述其他数据的信息。简单来说,它是”关于数据的数据”。元数据就像一本书的目录或标签,可以为用户介绍数据的内容、来源和用途。 通过提供数据的上下文,元数据能帮助用户在知识库内快速查找和管理数据。

        在知识库中,元数据字段分为两类:内置元数据(Built-in) 和 自定义元数据

内置元数据(Built-in)

自定义元数据 

显示位置

知识库界面

元数据栏的下半部分。

知识库界面

元数据栏的上半部分。

启用方式

默认禁用,需要手动开启才能生效。

由用户根据需求自由添加。

生成方式

启用后,由系统自动提取相关信息并生成字段值。

用户手动添加,完全由用户自定义。

修改权限

一旦生成,无法修改字段与字段值。

可以删除或编辑字段名称,也可以修改字段值。

应用范围

启用后,适用于已上传和新上传的所有文档。

添加元数据字段后,字段会储存在知识库的元数据列表中/需要手动设置,才能将该字段应用于具体文档。

       用户可以根据元数据标签快速筛选和查找相关信息,节省时间并提高工作效率。数据帮助企业或组织有效分类和存储数据,提高数据的管理和检索能力,增强数据的可用性和一致性。

四、知识库的配置参数

1. 分段设置

        分段设置分为通用设置和父子设置两大类。

1.1 通用模式

       系统按照用户自定义的规则将内容拆分为独立的分段。当用户输入问题后,系统自动分析问题中的关键词,并计算关键词与知识库中各内容分段的相关度。根据相关度排序,选取最相关的内容分段并发送给 LLM,辅助其处理与更有效地回答。

       

       其中,使用Q&A分段是指通过将文档内容预处理为问答对(如Q:问题 A:答案)的结构化格式,使系统能精准匹配用户问题并返回对应答案段落。

       Q&A分段模式采用「QtoQ」(问题匹配问题)的匹配工作方式,与普通的「QtoP」(问题匹配文本段落)匹配模式不同。在文档经过分段后,会为每一个分段生成Q&A匹配对,当用户提问时,系统会找出与之最相似的问题,然后返回对应的分段作为答案。这种方式直接针对用户问题进行匹配,可以更准确地获取用户真正需要的信息,使得语意和匹配更加清晰,能同时满足一些高频和高相似度问题的提问场景。

       Q&A分段的局限性是:

       1.对数据准备要求高,需要对文档进行精心的整理和标注,为每个问题和答案添加统一的前缀标识(如Q:和A:)。对于大量文档,这一过程可能非常繁琐,且需要耗费大量的人力和时间成本。

       2.覆盖问题范围有限。生成的Q&A匹配对是基于文档内容总结而来的,可能无法涵盖所有用户可能提出的问题。当用户提出的问题在已有的Q&A匹配对中找不到相似问题时,系统可能无法提供准确的答案,导致回答的局限性

       3.依赖文档质量。系统的准确性高度依赖于原始文档的质量。如果文档内容存在错误、歧义或不完整的情况,生成的Q&A匹配对也会受到影响,进而影响系统对用户问题的回答质量

1.2 父子分段模式

       与通用模式相比,父子模式采用双层分段结构来平衡检索的精确度和上下文信息,让精准匹配与全面的上下文信息二者兼得。
       其中,父区块(Parent-chunk)保持较大的文本单位(如段落),提供丰富的上下文信息;子区块(Child-chunk)则是较小的文本单位(如句子),用于精确检索。系统首先通过子区块进行精确检索以确保相关性,然后获取对应的父区块来补充上下文信息,从而在生成响应时既保证准确性又能提供完整的背景信息。你可以通过设置分隔符最大长度来自定义父子区块的分段方式。

 1.3 区别

       通用模式的分段结果为多个独立的内容分段,而父子模式采用双层结构进行内容分段,即单个父分段的内容(文档全文或段落)内包含多个子分段内容(句子)。
       不同的分段方式将影响 LLM 对于知识库内容的检索效果。在相同文档中,采用父子检索所提供的上下文信息会更全面,且在精准度方面也能保持较高水平,大大优于传统的单层通用检索方式。

1.4 推荐模式

    (1)问答场景优先Q&A模式:如企业知识库中已有标准化问答文档。

    (2)通用场景选标准分块:适用于快速部署且文档结构简单的场景。

    (3)复杂需求用父子模式:需兼顾精准检索与上下文关联时(如技术支持)。

    (4)特殊格式尝试动态分块:处理表格、代码等非标准内容时灵活调整规则。

2. 索引设置

2.1 高质量

         在高质量模式下,使用 Embedding 嵌入模型将已分段的文本块转换为数字向量,帮助更加有效地压缩与存储大量文本信息;使得用户问题与文本之间的匹配能够更加精准。

       将内容块向量化并录入至数据库后,需要通过有效的检索方式调取与用户问题相匹配的内容块。高质量模式提供向量检索、全文检索和混合检索三种检索设置。关于各个设置的详细说明,请继续阅读检索设置 4.3。

       选择高质量模式后,当前知识库的索引方式无法在后续降级为 “经济”索引模式。如需切换,建议重新创建知识库并重选索引方式。

2.2 经济

       在经济模式下,每个区块内使用 10 个关键词进行检索,降低了准确度但无需产生费用。对于检索到的区块,仅提供倒排索引方式选择最相关的区块。

       选择经济型索引方式后,若感觉实际的效果不佳,可以在知识库设置页中升级为 “高质量”索引方式。

3. 检索设置

      在高质量索引方式中,Dify 提供了向量检索、全文检索、混合检索三种检索方式。

3.1 向量搜索

      向量检索基于向量相似性的语义检索--- 其中文本块和查询被转换为向量并通过相似性评分进行匹配,使用倒排索引(一种标准搜索引擎技术)进行关键字匹配。

       定义:将用户的问题向量化,生成查询向量,然后将其与知识库中相应的文本向量进行比较,以找到最接近的块。
       设置如下:

       (1)Rerank 模型: 默认关闭。开启后将使用第三方 Rerank 模型再一次对向量检索(Vector Search)返回的内容分段重新排序,以优化排序结果。这有助于LLM 获取更加精确的内容,辅助其提升输出的质量。开启该选项前,需前往“设置” → “模型供应商”,提前配置 Rerank 模型的 API 秘钥。

       (2)TopK: 用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。默认值为 3,数值越高,预期返回的文本分段数量越多。

        (3)Score 阈值: 用于设置文本片段筛选的相似度阈值,只召回超过设置分数的文本片段,默认值为 0.5。数值越高说明对于文本与问题要求的相似度越高,预期被返回的文本数量也越少。

3.2 全文搜索

       定义:索引文档中的所有术语,允许用户查询任何术语并返回包含这些术语的文本片段。

3.3 混合搜索

       定义:此过程结合了全文搜索和向量搜索,并同时执行。它包含一个重新排序步骤,根据用户的查询从两个搜索结果中选择最匹配的结果。

3.3.1 权重设置

      此功能允许用户设置语义优先级和关键字优先级的自定义权重。关键字搜索是指在知识库中进行全文搜索,而语义搜索是指在知识库中进行向量搜索。

     (1) 将“语义”值调整至1

       仅启用语义检索模式。借助 Embedding 模型,即便知识库中没有出现查询中的确切词汇,也能通过计算向量距离的方式提高搜索的深度,返回正确内容。此外,当需要处理多语言内容时,语义检索能够捕捉不同语言之间的意义转换,提供更加准确的跨语言搜索结果。

      (2)将“关键词”值调整至1
       仅启用关键词检索模式。通过用户输入的信息文本在知识库全文匹配,适用于用户知道确切的信息或术语的场景。该方法所消耗的计算资源较低,适合在大量文档的知识库内快速检索。
       (3)自定义关键词和语义权重
        除了将不同的数值调整至1,你还可以不断调试二者的权重,找到符合业务场景的最佳权重比例。

3.3.2 Rerank 模型

      默认关闭。开启后将使用第三方 Rerank 模型再一次重排序由混合检索召回的内容分段,以优化排序结果。向 LLM 发送经过重排序的分段,辅助其提升输出的内容质量。

4、小结

  (1)通用模式的分段结果为多个独立的内容分段;

  (2)父子模式采用双层结构进行内容分段,即单个父分段的内容(文档全文或段落)内包含多个子分段内容(句子)

   (3)相同文档中,采用父子检索提供的上下文信息更全面,且精准度方面也保持较高水平,远优于传统的单层通用检索方式。

   (4)质量最好的组合=父子分段+高质量+混合检索(微调-侧重语义还是关键字)

五、外部知识库

       对于内容检索有着更高要求的进阶开发者而言,Dify 平台内置的知识库功能和文本检索和召回机制存在限制,无法轻易变更文本召回结果。

        独立于 Dify 平台之外的知识库在本文内均被统称为 “外部知识库” 。

       连接外部知识库功能可以将 Dify 平台与外部知识库建立连接。通过 API 服务,AI 应用能够获取更多信息来源。这意味着:

  • Dify 平台能够直接获取托管在云服务提供商知识库内的文本内容,开发者无需将内容重复搬运至 Dify 中的知识库;

  • Dify 平台能够直接获取自建知识库内经算法处理后的文本内容,开发者仅需关注自建知识库的信息检索机制,并不断优化与提升信息召回的准确度。

       

填写以下参数:

  • 知识库名称与描述

  • 外部知识库 API 选择在第二步中关联的外部知识库 API;Dify 将通过 API 连接的方式,调用存储在外部知识库的文本内容;

  • 外部知识库 ID 指定需要被关联的特定的外部知识库 ID,详细说明请参考外部知识库 API。

  • 调整召回设置

    Top K: 用户发起提问时,将请求外部知识 API 获取相关性较高的内容分段。该参数用于筛选与用户问题相似度较高的文本片段。默认值为 3,数值越高,召回存在相关性的文本分段也就越多。

    Score 阈值: 文本片段筛选的相似度阈值,只召回超过设置分数的文本片段,默认值为 0.5。数值越高说明对于文本与问题要求的相似度越高,预期被召回的文本数量也越少,结果也会相对而言更加精准。

       请求接受以下 JSON 格式的数据。

属性

是否必需

类型

描述

示例值

knowledge_id

字符串

知识库唯一 ID

AAA-BBB-CCC

query

字符串

用户的查询

Dify 是什么?

retrieval_setting

对象

知识检索参数

见下文

metadata_condition

对象

原数组筛选

见下文


POST <your-endpoint>/retrieval HTTP/1.1
-- 请求头
Content-Type: application/json
Authorization: Bearer your-api-key
-- 数据
{"knowledge_id": "your-knowledge-id","query": "你的问题","retrieval_setting":{"top_k": 2,"score_threshold": 0.5}
}

参考链接:

Dify知识库配置参数解析

相关文章:

  • 跨越十年的C++演进:C++14新特性全解析
  • CNN不是一个模型?
  • [特殊字符] Windows 查看端口占用及服务来源教程(以 9018 端口为例)
  • Python网安-随机密码生成器
  • 架构轻巧的kokoro 文本转语音模型
  • tcpdump用法
  • 快速傅里叶变换(FFT)是什么?
  • 以太网基础与 VLAN 配置实验
  • HTML 按钮单击事件示例
  • OceanBase批量插入数据报错java.lang.ArrayIndexOutOfBoundsException:0
  • 华为云鸿蒙应用入门级开发者认证 实验(HCCDA-HarmonyOS Cloud Apps)
  • EMQ X Broker 配置HTTP 的外部鉴权接口
  • 力扣-合并区间
  • QT6实现软键盘的两种方法
  • 腾讯混元API调用优化实战:用API网关实现流量控制+缓存+监控
  • 2-深度学习挖短线股-3-训练数据计算
  • 【windows处理技巧】如何缩小PDF
  • 鸿蒙边缘智能计算架构实战:多线程图像采集与高可靠缓冲设计
  • LeetCode 2311.小于等于 K 的最长二进制子序列:贪心(先选0再选1)-好像还是比灵神写的清晰些
  • VUE3入门很简单(3)--- watch