Dify 工作流程概述

2024 / 7 / 5

Dify 工作流程概述

・工作流程 - Dify

目次

  1. 工作流程 1-1. 工作流程 1-2. 聊天流程 1-3. 工作流程

  2. 用户案例 2-1. 客户服务 2-2. 内容生成 2-3. 任务自动化 2-4. 数据分析和报告生成 2-4. 电子邮件自动化

1. 工作流程

1-1. 工作流程

“工作流程”通过将复杂任务分解为小的“节点”,减少对LLM应用程序模型推理的依赖,提高系统的可解释性、稳定性和容错性。

「工作流」的类型如下。

・Chatflow:用于需要多步逻辑来创建对话场景,如客户服务、语义搜索等。

・Workflow:用于自动化和批处理场景,如高质量翻译、数据分析、内容创建、电子邮件自动化等。

1-2. 聊天流程

处理自然语言输入中用户意图识别的复杂性,提供问题理解节点,如“问题分类”、“问题重写”、“子问题分割”。此外,LLM提供与外部环境交互的功能,即“在线搜索”、“数学计算”、“天气查询”、“图像生成”等工具调用功能。

1-3. 工作流程

提供丰富的逻辑节点,如“代码”、“IF/ELSE”、“合并”、“模板”,以解决自动化和批处理场景中复杂的业务逻辑。此外,还提供“触发器”功能。根据时间和事件轻松构建自动化流程。

2. 使用案例

2-1. 客户服务

通过将LLM集成到客户服务系统中,可以自动化常见问题解答,并减轻支持团队的工作负担。LLM能够理解客户查询的上下文和意图,并能够实时生成有用的准确回答。

2-2. 内容生成

即使需要撰写博客帖子、产品说明和营销资料,LLM也将支持生成高质量内容。只需提供“概述”或“主题”,LLM将利用广泛的知识库生成引人入胜、有益且结构化的内容。

2-3. 任务自动化

可与“Trello”、“Slack”、“Lark”等各种任务管理系统集成,实现项目和任务的自动化管理。通过使用自然语言处理,LLM能够理解和解释用户输入、创建任务、更新状态以及分配优先级,无需手动干预。

2-4. 数据分析和报告生成

可用于分析大规模数据集并生成报告和摘要。 通过向LLM提供相关信息,可以识别趋势、模式和洞察,并将原始数据转化为实用情报。这对于希望基于数据做出决策的企业尤为有价值。

2-4. 电子邮件自动化

LLM可用于电子邮件、社交媒体更新以及其他形式的通信草稿。通过提供简要概述和重要要点,LLM可以生成结构良好、一致且与上下文相关的消息。这样可以大大节省时间,并获得清晰且专业的回答。

3. 关键概念

3-1. 节点

“节点”是工作流的主要组件。通过连接具有不同功能的“节点”,可以执行工作流中的一系列操作。

“节点”的类别如下。

- 基本节点: “开始”、“结束”、“回答”、“LLM”、“知识获取”、“应用程序”(即将发布)。

・理解问题:问题分类器、问题重写(即将发布)、子问题分割(即将发布)

・逻辑 : IF/ELSE、合并(即将推出)、循环(即将推出)

・转换 : 代码、模板、变量分配、函数提取(即将公开) ・实用程序 : HTTP 请求 ・工具 : 内置工具、自定义工具

3-2. 変数

“变量”是将工作流程中的节点输入和输出链接起来的重要方式,有助于轻松实现跨整个流程的复杂处理逻辑。

・在工作流中,需要定义用于启动或开始对话的输入变量。

・节点需要用于启动的输入变量。例如,问题分类器的输入变量通常由用户的问题组成。

・在节点内引用的变量应仅限于来自先前处理节点的变量,以确保一致性并避免重复。

・为避免变量名重复,节点名称必须是唯一的。

・节点的输出变量是由系统固定的,不会被更改。

3-3. Chatflow 和 Workflow 的节点区别

・开始节点

・Chatflow:用户输入和文件上传使用系统构建变量

・Workflow:文件上传使用系统构建变量

・结束节点

・Chatflow : 结束节点不受支持

・Workflow : 在结束节点执行时输出结构化文本

・回答节点

・Chatflow:回答节点用于流式输出或固定文本回复,并可在流程中间使用 ・Workflow:回答节点不受支持

・LLM节点

・Chatflow : 内存将自动激活。保存和继承多轮对话历史记录 ・Workflow : 内存不受支持

・问题分类器节点

・Chatflow : 内存将自动激活。保存和继承多轮对话历史记录 ・Workflow : 内存不受支持

4. 节点

4-1. 起始节点

“起始节点”是用于输入启动工作流程变量的节点。每个工作流程都需要一个作为工作流程入口点的“起始节点”。

