Dify学习使用

Dify 是一个开源的 LLM 应用开发平台。

其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,可以快速从原型到生产。

Dify——「大模型应用」开发平台

大模型(LLM)

+

工作流

(Workflow)

+

工具

(Tools)

+

知识库

(Knowledge)

=

智能体应用

(Agent)

LLM是基座 Workflow是流程 工具是能力 知识库是数据 Agent是应用

API+DSL,标准化对接

1.1 Dify 中提供了四种应用类型

  • 聊天助手:基于 LLM 构建对话式交互的助手

  • 文本生成:构建面向文本生成类任务的助手,例如撰写故事、文本分类、翻译等

  • Agent:能够分解任务、推理思考、调用工具的对话式智能助手

  • 工作流:基于流程编排的方式定义更加灵活的 LLM 工作流

  1. RAG:学习新知识 & 保留记忆

RAG即检索增强生成(Retrieval-Augmented Generation),是一种结合了信息检索和文本生成的技术。RAG技术的核心思想是在生成答案之前,先从一个知识库或数据源中检索相关信息,然后将这些信息作为上下文,辅助语言模型生成更加准确和详细的回答。

  1. 基础技术:什么是RAG?

RAG通常包括以下三个步骤:

  1. 检索(Retrieve):根据用户的查询,从预先构建的知识库中检索出相关的文档或信息片段。

  2. 增强(Augment):将检索到的信息与用户的原始查询结合起来,形成一个新的增强查询。

  3. 生成(Generate):使用大型语言模型,基于增强查询生成答案。

  1. RAG解决了什么问题?

引入RAG技术的主要原因是为了解决大型语言模型(LLM)在特定领域知识更新、专业性问题以及生成内容时效性方面的局限性。以下是引入RAG技术的几个关键原因:

暂时无法在飞书文档外展示此内容

  1. 减少模型幻觉:大型语言模型(LLM)在生成文本时可能会产生与训练数据不符或无意义的内容,这种现象被称为“模型幻觉”。RAG通过引入外部信息源,帮助模型生成更准确和有意义的回答。

  2. 提升专业性:LLM在通用领域训练时可能缺乏特定领域的专业知识。RAG技术通过检索特定领域的最新信息,提高了模型在该领域的专业性。

  3. 增强时效性:LLM的知识库通常只包含训练数据中已有的信息,对于新出现的知识可能无法准确反映。RAG允许模型访问最新的数据,从而生成时效性更强的内容。

  4. 支持复杂查询:RAG技术可以处理更复杂的查询,特别是那些需要引用多个来源或文档才能准确回答的查询。

  1. RAG的工程方案

现在大量的大模型应用都是基于RAG技术,因此针对不同场景的各种RAG优化方案非常多。

  1. 创建知识库

3.1 创建知识库的步骤:

在 Dify 主导航栏中点击知识库,在该页面你可以看到团队内的知识库,点击“创建知识库” 进入创建向导。

  1. 在Dify团队内创建知识库,从本地选择你需要上传的文档;

  2. 选择分段与清洗模式,预览效果;

  3. 配置索引方式和检索设置;

  4. 等待分段嵌入;

  5. 完成上传,在应用内关联并使用 🎉

  • 分段

大语言模型存在有限的上下文窗口,无法将知识库中的所有内容发送至 LLM。因此可以将整段长文本分段处理,再基于用户问题,召回与关联度最高的段落内容,即采用分段 TopK 召回模式。此外,将用户问题与文本分段进行语义匹配时,合适的分段大小有助于找到知识库内关联性最高的文本内容,减少信息噪音。

  • 清洗

为了保证文本召回的效果,通常需要在将数据录入知识库之前便对其进行清理。例如,如果文本内容中存在无意义的字符或者空行,可能会影响问题回复的质量。

上传文档存在以下限制:

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

3.2 选择分段与清洗策略

将内容上传至知识库后,需要先对内容进行分段与数据清洗,该阶段可以被理解为是对内容预处理与结构化。

  1. 案例演示

1.构建优化测试用例的工作流
  1. 创建工作流

  1. 单击右键添加节点,工作流包括start-->LLM-->条件分支-->1.结束(满足条件)2.LLM询问-->结束

  2. 各个节点的配置

(1)开始节点

(3)条件分支

(2)LLM

上一个节点的输出添加进入上下文后,可以选择上下文当作本节点的输入,也可以/选择参数当作本次节点的输入。

(4)结束

  1. 运行

输入:编写“Messenger应用中气泡通知动画验证”的测试用例

实际运行的流程为下面的分支

运行结果

输出结果满足提示词要求,并且满足条件分支判断要求和手机性能测试相关。

  1. 输出api接口 

curl -X POST 'https://mify-be.pt.xiaomi.com/api/v1/workflows/run' \ --header 'Authorization: Bearer {api_key}' \ --header 'Content-Type: application/json' \ --data-raw '{ "inputs": {}, "response_mode": "streaming", "user": "abc-123" }'

其中api_key 是工作流中api密钥,inputs是以key/value的形式来输入参数,本案例

"inputs" : {"prompt": "Messenger用户中气泡通知图限证"}

2、构建艺术家小黛agent

我们定义一个agent小黛来帮助进行画画创作和图片分析。

  1. 编排提示词

在撰写prompt的过程中,我们使用了几个prompt engineering中常用的方法:

     a.使用分割符清楚地指示输入的不同部分

在书写过程中,使用三引号XML标签来区分instruction、example部分,可以让模型更好地理解不同部分内容。

     b.指定任务完成所需的步骤&约束输出

我们在instructions中将任务拆解成几个步骤,让模型更容易理解。

     c.提供例子

也就是所谓的少样本提示(few-shot prompt),给大模型提供例子,让它按照例子输出,也进一步约束了输出格式。

```xml <instruction> <instructions> 1. 你将接收到用户的问题,这些问题可能涉及图片提问或请求生成图片。 2. 首先,分析用户的问题内容,判断其属于哪一类: - 如果用户的问题包含对图片或画作的询问,归类为“图片提问”。 - 如果用户请求生成一张图片,归类为“图片生成”。 3. 根据判断结果,进行不同工作。 -如果问题为“图片提问”,请根据用户提问进行回答。如果用户提问涉及著名画作,请按照指定的格式输出,包括作品名、画家、作品简介和对用户问题的解答。 -如果问题为“图片提问”,请根据用户提问进行回答。如果用户提问涉及著名画作,请按照指定的格式输出,包括作品名、画家、作品简介和对用户问题的解答。 -如果问题为“图片生成”,请根据用户输入的要求利用dalle3工具进行图片生成。 </instructions> <examples> 用户:请问这张图的颜色是什么? 回答:这张图上有蓝、白、黄三种颜色,主要是蓝色为主。 </example> <example> 用户:请问《星夜》这幅画的颜色有哪些? 回答: { "name":"星夜", "painter":"文森特·梵高", "intro":"《星夜》是梵高于1889年创作的一幅油画,描绘了夜空中的星星和月亮,展现了他对自然的深刻感受。", "answer":"这幅画的主要色调是深蓝色和黄色,星星和月亮的光辉在夜空中显得格外耀眼。" } </example> </instruction> ```

  1. 添加必要工具

添加Dall-E 3 画图工具,实现图片生成。

开启模型的视觉功能

开启视觉视觉功能后可支持图片输入,可通过【设置】来规定图片分辨率、上传方式和上传数量限制。

可根据具体情境编辑对话开场白,增加互动效果~

    • 开启对话​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值