Dify学习笔记-知识库(六)

1、知识库

大多数语言模型采用较为陈旧的训练数据,并且对每次请求的上下文有长度限制。例如 GPT-3.5 是基于 2021 年的语料进行训练的,且有每次约 4K Token 的限制。这意味着开发者如果想让 AI 应用基于最新的、私有的上下文对话,必须使用类似嵌入(Embedding)之类的技术。
Dify 的数据集功能可以使开发者(甚至非技术人员)以简单的方式管理数据集,并自动集成至 AI 应用中。你只需准备文本内容,例如:
长文本内容(TXT、Markdown、DOCX、HTML、JSONL 甚至是 PDF 文件)
结构化数据(CSV、Excel 等)
另外,我们正在逐步支持从诸多数据源同步数据至数据集,包括:
网页
Notion
Github
数据库
……

情景:如果你的公司想基于现有知识库和产品文档建立一个 AI 客服助手,你可以在 Dify 中将文档上传至数据集,并建立一个对话型应用。这在过去可能需要花费你数周的时间,且难以持续维护。

数据集与文档

在 Dify 中,**数据集(Knowledge)是一些文档(Documents)**的集合。一个数据集可以被整体集成至一个应用中作为上下文使用。文档可以由开发者或运营人员上传,或由其它数据源同步(通常对应数据源中的一个文件单位)。
上传文档的步骤:
上传你的文件,通常是长文本文件或表格文件。
分段、清洗并预览
由 Dify 提交至 LLM 供应商嵌入为向量数据,并存储
为文档设置元数据
可以在应用中使用了🎉!

创建数据集

在 Dify 主导航栏中点击数据集,在该页面你可以看到已有的数据集。你可以点击创建数据集进入创建向导:
如果你已经准备好了文件,可以从上传文件开始
如果你还没有准备好文档,可以先创建一个空数据集
如果你在创建数据集时选择了使用外部数据源,该数据集的类型不可更改。这是为了防止单一数据集存在多数据源而造成的管理困难。如果你需要使用多个数据源,建议创建多个数据集。

编辑良好的数据集描述

当一个应用中引用多个数据集时,AI 会根据用户的提问和数据集的描述来决定使用哪个数据集来回答用户的问题。因此,良好的数据集描述能提升 AI 选择数据集的准确率。
编写良好的数据集描述的要点是写清楚数据集包含的内容和特点。数据集的描述建议以这个开头:仅当你想要回答的问题是关于以下内容时有用:具体描述。一个房地产数据集的描述:

仅当你想要回答的问题是关于以下内容时有用: 2010 年到 2020
年的全球房地产市场数据。这些数据包括每个城市的平均房价、房产销售量、房屋类型等信息。此外,该数据集还包括了一些经济指标,如
GDP、失业率等,以及一些社会指标,如人口数量、教育水平等,这些指标可以帮助分析房地产市场的趋势和影响因素。
通过这些数据,我们可以了解全球房地产市场的发展趋势,分析各个城市的房价变化,以及了解经济和社会因素对房地产市场的影响。

上传文档

选择你要上传的文件,支持批量上传;
预览全文;
进行分段和清洗;
等待 Dify 为你处理这些数据,通常该步骤在 LLM 供应商中需要消耗 Token。

文本分段与清洗

文本数据的分段与清洗是指 Dify 自动将你的数据进行段落分段 & 向量化处理,使得用户的提问(输入)能匹配到相关的文本段落(Q to P),最后输出结果。
上传一个数据集的文档,你需要选择文本的索引方式来指定数据的匹配方式。这会影响到 AI 在回复问题时的准确度。
高质量模式下,将调用 OpenAI 的嵌入接口进行处理,以在用户查询时提供更高的准确度。
经济模式下,会使用关键词索引方式,降低了准确度但无需花费 Token。
Q&A 分段模式下,Q&A 分段模式功能,与上述普通的「Q to P」(问题匹配文本段落)匹配模式不同,它是采用「Q to Q」(问题匹配问题)匹配工作,在文档经过分段后,经过总结为每一个分段生成 Q&A 匹配对,当用户提问时,系统会找出与之最相似的问题,然后返回对应的分段作为答案。这种方式更加精确,因为它直接针对用户问题进行匹配,可以更准确地获取用户真正需要的信息。
问题文本是具有完整语法结构的自然语言,而不是文档检索任务中的一些关键字,所以 Q to Q (问题匹配问题)的模式会令语意和匹配更加清晰,并同时满足一些高频和高相似度问题的提问场景。