「开始节点」输入字段类型如下。

・短文本:名称、标识符等短文本 ・段落:描述、详细查询等长文本

・选择:从预定义选项列表中进行选择

・数字:用于计算、数量、标识符等的整数或小数值

通过执行工作流程,将要求输入在“起始节点”中定义的变量值。通过此步骤,确保工作流程中包含了推进指定流程所需的所有信息。

【技巧】 在 Chatflow 中,“起始节点”提供系统变量(sys.query 和 sys.files)。sys.query 用于用户在对话式应用程序中输入问题,使系统能够处理用户的查询并做出响应。sys.files 用于上传对话中的文件,例如用于理解内容的图像上传。这需要集成设计用于处理图像输入的图像理解模型或工具,以便工作流能够有效地解释和处理上传的文件。

4-2. 结束节点

定义 Workflow 的最终输出内容。每个 Workflow 都需要至少一个“结束节点”来输出执行后的最终结果。“结束”节点充当流程的终点,超过该节点后将无法添加更多节点。在 Workflow 中,只有当流程达到“结束节点”时才会输出执行结果。如果流程包含条件分支,则需要定义多个“结束节点”。

4-3. 回答节点

Chatflow 中定义响应内容。在文本编辑器中,您可以灵活地确定响应格式。这包括创建文本固定块,将来自前一步骤的输出变量用作响应内容,以及合并自定义文本和响应变量。

“回答节点”可随时无缝集成,动态地将内容交付给交互式响应。此设置支持实时编辑配置模式,可以同时放置文本和图像内容。

- 从LLM节点输出响应内容 ・生成的图像输出 ・纯文本输出

4-4. LLM节点

调用大型语言模型以进行问答或自然语言处理。在“LLM节点”中,您可以选择适当的模型、创建提示、设置提示引用的上下文、设置内存以及调整内存窗口大小。

- 选择模型 - 创建系统提示

为了选择适合任务的模型,请在“设置-模型提供商”中完成模型设置。

4-5. 知识获取节点

“知识获取节点”是设计用来从 Dify 知识库中查询与用户问题相关的文本内容,并可用作LLM后续回答的上下文。

“知识获取节点”的设置步骤如下。

(1) 选择查询变量

在知识库搜索场景中,通常,查询变量表示用户的输入问题。在对话型应用程序的“起始节点”中,系统预先将“sys.query”设置为用户输入变量。该变量可用于查询与用户问题最相关的文本段的知识库。

(2) 选择查询知识库

在“知识获取节点”中,您可以从 Dify 中添加现有的知识库。有关在 Dify 中创建知识库的步骤,请参阅知识库文档。

(3) 获取战略设置

可更改节点内各知识库的索引策略和获取模式。有关这些设置的详细说明,请参阅知识库文档。

“Dify”提供了两种调用策略,“N-choose-1 Recall”和“Multi-way Recall”,适用于各种知识库搜索场景。“N-choose-1 Recall”模式下,知识库查询通过函数调用执行,需要选择系统推理模型。“Multi-way Recall”模式下,需要设置重新排名模型以重新排列结果。有关这两种召回策略的详细信息,请参阅文档中的提取模式说明。

4-5. 问题分类器节点

“问题分类器节点”定义用户查询的分类条件,使LLM能够根据这些分类指示对话的进行。如典型的客户服务机器人场景所示,“问题分类器”作为知识库搜索的预备步骤,用于识别用户意图。通过在搜索之前对用户意图进行分类,知识库的召回效率大大提高。

“问题分类器节点”的设置步骤如下。

(1) 选择输入变量

在对话式客户场景中,可以将“起始节点”(sys.query) 的用户输入变量用作“问题分类器节点”的输入。在自动化和批处理场景中,可以使用客户反馈和电子邮件内容作为输入变量。

**(2) 推理模型设置 ** “问题分类器节点”依赖于LLM的自然语言处理功能来对文本进行分类。您需要配置分类器的推理模型。

(3) 创建分类方法

通过为每个分类创建相应的关键字和描述,可以手动添加多个分类。基于这些条件的描述,问答分类器可以根据用户输入的语义将对话路由到适当的流程路径。

4-6. IF/ELSE 节点

使用“IF/ELSE 节点”,您可以根据 if/else 条件将工作流程分成两个分支。在此节点中,您可以设置一个或多个 IF 条件。如果 IF 条件得到满足,工作流程将继续到“IS TRUE”分支下的下一步。如果 IF 条件不满足,工作流程将在“IS FALSE”分支下触发下一步。

4-7. 代码节点

「代码节点」支持在工作流中执行数据转换的「Python / NodeJS 代码执行」。可简化工作流,并适用于算术运算、JSON 转换、文本处理等场景。

