【LLM】快速了解Dify 0.6.10的核心功能:知识库检索、Agent创建和工作流编排(二)
文章目录
- 【LLM】快速了解Dify 0.6.10的核心功能:知识库检索、Agent创建和工作流编排(二)
- 一、创建一个简单的聊天助手:配置模型提供商并接入聊天助手
- 1、配置 TongYi 大模型
- 2、聊天助手接入TongYi 大模型
- 二、基于知识库搭建聊天助手:搭建知识库,并在聊天助手中进行知识检索
- 1、知识库创建的前期准备
- 1)配置Cohere的ReRank模型
- 2)启动定时任务用于处理要分段的文档
- 2、创建知识库:文档分段清洗
- 3、召回测试
- 4、在聊天助手中进行知识检索,并绑定知识点引用和归属
- 三、基于工具将聊天助手升级为Agent:外挂arxiv工具查询论文
- 四、工作流编排:编排流程节点,可视化创建聊天助手
在上一篇文档中【LLM】Dify 0.6.10 在Windows系统上本地化部署(一) 已经介绍了如何在Windows
上完成Dify
的本地部署,接下来启动本地项目,快速了解Dify
的核心功能,包括知识库检索、Agent
创建和工作流编排。
Dify 0.6.10
的具体功能介绍还是详见欢迎使用 Dify | 中文 | Dify,这里旨在本地部署的项目中尝试验证这些核心功能,并跑通整个流程。
一、创建一个简单的聊天助手:配置模型提供商并接入聊天助手
参考 模型 | 中文 | Dify
1、配置 TongYi 大模型
点击头像的"设置",配置模型提供商
这里配置通义千问的AppKey
,ApiKey
申请参考 阿里通义千问API(Java)使用教程,基于Springboot后端,配置好后:
Note:
在配置模型提供商时,调用的后端请求是
POST /console/api/workspaces/current/model-providers/tongyi HTTP/1.1
这里会用到redis缓存,需要修改下
.env
的配置(如果需要的话)# celery configuration ; CELERY_BROKER_URL=redis://:difyai123456@localhost:6379/1 CELERY_BROKER_URL=redis://:difyai123456@192.168.198.128:6379/1
2、聊天助手接入TongYi 大模型
新建一个智能聊天助手,线上的通义千问大模型就成功接入进来了
二、基于知识库搭建聊天助手:搭建知识库,并在聊天助手中进行知识检索
参考 知识库 | 中文 | Dify
1、知识库创建的前期准备
1)配置Cohere的ReRank模型
Cohere
官网如下https://cohere.com/,可以在这里获取试用的ApiKey
,并在Dify上配置模型提供商,配置效果如下:
2)启动定时任务用于处理要分段的文档
参考 Local Source Code Start | English | Dify
如果不执行如下命令,去启动定时任务处理文档分段清洗的任务,这个任务会一直显示在 “排队” 中的。在Windows中命令如下:
celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail --loglevel INFO
启动时不需要关闭Flask
后端服务,启动效果如下:
2、创建知识库:文档分段清洗
参考创建知识 上传文档 | 中文 | Dify
在选择数据源中导入本地文档后(支持的格式挺多的:TXT、 MARKDOWN、 PDF、 HTML、 XLSX、 XLS、 DOCX、 CSV),可以对文本进行分段清洗、右边为分段清洗后的预览结果
这里可以选择自动分段清洗 或者 自定义规则清洗
接着可以选择不同的索引方式 - 高质量 & 经济:
如果选择高质量可以用到embedding
采用Q & A
的模式进行分段,也可以使用ReRank
模型(比如上面配置的Cohere ReRank
模型)通过embedding
进行文本检索,而经济型就没有这个功能。
处理完成后(需要开启定时任务,不然创建知识库完成后,知识库分段清洗任务一直处于排队状态),可以在知识库中查看相应文档的分段内容,可以选择禁用/启用某个片段,这样可以减少Cohere Rerank的检索范围。
3、召回测试
关于召回测试/引用归属 的功能配置 参考 召回测试/引用归属 | 中文 | Dify
这里要选择向量检索(不知道为什么全文检索不出内容)
召回测试效果如下:
Note:这里的文档分段只开启了三个,其余都禁用(如果全启用,Cohere free ReRank
模型会报错)
4、在聊天助手中进行知识检索,并绑定知识点引用和归属
召回测试可以检索出相应的文本片段后,可以在智能体的提示词编排设置中,外挂相应的知识库,进行知识检索
这里要选择向量检索(不太清楚为什么上面的全文检索不能从知识库中检索到片段内容)
还可以在聊天增强功能中,新增关于“知识库的引用和归属”
三、基于工具将聊天助手升级为Agent:外挂arxiv工具查询论文
Dify
提供了很多Agent工具(强)
这里以arxiv
论文查询工具为例(提示词可以让文心一言/通义千问生成,然后粘贴过来)
其实Agent
实现的功能可以将其流程化,文本输出流程如下:
-
1)预处理为
arxiv
的查询参数; -
2)通过
arxiv search
返回响应结果; -
3)将
arxiv
工具的响应结果交给GPT整理输出;
其实并不是所有的文本输入都会触发“arxiv工具”的查询,需要关键词具有与“查询“相关语义才行
四、工作流编排:编排流程节点,可视化创建聊天助手
节点说明:节点说明 | 中文 | Dify
预览与调试:预览与调试 | 中文 | Dify
这里参考上面所搭建的聊天机器人,通过如下应用场景完成工作流的编排,搭建一个小的Agent应用:
假设用户输入一个文本
- 流程1:如果文本中包括
webhook
关键字,则先从知识库中进行检索,接着拼接用户输入的文本,交给LLM去整理输出; - 流程2:如果文本中包括
query
或者查询
关键字,则先通过参数提取器提取要查询的关键字,接着通过arxiv论文查询工具查询指定关键字的论文,接着讲用户的输入转写成arxiv的输出,并交给LLM去解析arxiv的响应结果; - 流程3:如果文本中不包括以上两种关键字,则直接调用LLM输出结果
用户问题1:第一个helloWorld起源于哪一年?(走流程3)
用户问题2:webhook是什么?webhook的作用是什么?(走流程1)
用户问题3:查询近几年LLMOps相关的论文?(走流程2)
在“探索“区测试自己通过工作流编排后的应用:
Note:
工作流编排技巧小结:主要是关注用户输入的文本数据走那个流程,在流程中的每个节点上是怎么被处理的,以及通过写
prompt
对智能体的行为配置进行管理
1)在开始节点定义变量用于接收用户输入的文本;
2)不同节点间通过变量来传递,下游节点可以接收所有上游节点的所有变量;
3)如果流程在Run时报错,可以单节点Debug查看文本转换是否符合预期要求,并修改LLM的提示词,或者增加其他功能节点。