对文档进行修改

由于技术原因,如果开发者对文档进行以下修改,Dify 会为你创建一个新的文档,而旧的文档会被存档和停用:

  • 调整分段和清洗设置
  • 重新上传文件

我们支持对分段与清洗后的文本进行自定义增删改,你可以动态调整自己的分段信息,让你的数据集更加精准。通过点击数据集中 文档 --> 段落 --> 编辑 可修改段落内容以及自定义关键词。通过点击 文档 --> 段落–> 添加分段–>添加新分段 可手动添加新的分段内容,也可以点击 文档 --> 段落–> 添加分段–>批量添加 批量上传新的分段内容。

在这里插入图片描述
在这里插入图片描述

文档的禁用和归档

禁用、取消禁用:数据集支持将暂时不想被索引的文档或分段进行禁用,在数据集文档列表,点击禁用按钮,则文档被禁用;也可以在文档详情,点击禁用按钮,禁用整个文档或某个分段,禁用的文档将不会被索引。禁用的文档点击启用,可以取消禁用。
归档、取消归档:一些不再使用的旧文档数据,如果不想删除可以将它进行归档,归档后的数据就只能查看或删除,不可以进行编辑。在数据集文档列表,点击归档按钮,则文档被归档,也可以在文档详情,归档文档。归档的文档将不会被索引。归档的文档也可以点击撤销归档。

通过 API 维护数据集

TODO

数据集设置

在数据集的左侧导航中点击设置,你可以改变数据集的以下设置项:
数据集名称,用于识别一个数据集。
数据集描述,能够让 AI 更好的适时取用数据集,如果描述为空则会使用 Dify 的自动索引策略
权限,可选择 只有我 或 所有团队成员,不具有权限的人将无法查阅和编辑数据集。
修改索引模式。注意:索引模式如果从经济升级为高质量会带来额外的 Token 消耗。而从高质量降级为经济则不会消耗 Token。

集成至应用

数据集准备完成后需集成到应用中,当 AI 应用处理用户请求时,会自动将与之关联的数据集内容作为上下文参考。
进入应用 - 提示词编排页面
在上下文选项中,选择需要集成的数据集
保存设置以完成集成

Q&A

Q: 上传 PDF 解析乱码怎么办?

A: 如果你的 PDF 在特定格式内容下解析出现乱码的情况,可以考虑将 PDF 转成 Markdown 格式,或目前 Markdown 的准确度会更高,或减少 PDF 内的图片、表格等格式内容。对于 PDF 的使用体验我们正在研究优化方案。

2、从 Notion 导入数据

Dify 数据集支持从 Notion 导入,并设置 同步 使得数据在 Notion 更新后便自动同步到 Dify。

授权验证

在创建数据集,选择数据源时,点击 同步自 Notion 内容-- 去绑定,根据提示完成授权验证。
你也可以:进入 设置 – 数据来源 – 添加数据源 中点击 Notion 来源 绑定 ,完成授权验证。

在这里插入图片描述

导入 Notion 数据

完成验证授权后,进入创建数据集页面,点击 **同步自 Notion 内容 ,**选择需要的授权页面进行导入。

进行分段和清洗

接下来,选择你的分段设置和索引方式,保存并处理。等待 Dify 为你处理这些数据,通常该步骤在 LLM 供应商中需要消耗 Token。Dify 不仅支持普通类型页面导入,并且会将 database 类型下的页面属性进行汇总保存。
请注意:图片和文件暂不支持导入,表格类数据会被转换为文本展示。