通过此节点,开发人员的灵活性大大提高,可以在工作流中嵌入自定义 Python 或 Javascript 脚本,并且可以以无法通过预设节点实现的方式操作变量。 使用配置选项,可以指定所需的输入变量和输出变量,并编写相应的执行代码。

如果需要使用“代码节点”内其他节点的变量,则必须在输入变量中定义变量名称,并引用这些变量。

・本地部署

对于本地部署的用户,需要启动沙盒服务以防止恶意代码执行。此外,启动此服务需要 Docker。有关沙盒服务的详细信息,请查看此处。您也可以使用 docker-compose 直接启动服务。

docker-compose -f docker-compose.middleware.yaml up -d

・安全策略

执行环境已针对 Python 和 JavaScript 进行沙盒化。换句话说,无法使用需要大量系统资源或会引起安全风险的特定功能。这包括直接访问文件系统、网络调用、操作系统级命令等,但不限于此。

4-8. 模板节点

使用“模板节点”可利用 Python 强大的模板语法“Jinja2”,动态格式化前一个节点的变量,并将其组合成单个基于文本的输出。这在需要将来自多个来源的数据与后续节点所需的特定结构相结合时非常有用。

4-9. 变量分配节点

“变量分配节点”充当工作流中收集分支输出的中心枢纽,使得无论选择哪个分支,都可以通过单一变量引用输出。随后,输出可以在下游节点中进行操作。

「变量分配节点」支持多种类型的输出变量,如字符串、数字、对象、数组等。指定输出类型后,可以从变量的下拉列表中将输入变量添加到节点中。变量列表是从先前的分支输出中推导出来的,并根据指定的类型自动过滤。

4-10. HTTP 请求节点

使用“HTTP 请求节点”可以创建 HTTP 请求并将其分派到指定的端点,从而实现与“外部服务”的广泛集成和数据交换。该节点支持所有常见的 HTTP 请求,可以完全自定义请求的 URL、标头、查询参数、正文和身份验证。

HTTP 请求的一个非常方便的功能是能够在各种字段中插入变量以动态构建请求。例如,在客户支持场景中,可以使用用户名和客户 ID 等变量来个性化通过 POST 请求发送的自动回复,或者获取与客户相关的个人特定信息。HTTP 请求使用主体、状态码、标头和文件作为输出。

如果响应中包含 MIME 类型的文件(目前仅限于图像),节点将自动将其保存为用于在下游使用的文件。

4-11. 工具节点

在工作流程中,“Dify”提供“嵌入式工具”和“自定义工具”。在使用这些工具之前,需要进行“认证”。

“工具节点”的设置步骤如下。

(1) 工具的认证/自定义工具的创建 (2) 工具输入和参数设置

“内置工具列表”如下。

・Google ・谷歌搜索

・必应 ・必应网络搜索

・DuckDuckGo ・DuckDuckGo 搜索

・SearXNG ・SearXNG 搜索

・DALL-E ・DALL-E 2 ・DALL-E 3

・Azure DALL-E ・Azure DALL-E 3

・稳定性 ・Stablediffusion

・维基百科 ・WikipediaSearch

・雅虎财经 ・分析 ・新闻 ・股票代码

・ArXiv ・Arxiv 搜索

・PubMed ・PubMed 搜索

・稳定扩散 ・稳定扩散 WebUI

・WebScraper ・网络爬虫

・JinaReader ・JinaReader

・AIPPT ・AIPPT

・YouTube ・视频统计

・代码解释器 ・代码解释器

・WolframAlpha ・WolframAlpha

・数学

・评估数学表达式

・Github ・搜索存储库

・ChartGenerator ・柱状图 ・线性图表 ・饼图

・当前时间 ・当前时间 ・工作日计算器

・矢量化.AI ・矢量化.AI

・高德地图 ・天气预报

・Wecom ・发送群组消息

・二维码 ・生成二维码

・钉钉 ・发送群组消息

・飞书 ・发送群组消息

・勇敢浏览器 ・BraveSearch

・DevDocs ・搜索开发者文档

・Firecrawl ・爬取

・Judge0 CE

・提交代码执行任务至 Judge0 CE 并获取执行结果。

・Open weather query ・打开天气查询

・Spark ・Spark 图像生成

・Stack Exchange

・获取 Stack Exchange 答案

・搜索 Stack Exchange 问题

・Tavily ・TavilySearch

・Trello ・创建看板 ・在看板上创建列表

・在看板上创建新卡片 ・删除看板 ・按 ID 删除卡片 ・获取所有看板 ・获取看板操作 ・按 ID 获取看板 ・获取看板卡片

・获取筛选后的看板卡片 ・从看板获取列表 ・按 ID 更新面板 ・按 ID 更新卡片

・Twillo ・发送消息

有关“自定义工具”的创建和设置,请参阅工具设置步骤。