同步 Notion 数据

如果您的 Notion 内容有修改,您可以直接在 Dify 数据集 文档列表页中点击 同步 即可进行数据一键同步,该步骤是需要消耗 Token。

在这里插入图片描述

社区版 Notion 的集成配置方法

Notion集成分为内部集成(internal integration)和外部集成(public integration)两种方式。可按需在 Dify 里配置。两种集成方式的具体区别请参阅 Notion 官方文档。

1、使用 internal 集成方式

首先,在集成的设置页面中创建集成。默认情况下,所有集成都以内部集成开始;内部集成将与您选择的工作区相关联,因此您需要是工作区所有者才能创建集成。
具体操作步骤:
点击“New integration”按钮,类型默认是 Internal(不可修改),选择关联的空间,输入集成名称并上传 logo 后,点击“Submit”,集成创建成功。
在这里插入图片描述

创建集成后,您可以根据需要在 Capabilities 选项卡下更新其设置,并在 Secrets 下点击 “Show” 按钮然后复制 Secrets。

在这里插入图片描述
复制后回到 Dify 源代码下,在 .env 文件里配置相关环境变量,环境变量如下:
NOTION_INTEGRATION_TYPE = internal or NOTION_INTEGRATION_TYPE = public
NOTION_INTERNAL_SECRET=you-internal-secret

2、使用 Public 集成方式

需要将 internal 集成升级为 public 集成,导航到集成的 Distribution 页面,然后切换开关以公开集成。将开关切换到公共设置,您需要在下面的 Organization Information 表单中填写其他信息,包括您的公司名称、网站和重定向 URL 等信息,然后点击“Submit”按钮。

在这里插入图片描述
在集成的设置页面中成功公开集成后,您将能够在密钥选项卡中访问集成的密钥:

在这里插入图片描述
回到 Dify 源代码下,在 .env 文件里配置相关环境变量,环境变量如下:
NOTION_INTEGRATION_TYPE=public
NOTION_CLIENT_SECRET=you-client-secret
NOTION_CLIENT_ID=you-client-id
配置完成后,即可在数据集中操作 Notion 的数据导入及同步功能。

3、通过 API 维护数据集

鉴权、调用方式与应用 Service API 保持一致,不同的是一个数据集 API token 可操作所有数据集

使用数据集API的优势

将您的数据系统同步至 Dify 数据集,创建强大的工作流程。
提供数据集列表,文档列表及详情查询,方便构建您自己的数据管理页。
同时支持纯文本和文件两种上传和更新文档的接口,并支持分段级的批量新增和修改,便捷您的同步方式。
减少文档手动处理同步的时间,提高您对 Dify 的软件和服务的可见性。

如何使用

进入数据集页面,你可以在左侧的导航中切换至 API 页面。在该页面中你可以查看 Dify 提供的数据集 API 文档,并可以在 API 密钥 中管理可访问数据集 API 的凭据。

在这里插入图片描述

API 调用示例

创建空数据集

仅用来创建空数据集

curl --location --request POST 'https://api.dify.ai/v1/datasets' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{"name": "name"}'

数据集列表

curl --location --request GET 'https://api.dify.ai/v1/datasets?page=1&limit=20' \
--header 'Authorization: Bearer {api_key}'

通过文本创建文档

curl --location --request POST '<https://api.dify.ai/v1/datasets/<uuid:dataset_id>/document/create_by_text>' \\
--header 'Authorization: Bearer {api_key}' \\
--header 'Content-Type: application/json' \\
--data-raw '{
    "name": "Dify",
    "text": "Dify means Do it for you...",
    "indexing_technique": "high_quality",
    "process_rule": {
        "rules": {
                "pre_processing_rules": [{
                        "id": "remove_extra_spaces",
                        "enabled": true
                }, {
                        "id": "remove_urls_emails",
                        "enabled": true
                }],
                "segmentation": {
                        "separator": "###",
                        "max_tokens": 500
                }
        },
        "mode": "custom"
    }
}'

通过文件创建文档

curl --location POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_file' \
--header 'Authorization: Bearer {api_key}' \
--form 'data="{
	"name": "Dify",
	"indexing_technique": "high_quality",
	"process_rule": {
		"rules": {
			"pre_processing_rules": [{
				"id": "remove_extra_spaces",
				"enabled": true
			}, {
				"id": "remove_urls_emails",
				"enabled": true
			}],
			"segmentation": {
				"separator": "###",
				"max_tokens": 500
			}
		},
		"mode": "custom"
	}
    }";
    type=text/plain' \
--form 'file=@"/path/to/file"'

获取文档嵌入状态(进度)

curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{batch}/indexing-status' \
--header 'Authorization: Bearer {api_key}'

删除文档

curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}' \
--header 'Authorization: Bearer {api_key}'

数据集文档列表

curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents' \
--header 'Authorization: Bearer {api_key}'

新增分段

curl 'https://api.dify.ai/v1/datasets/aac47674-31a8-4f12-aab2-9603964c4789/documents/2034e0c1-1b75-4532-849e-24e72666595b/segment' \
  --header 'Authorization: Bearer {api_key}' \
  --header 'Content-Type: application/json' \
  --data-raw $'"chunks":[
  {"content":"Dify means Do it for you",
  "keywords":["Dify","Do"]
  }
  ]'
  --compressed

错误信息
document_indexing,文档索引失败
provider_not_initialize, Embedding 模型未配置
not_found,文档不存在
dataset_name_duplicate ,数据集名称重复
provider_quota_exceeded,模型额度超过限制
dataset_not_initialized,数据集还未初始化
unsupported_file_type,不支持的文件类型
目前只支持:txt, markdown, md, pdf, html, htm, xlsx, docx, csv
too_many_files,文件数量过多,暂时只支持单一文件上传
file_too_large,文件太大,支持15M以下

4、外部数据工具

功能介绍

此前 功能允许开发者可以直接上传各类格式的长文本、结构化数据来构建数据集,使 AI 应用基于用户上传的最新上下文进行对话。
而本次更新的外部数据工具赋能开发者可以使用自有的搜索能力或内部知识库等外部数据作为 LLM 的上下文,通过 API 扩展的方式实现外部数据的获取并嵌入提示词。相比在云端上传数据集,使用外部数据工具可以在保障私有数据安全,自定义搜索,获取实时数据等方面有显著优势。

具体实现

当终端用户向对话系统提出请求时,平台后端会触发外部数据工具(即调用自己的 API),它会查询用户问题相关的外部信息,如员工资料、实时记录等,通过 API 返回与当前请求相关的部分。平台后端会将返回的结果组装成文本作为上下文注入到提示词中,以输出更加个性化和符合用户需求的回复内容。

操作说明

  1. 在使用外部数据工具之前,你需要准备一个 API 和用于鉴权的 API Key,请阅读
  2. Dify 提供了集中式的 API 管理,在设置界面统一添加 API 扩展配置后,即可在 Dify 上的各类应用中直接使用。

在这里插入图片描述

  1. 我们以“查询天气”为例,在“新增基于 API 的扩展”对话框输入名字,API 端点,API Key。保存后我们就可以调用 API 了。

在这里插入图片描述
4. 在提示词编排页面,点击“工具”右侧的“+添加”按钮,在打开的“添加 工具”对话框,填写名称和变量名称(变量名称会被引用到提示词中,请填写英文),以及选择第 2 步中已经添加的基于 API 的扩展。
在这里插入图片描述

  1. 这样,我们在提示词编排框就可以把查询到的外部数据拼装到提示词中。比如我们要查询今天的伦敦天气,可以添加location 变量,输入"London",结合外部数据工具的扩展变量名称weather_data,调试输出如下:

在这里插入图片描述
在对话日志中,我们也可以看到 API 返回的实时数据:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言实现快速排序算法(附带源代码)

快速排序 在区间中随机挑选一个元素作基准&#xff0c;将小于基准的元素放在基准之前&#xff0c;大于基准的元素放在基准之后&#xff0c;再分别对小数区与大数区进行排序。 动态效果过程演示&#xff1a; 快速排序&#xff08;Quick Sort&#xff09;是一种常用的排序算法&…

Mac 也能玩文明6!下载安装详细教程

最近朋友给我分享了一个 Mac 玩文明6的方法&#xff0c;丝毫不卡顿&#xff0c;非常流畅&#xff0c;分享给大家 文明6是最新的文明系列游戏&#xff0c;和以往的文明游戏一样&#xff0c;玩家将从石器时代创建文明&#xff0c;然后迈向信息时代&#xff0c;最终通过军事、经济…

SQL 系列教程(二)

目录 SQL DELETE 语句 DELETE 语句 演示数据库 DELETE 实例 删除所有行 SQL TOP, LIMIT, ROWNUM 子句 TOP 子句 演示数据库 SQL TOP、LIMIT 和 ROWNUM 示例 SQL TOP PERCENT 实例 添加WHERE子句 SQL MIN() 和 MAX() 函数 MIN() 和 MAX() 函数 演示数据库 MIN() …

【服务器Midjourney】Midjourney网站0基础搭建

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

4D成像雷达「风再起」

编者按&#xff1a;4D成像雷达在过去几年已经得到汽车行业的认可&#xff0c;但后面的路怎么走&#xff0c;是否会一帆风顺&#xff0c;还受制于很多因素。 “去年第三季度&#xff0c;四家合作伙伴都进入了基于我们芯片组的4D雷达生产阶段&#xff0c;目前正处于与欧美和亚洲头…

太卷了!这个考试系统不愧是“卷王”!

大家好&#xff0c;我是 Java陈序员。 今天给大家推荐一款 Java 开源、功能强大、搭建简单的调查问卷系统和考试系统。 关注微信公众号&#xff1a;【Java陈序员】&#xff0c;获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 SurveyKing —— 也叫“…

简化java代码:mapstruct + 策略模式

目录 目的 准备 注意 相同类型-属性名不同 实体类 映射 使用 验证-查看实现类 测试 不同类型(策略模式) 实体类 映射 工具类 使用&#xff1a;对象拷贝 验证-查看实现类 测试 使用&#xff1a;集合拷贝 测试 策略模式说明 准备-依赖 目的 简化 BeanUtils.…

JAVA 学习 面试(四)垃圾回收篇

Java中的每个对象都经历了创建、使用和最终被回收的过程。从对象实例化开始&#xff0c;它可能被程序的多个部分引用&#xff0c;直到最后一个引用消失&#xff0c;对象成为垃圾&#xff0c;等待回收。 JVM垃圾查找算法 &#xff08;1&#xff09;引用计数法&#xff1a;已淘…

开始读 Oracle PL/SQL Programming 第6版

最近觉得PL/SQL越来越重要&#xff0c;因为这本书早就在待读列表中&#xff0c;因此决定系统的学一下。 2024年1月24日晚开始读。 在亚马逊上的评价还不错&#xff1a; 本书的第一作者是Steven Feuerstein&#xff0c;是Oracle资深的Developer Advocate。 本书的示例代码可…

JS进阶-内置构造函数(二)

小提示&#xff1a;这些内置函数在开发使用的频率非常的频繁&#xff0c;建议认真看一下&#xff0c;并背一下 目录 知识回顾&#xff1a; • Object 三个常用静态方法&#xff08;静态方法就是只有构造函数Object可以调用的&#xff09; Object.keys Object.values Obj…

《动手学深度学习(PyTorch版)》笔记3.4

Chapter3 Linear Neural Networks 3.4 Softmax Regression 3.4.1 Classification Problems 一般的分类问题并不与类别之间的自然顺序有关&#xff0c;统计学家发明了一种表示分类数据的简单方法&#xff1a;独热编码&#xff08;one-hot encoding&#xff09;。独热编码是一…

docker里安装conda,并source本地已有的虚拟环境包

有的环境比较难配&#xff0c;在镜像里配置的版本总是与本地不同&#xff0c;导致程序起不来&#xff0c;今天就用个最基础的镜像&#xff0c;去配置anaconda&#xff0c;然后直接导入虚拟环境。 本次使用镜像&#xff1a;nvcr.io/nvidia/cuda:12.2.0-runtime-ubuntu20.04&…

Spring Boot 中的自动配置(autoconfigure)

文中部分图片来源为 动力节点-王鹤老师的Spring Boot3.0 视频讲解中。 Spring Boot 中的自动配置&#xff08;autoconfigure&#xff09; 一、自动配置的原理二、关键注解和类1.EnableAutoConfiguration 注解2.Import 注解3.AutoConfigurationImportSelector 类4.AutoConfigura…

JeecgBoot 3.6.1实现Modal对话框,以为审核数据为例

JeecgBoot 3.6.1实现Modal对话框 vue使用的是3.0版本 文章目录 JeecgBoot 3.6.1实现Modal对话框前言一、列表页面关键代码示例二、textAuditModal.vue代码示例三、test.api.ts总结 前言 在工作中&#xff0c;有一个需求&#xff0c;要求&#xff0c;在数据列表页&#xff0c;…

念念不忘智能编程,必有回响CodeArts Snap

开发者的碎碎念 之前在【我与ModelArts的故事】的文章里&#xff0c;分享过我学习新技术的经历&#xff0c;主要有&#xff1a; 自主学习&#xff0c;比如自学Python&#xff1b;借助华为云的产品边用边学。 在围着"编程学习"这座城池&#xff0c;外围来来回回转了…

AI部署开发指南:用vs2019编译OnnxRuntime-v1.16.2

前言 要详细了解一个系统的部署&#xff0c;对其源码进行调试可能是最好的办法。 Pytorch的部署几经改版&#xff0c;最大的特点依然是不稳定&#xff0c;或者使用libtorch这种稳定但优化力度不够的部署方案。 而稳定且通用的方案&#xff0c;目前仍然是export to onnx的办法…

HCIP:不同VLAN下实现网络互相通信

配置pc1 配置pc2 配置pc3 将sw1划分到vlan3 将sw3划分到vlan3 在sw1上进行缺省 将sw1上&#xff08;g0/0/1&#xff09;的untagged改成 1 3 则在pc1上ping pc2可通 在sw1上进行缺省 在sw3上&#xff08;e0/0/1&#xff09;打标记 则在pc1上ping pc3可通&#xff08;实现互通&am…

python08-Python的数字类型之复数类型

复数是一个数学上的概念&#xff0c;这节不懂的可以绕过&#xff0c;实际场景很少用到 Python甚至可以支持复数&#xff0c;复数的虚部用j或者J来表示 如果需要对复数进行计算&#xff0c;可以导入Python的cmath模块&#xff08;c代表complex&#xff09;&#xff0c;如下面的…

DC电源模块的未来发展趋势

BOSHIDA DC电源模块的未来发展趋势 未来DC电源模块的发展趋势可以预测如下&#xff1a; 1. 高效能&#xff1a;随着绿色能源的需求增长&#xff0c;DC电源模块将更加注重高效能的设计&#xff0c;以减少能源消耗&#xff0c;并提高整体系统的能源利用率。 2. 高稳定性&#…

对 MODNet 网络结构直接剪枝的探索

文章目录 1 写在前面2 遇到问题3 解决方案4 探索过程4.1 方案一4.2 方案二4.3 方案三 5 疑惑与思考5.1 Q15.2 Q2 1 写在前面 在前面的文章中&#xff0c;笔者与小伙伴们分享了对 MODNet 主干网络部分以及其余分支分别剪枝的探索历程&#xff0c;即先分解、再处理、后融合的手法…