Dify 实战教程
Dify 实战教程
本文整理自 Dify 官方文档,涵盖 实战教程 章节的全部内容。
本章内容
- 使用文件上传搭建文章理解助手
- 如何搭建 AI 图片生成应用
- 使用知识库搭建智能客服机器人
- 简单聊天机器人
- ChatFlow 实战:搭建 Twitter 账号分析助手
- 第 1 课:什么是工作流
- 第 2 课:流程的头和尾(开始与输出节点)
- 第 3 课:工作流的大脑(LLM 节点)
- 第 4 课:小抄(知识检索)
- 第 5 课:工作流的岔路口(分类与执行)
- 第 6 课:处理多个任务(参数提取 & 迭代)
- 第 7 课:增强工作流(插件)
- 第 8 课:Agent 节点
- 第 9 课:排版设计师(模板)
- 第 10 课:发布和监控你的 AI 应用
使用文件上传搭建文章理解助手
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
在 Dify ,你可以使用知识库工具让 Agent 从大量的文本内容中获取准确的信息。然而,很多情况下需要理解的本地文件并不是很大,不至于用上知识库。这种情况下可以使用文件上传功能直接把本地文件作为上下文给 LLM 理解。
本次实验中,我们将以文章理解助手为案例。这个文章理解助手将会根据上传的文档进行提问,协助用户带着问题去阅读论文等材料。
本实验中你将掌握的知识点
- 文件上传功能
- Chatflow 的基本操作
- 提示词撰写
- 迭代的使用
- 文档解析器和列表操作节点
前提条件在 Dify 中创建一个 Chatflow。请确保你已添加模型供应商并有足够额度。
添加节点在本次实验中至少需要涉及四种节点:开始节点、文档提取器节点、LLM 节点、回复节点。
开始节点在开始节点需要添加文件变量。在 0.10.0 版本的 Dify 中支持了文件上传功能,你可以将文件作为变量加入。
在开始节点需要增加一个文件变量,在支持的文件类型中,需要勾选文档。
一些读者可能会注意到在系统变量中有sys.files,这个变量是用户在对话框中上传的文件或者文件列表。
和自己创建文件变量的区别在于,这个功能需要在功能中打开文件上传并且设置上传文件类型,并且在对话中每次上传新的文件都会将这个变量覆写。
请需要根据业务场景选取合适的文件上传方式。
文档提取器 **LLM 是无法直接读取文件的。** 这是很多用户在第一次使用文件上传功能的一个误区,会认为直接把文件作为变量在 LLM 节点应用就可以了,实际上 LLM 读到的内容为空。
所以,Dify 引入了文档提取器,这个节点可以从文件变量中提取文本,输出文本格式的变量。
将开始节点的文件变量作为输入变量,文档提取器会将文档格式的文件转为文本变量输出。
LLM 本次实验中需要设计两个 LLM 节点,分别是结构提取和问题抛出。
结构提取结构提取节点能够从原文内容中提取文章结构,总结关键内容。
提示词内容如下:
`阅读以下文章内容并执行任务{{文档提取器结果的变量}}# 任务
- ** 主要目标 **:全面解析文章的结构。- ** 目标 **:详细说明文章每个部分的内容。- ** 要求 **:尽可能详细地分析。- ** 限制 **:无特别的格式限制,但需要保持解析的条理性和逻辑性。- ** 预期输出 **:文章结构的详细解析,包括每个部分的主要内容和作用。
# 推理顺序
- ** 推理部分 **:通过仔细阅读文章,识别和解析其结构。- ** 结论部分 **:提供每个部分的具体内容和作用。
# 输出格式
- ** 解析格式 **:每个部分应以标题形式列出,后跟对该部分内容的详细说明。- ** 结构形式 **:Markdown,以增强可读性。- ** 具体说明 **:每个部分的内容和作用,包括但不限于引言、正文、结论、引用等。
# 示例输出
## 示例文章解析
### 引言- ** 内容 **:介绍研究的背景、目的和重要性。- ** 作用 **:吸引读者的注意力,为文章内容提供上下文。
### 方法- ** 内容 **:描述研究的具体方法和步骤,包括实验设计、数据收集和分析技术。- ** 作用 **:使读者了解研究的科学性和可重复性。
### 结果- ** 内容 **:展示研究的主要发现和数据。- ** 作用 **:提供研究结论的证据基础。
### 讨论- ** 内容 **:解释结果的意义,对比其他研究,提出可能的改进方向。- ** 作用 **:帮助读者理解结果的广泛影响和未来研究的潜力。
### 结论- ** 内容 **:总结研究的主要发现和贡献。- ** 作用 **:强化文章的核心信息,提供明确的结论。
### 引用- ** 内容 **:列出文章中引用的所有文献。- ** 作用 **:提供进一步阅读的资源,确保学术诚信。
# 备注
- ** 边缘情况 **:如果文章结构不典型(例如,缺少某些部分或有额外的部分),应在解析中明确指出这些特殊情况。- ** 重要考虑事项 **:解析时应关注文章的逻辑性和连贯性,确保每个部分的内容与文章的整体目标一致。`问题抛出问题抛出节点能够从结构提取节点总结的内容中总结文章的问题,协助读者在阅读的过程中带着问题去思考。
提示词如下:
`阅读以下文章内容并执行任务{{结构提取的输出}}# 任务
- ** 主要目标 **:全面阅读上文,针对文章各个部分提出尽可能多的问题。- ** 要求 **:问题要有意义和价值,值得思考。- ** 限制 **:无特定限制。- ** 预期输出 **:一系列针对文章各个部分的问题,每个问题都应有深度和思考价值。
# 推理顺序
- ** 推理部分 **:全面阅读文章,分析文章各个部分的内容,思考每个部分可能引发的深层次问题。- ** 结论部分 **:提出有意义和有价值的问题,确保问题能够引发深入的思考。
# 输出格式
- ** 格式 **:每个问题单独成行,编号列出。- ** 内容 **:针对文章的各个部分(如引言、背景、方法、结果、讨论、结论等)提出问题。- ** 数量 **:尽可能多,但每个问题都应有意义和价值。
# 备注
- ** 边缘情况 **:如果文章的某些部分内容较少,可以适当调整问题的数量和深度,但每个问题都应有思考价值。- ** 重要考虑事项 **:确保问题能够引导读者深入理解文章内容,而不仅仅是表面的疑问。`思考题 1 : 处理多个上传文件为了处理多个上传文件,需要用到迭代节点。
迭代节点类似于许多编程语言中的 while,区别在于 Dify 中没有条件限制,且输入变量只能是array类型(列表)。原因是 Dify 会将列表中的全部内容都执行完为止。
因此,你需要把开始节点中的文件变量调整为array类型,也就是文件列表。
在开始节点之后需要加入迭代节点,并且设置输入变量和输出变量。在迭代节点内部,设置每次循环执行的内容,这部分和前文内容完全一致。
思考题 2 : 针对思考题 1,只处理文件列表的特定文件在思考题 1 中,有的读者可能会注意到 Dify 会把所有文件处理完才会结束循环,而有些情况下只要操作其中一部分的文件而非全部。对于这个问题,可以对文件列表进行处理,在 Dify 中对列表进行操作的节点叫做列表操作。列表操作可以对所有array类型的变量进行操作,不光是文件列表。
例如,限定只对文档类型的文件进行分析,并且把要处理的文件顺序按文件名称排序。
在迭代节点前加入列表操作,调整过滤条件、排序,然后将迭代节点的输入改为列表操作节点的输出。
如何搭建 AI 图片生成应用
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
随着图像生成技术的兴起,涌现了许多优秀的图像生成产品,比如 Dall-e、Flux、Stable Diffusion 等。
本文将使用图像生成模型,指导你使用 Dify 快速开发一个 AI 图片生成应用。
本实验中你将掌握的知识点
- 使用 Dify 构建 Agent 的方法
- Agent 的基本概念
- 提示词工程的基础知识
- 工具的使用
- 大模型的幻觉的概念
1. 获取和填入 Stablility API 密钥点击这里即可跳转至 Stability 的 API 密钥管理页。
如果你尚未注册,会被要求先注册再进入管理页。
进入管理页后,点击复制密钥即可。
接下来,你需要通过以下步骤把密钥填入Dify - 工具 - Stability中:
登录 Dify
进入工具
选择 Stability
点击授权
填入密钥并保存
2. 配置模型供应商为了优化交互,我们需要 LLM 来将用户的指令具体化,也就是让 LLM 来撰写生成图片的提示词(Prompt)。接下来,我们按照如下的步骤在 Dify 配置模型供应商。
Free 版本的 Dify 提供了免费 200 条 OpenAI 的消息额度
如果消息额度不够用,你可以参考下图步骤,自定义其它模型供应商:
点击右上角头像 - 设置 - 模型供应商
如果尚未找到合适的模型供应商,groq 平台提供了 Llama 等 LLM 的免费调用额度。
点击Create API Key,设置一个想要的名称并且复制 API Key。
回到Dify - 模型供应商,选择groqcloud,点击设置。
粘贴 API Key 并保存。
3. 构建 Agent 回到Dify - 工作室,选择创建空白应用。
在本实验中,我们只需要了解 Agent 的基础用法即可。
💡 什么是 AgentAgent 是一种模拟人类行为和能力的 AI 系统,它通过自然语言处理与环境交互,能够理解输入信息并生成相应的输出。Agent 还具有 “感知” 能力,可以处理和分析各种形式的数据。此外,Agent 能够调用和使用各种外部工具和 API 来完成任务,扩展其功能范围。这种设计使 Agent 能够更灵活地应对复杂情况,在一定程度上模拟人类的思考和行为模式。 因此,很多人都会将 Agent 称为“智能体”。
选择Agent,填写名称即可。
接下来你会进入到如下图的 Agent 编排界面
我们选择 LLM,本篇教程中我们使用 groq 提供的 Llama-3.1-70B 为例:
在工具中添加 AI 绘图工具 Stability:
撰写提示词提示词(Prompt)是 Agent 的灵魂,直接影响到输出的效果。通常来说越具体的提示词输出的效果越好,但是过冗长的提示词也会导致一些负面效果。
调整提示词的工程,我们称之为提示词工程(Prompt Engineering)
在本次实验中,你不必担心没有掌握提示词工程,我们会在后面循序渐进地学习它。
让我们从最简单的提示词开始:
`根据用户的提示,使用工具 stability_text2image 绘画指定内容`用户每次输入命令的时候,Agent 都会知晓这样的系统级的指令,从而了解要执行用户绘画的任务的时候需要调用一个叫 stability 的工具。
例如:画一个女孩,手中拿着一本打开的书
不想撰写提示词?当然可以!点击提示词的右上角生成。
在指令中输入你的需求,点击生成,右侧生成的提示词中会出现由 AI 生成的提示词。
不过,为了养成对提示词良好的理解,我们在初期最好不要依赖这一项功能。
发布点击右上角的发布按钮,发布后选择运行就可以获得一个在线运行的 Agent 的网页。
复制这个网页的 URL,可以分享给其他好友使用。
思考题 1:如何指定生成图片的画风?我们可以在用户输入的命令中加上画风的指令,例如:二次元风格,画一个女孩,手中拿着一本打开的书
但是如果我们希望风格默认都是二次元风格呢,那么我们加在系统提示词里就行了,因为我们之前了解到系统提示词是每次执行用户命令都会知晓的,优先级更高。
`根据用户的提示,使用工具 stability_text2image 绘画指定内容,画面是二次元风格`思考题 2: 如何拒绝部分用户的某些请求?在许多业务场景中,我们需要避免输出一些不合理的内容,但是 LLM 很多时候比较 “傻”,用户下指令时会照做不误,即使输出的内容是错的,这种模型为了努力回答用户而编造虚假内容的现象称为模型幻觉(Hallucinations),那么我们需要让模型必要的时候拒绝用户的请求。
此外,用户也可能提一些和业务无关的内容,我们也需要让 Agent 这个时候拒绝请求。
我们可以使用 markdown 格式给不同的提示词进行划分,将上述教 Agent 拒绝不合理内容的提示词写到 “约束” 标题下。当然,这样的格式仅仅是为了规范化,你可以有自己的格式。
`## 任务根据用户的提示,使用工具 stability_text2image 绘画指定内容,画面是二次元风格。
## 约束如果用户在请求和绘画无关的内容,回复:“对不起,我不明白你在说什么”`例如,我们尝试提问:今晚吃什么
在一些更正式的业务场景中,我们可以调用敏感词库来拒绝用户的请求。
在添加功能 - 内容审查中添加关键词 “晚饭”,当用户输入关键词时,则 Agent 应用输出 “对不起,我不明白你在说什么”。
使用知识库搭建智能客服机器人
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
上一个实验中,我们学习了文件上传的基本用法。然而,当我们需要读取的文本超出 LLM 的上下文窗口时,就需要用到知识库了。
什么是上下文?
上下文窗口是指 LLM 在处理文本时能够“看到”和“记住”的文字范围。它决定了模型在生成回答或继续文本时,能够参考多少之前的文字信息。窗口越大,模型能利用的上下文信息越多,生成的内容通常更准确和连贯。
在之前,我们了解到 LLM 的幻觉的概念,很多情况下 LLM 知识库可以让 Agent 从中定位到准确的信息,从而准确地回答问题。在一些特定领域,比如客服、检索工具等有应用。
传统的客服机器人往往是基于关键词检索的,当用户输入了关键词以外的问题,机器人就无法解决。知识库正是为了解决这样一个问题,能够做到语义级别上的检索,降低人工的负担。
在实验开始之前,请记住知识库的核心是检索而非 LLM,是 LLM 增强了输出的过程,但真正的需求仍然是生成答案。
本实验中你将掌握的知识点
- Chatflow 的基础使用
- 知识库、外部知识库的使用
- embedding 的概念
前提条件
创建应用在 Dify 中选择创建空白应用 - 工作流编排。
添加模型供应商本次实验中需要涉及使用 embedding 模型,目前支持 embedding 的模型提供商中有 OpenAI、Cohere 等,在 Dify 的模型供应商中有标注TEXT EMBEDDING,请确保至少添加了一个并且有充足余额。
什么是 embedding?
” Embedding “是一种将离散型变量(如单词、句子或者整个文档)转化为连续的向量表示的技术。
直白地说,在我们将自然语言处理为数据时会将文本转为向量,这个过程被称作 embedding。语义相似的文本的向量会位置相近,语义相反的文本的向量位置相反。LLM 使用这样的数据做训练,预测出后续的向量,从而生成文本。
创建知识库登录 Dify -> 知识库 -> 选择数据源
Dify 支持三种数据源:上传文本文件、Notion、网页。
其中,本地文本文件需要注意文件类型的限制以及文件大小的限制;同步 Notion 内容需要绑定 Notion 账号;同步 Web 站点需要使用 Jina 或者 Firecrawl 的 API。
下面将先以本地文件为例。
分段设置上传文档后,会进入以下页面:
可以看到右侧有分段预览。当前默认选择的是自动分段与清洗,Dify 会根据文本内容的不同自动将文章切分为许多个段落。你也可以在自定义中设置其他的切分规则。
索引方式通常情况下选择高质量,但是需要额外消耗 token。选择经济无需消耗 token。
在社区版 Dify 里有采用 Q&A 分段模式,选择对应的语言可以将文本内容整理为问答格式,需要额外消耗 token。
Embedding 模型请在使用前查阅模型供应商的使用文档、模型定价等信息。
不同的 embedding 模型适用场景不同。例如 Cohere 的embed-english适用于英语文档,embed-multilingual适用于多语言文档。
检索设置 Dify 提供了向量检索、全文检索、混合检索三种检索功能,其中常用的检索是混合检索。
混合检索中可以设置权重或者使用重新排序(Rerank)模型。使用权重设置时,可以设置检索更侧重语义还是关键词,例如下图中语义占 70% 的权重,关键词占 30% 的权重。
点击保存并处理将会处理文档,完成处理后文档就可以在应用中使用了。
同步自 Web 站点很多情况下,我们需要根据帮助文档构建智能客服,以 Dify 为例,我们可以将Dify 的帮助文档转为知识库。
目前 Dify 支持最多 50 个页面的处理,请注意限制数量的设置。如果超出,可以再创建新的知识库。
调整知识库内容在知识库处理完所有文档后,最好前往知识库确认分段的连贯性。如果不连贯将会影响检索的效果,需要手动调整。
点击文档内容,对分段内容进行浏览,如果有无关的内容可以禁用或删除。
如果有内容被分段到了另外一个段落,也需要调整回来。
召回测试在知识库的文档页,左侧边栏中点击召回测试,可以输入关键词来测试检索结果的准确性。
添加节点进入创建好的 APP ,下面开始构建智能客服机器人。
问题分类节点你需要使用问题分类节点将用户的不同需求分离开。有的情况下用户甚至会聊无关的话题,对此也需要设置一个分类。
为了让分类更准确,你需要选择更优秀的 LLM,分类需要写的足够具体、区分度足够大。
以下是一个参考分类:
- 用户询问无关问题
- 用户询问和 Dify 相关问题
- 用户请求对技术名词的解释
- 用户询问社群加入方式
直接回复节点问题分类中,“用户询问无关问题” 和 “用户询问社群加入方式” 这两个问题是不需要经过 LLM 的处理就能回复的。因此你可以直接在这两个问题后面连接直接回复节点。
“用户询问无关问题”:
可以将用户引导到帮助文档,让用户先尝试自己解决,例如:
`很抱歉,我不能回答你的问题。如果你需要更多帮助,请查看[帮助文档](https://docs.dify.ai)。`Dify 支持 Markdown 格式的文本的输出。你可以在输出中用 Markdown 来丰富文本的格式。甚至可以用 Markdown 格式在文中插入图片,效果如下:
知识检索节点在 “用户询问和 Dify 相关问题”后增加知识检索节点,勾选需要使用的知识库。
LLM 节点在知识检索节点的下一个节点,你需要选择 LLM 节点来整理知识库召回的内容。
LLM 需要根据用户的提问,调整回复,使得回复内容更加得体。
上下文:需要将知识检索节点的输出作为 LLM 节点的上下文。
你可以在提示词书写区域输入/或者{来引用变量。在变量中,sys.开头的变量是系统变量,请查询帮助文档相关说明。
此外,你可以打开 LLM 记忆让用户的对话体验更加连贯。
思考题 1: 如何连接外部知识库在知识库功能中,你可以通过外部知识库 API 来连接外部知识库,例如 AWS Bedrock 知识库。
思考题 2: 如何通过 API 管理知识库无论是社区版还是 SaaS 版 Dify,你都可以通过知识库 API 增加、删除、查询状态等。
在搭载知识库的实例中,进入知识库 -> API,并且创建 API 密钥。请妥善保管 API 密钥。
思考题 3: 如何将客服机器人嵌入网页应用发布后,选择嵌入网页,选择一种合适的嵌入形式,将代码粘贴到网页的合适位置即可。
简单聊天机器人
原文:简单聊天机器人
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
Dify 的真正价值在于,无论想法多么复杂,你都可以轻松构建、部署和扩展。它专为快速原型设计、流畅迭代和任何规模的可靠部署而打造。
让我们先学习将 LLM 可靠地集成到你的应用中。在本指南中,你将构建一个简单的聊天机器人,它能对用户的问题进行分类、使用 LLM 直接回应,并通过特定国家的趣事来增强回应。
步骤 1:创建新工作流(2 分钟)
- 前往工作室>工作流>从空白创建>编排>新建对话流>创建
步骤 2:添加工作流节点(6 分钟)
💡 当你想引用任何变量时,先输入
{或/,就能看到工作流中可用的不同变量。
1. LLM 节点和输出:理解并回答问题
💡
LLM节点向语言模型发送提示词,根据用户输入生成响应。它抽象了 API 调用、速率限制和基础设施的复杂性,让你可以专注于设计逻辑。
1 创建 LLM 节点
使用添加节点按钮创建一个 LLM 节点,并将其连接到起始节点
2 配置模型
选择一个默认模型
3 设置系统提示词
将以下内容粘贴到系统提示词字段:
`用户将询问关于某个国家的问题。问题是 {{sys.query}}任务:1. 识别提到的国家。2. 清晰地重新表述问题。3. 使用常识知识回答问题。
以以下 JSON 格式响应:{"country": "< 国家名称 >","question": "< 重新表述的问题 >","answer": "< 对问题的直接回答 >"}`4 启用结构化输出
启用结构化输出让你可以轻松控制 LLM 返回的内容,确保输出一致且机器可读,用于下游的精确数据提取或条件逻辑。
- 将输出变量结构化切换为开启 >
配置并点击从 JSON 导入 - 粘贴:
`{"country":"string","question":"string","answer":"string"}`2. 代码块:获取趣事
💡
代码节点使用代码执行自定义逻辑。它让你可以在需要的确切位置注入代码——在可视化工作流中——让你无需搭建整个后端。
1 创建代码节点
使用添加节点按钮创建一个代码节点,并连接到 LLM 块
2 配置输入变量
将一个输入变量名称改为 “country”,并将变量设置为structured_output>country
3 添加 Python 代码
将此代码粘贴到PYTHON3:
`defmain(country:str) ->dict:country_name=country.lower()fun_facts={"japan":"日本有超过 500 万台自动售货机。","france":"法国是世界上访问量最大的国家。","italy":"意大利拥有的联合国教科文组织世界遗产地比任何其他国家都多。"}fun_fact=fun_facts.get(country_name,f"没有关于{country.title()}的趣事。")return{"fun_fact": fun_fact}`4 重命名输出变量
将输出变量result改为fun_fact以获得更好标记的变量
3. 答案节点:给用户的最终答案
💡
答案节点创建一个简洁的最终输出返回给用户。
1 创建答案节点
使用添加节点按钮创建一个答案节点
2 配置答案字段
粘贴到答案字段:
`问:{{ structured_output.question }}
答:{{ structured_output.answer }}
趣事:{{ fun_fact }}`工作流结束:
步骤 3:测试机器人(3 分钟)点击预览,然后询问:
- “法国的首都是什么?”
- “给我介绍一下日本料理”
- “描述一下意大利的文化”
- 任何其他问题确保你的机器人按预期工作!
你已完成机器人!本指南展示了如何可靠且可扩展地集成语言模型,而无需重新发明基础设施。通过 Dify 的可视化工作流和模块化节点,你不仅构建得更快,还为 LLM 驱动的应用采用了干净、生产就绪的架构。
ChatFlow 实战:搭建 Twitter 账号分析助手
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
简介 Dify 内置了一些网络爬虫工具例如 Jina ,它可以将网页转换为 LLM 可以读取的 markdown 格式。
然而,X(以前叫 Twitter)自 2023 年 2 月 2 日起停止提供免费 API 访问,并且升级了其反爬虫措施。像 Jina 这样的工具无法直接访问 X 的内容。
Starting February 9, we will no longer support free access to the Twitter API, both v2 and v1.1. A paid basic tier will be available instead 🧵
— Developers (@XDevelopers)February 2, 2023
好在 Dify 有 HTTP 工具,我们可以通过发送 HTTP 请求来调用外部爬虫工具。下面让我们开始吧!
本实验中你将掌握的知识点
- ChatFlow 的基础知识
- 如何在 Dify 中避免明文密钥
- HTTP 工具的使用
前提条件
注册 CrawlbaseCrawlbase 是一个为企业和开发者设计的全方位数据爬取和抓取平台,Crawlbase Scraper 可以从 X、Facebook 和 Instagram 等社交平台抓取数据。
点击注册:crawlbase.com
Dify 平台Dify是一个开源的 LLM 应用开发平台。你可以选择云服务(开箱即用)或参考docker compose 本地自建 Dify 平台。我们需要使用 LLM 处理由 Crawlbase 抓取的社交平台数据。
Free 版本的 Dify 提供了免费 200 条 OpenAI 的消息额度,如果消息额度不够用,你可以参考下图步骤,自定义其它模型供应商。
点击右上角头像 - 设置 - 模型供应商
创建 ChatFlow 应用现在,让我们开始创建 ChatFlow。点击创建空白应用 - 工作流编排:
初始化的 Chatflow 应用如下:
添加节点
开始节点在开始节点中,我们可以在聊天开始时添加一些系统变量。在本文中,我们需要一个 Twitter 用户的 ID 作为字符串变量。让我们将其命名为id。
点击开始节点并添加一个新变量:
代码节点根据Crawlbase 文档所述,变量url(将在下一个节点中使用)为https://twitter.com/+user id,例如 Elon Musk 应当是[https%3A%2F%2Ftwitter.com%2Felonmusk](https://twitter.com/elonmusk)。
为了将用户 ID 转换为完整 URL,我们可以使用以下 Python 代码将前缀https://twitter.com/与用户 ID 整合:
`defmain(id:str) ->dict:return{"url":"https%3A%2F%2Ftwitter.com%2F"+id,}`添加一个代码节点并选择 Python ,然后设置输入和输出变量名:
HTTP 请求节点根据Crawlbase 文档,如果以 HTTP 请求格式抓取 Twitter 用户的个人资料,我们需要按以下格式填写 HTTP 请求节点:
出于安全考虑,最好不要直接将 API Key 作为明文输入。在 Dify 最新版本中,可以在环境变量中设置令牌值。点击env-添加变量来设置 API Key,这样就不会以明文出现在节点中。
点击此处获取 Crawlbase API Key。输入/插入为变量。
点击此节点的开始按钮,输入 Elon Musk 的 URL 进行测试:
LLM 节点现在,我们可以使用 LLM 来分析 Crawlbase 抓取的结果并执行我们的命令。
变量context的值为 HTTP 请求节点的body。
以下是一个提示词示例。
测试运行点击预览开始测试运行,并在id中输入 Twitter 用户 ID:
例如,我想分析 Elon Musk 的推文,并以他的语气写一条关于全球变暖的推文。
点击右上角的发布,并将其添加到你的网站中。
写在最后 Crawlbase 应该是目前最便宜的 Twitter 爬虫服务,但有时它可能无法正确抓取用户推文的内容,具体效果请以实际调用为准。
链接
第 1 课:什么是工作流
原文:第 1 课:什么是工作流
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
你有没有发现,我们每天其实都在遵守着各种“流程”?比如“早上起床的流程”:
- 闹钟响 -> 2. 关闹钟 -> 3. 穿衣服 -> 4. 洗漱 -> 5. 吃早餐一步接着一步,我们最终完成一个任务的流程,这就叫做:工作流 (Workflow)。但要搭建一个给 AI 使用的工作流,我们还需要另外两个要素:开始需要什么(输入),以及最后能得到什么(输出)。
你可以把工作流理解成做菜的菜谱。一份菜谱通常包含:
- 材料(输入):需要准备什么?
- 步骤(过程):每一步需要做什么?
- 成品(输出):最后做出什么菜?
认识工作流 Dify 的工作流,就是一份我们写给给 AI 看的“菜谱”。你需要提供:
- 材料(输入):就是你提供给 AI 的信息,比如一个问题、一篇文章。
- 步骤(过程):就是你让 AI 按照顺序依次完成的任务,比如“先总结一下”、“再把它翻译成英文”、“最后生成一条发布在社交媒体帖子”。
- 成品(输出):AI 按照上面的步骤,最终生成的结果。所以,工作流就是你指挥 AI 按照步骤完成任务的流程图。
下图是一个在 Dify 里构建的身份证信息提取的工作流:
节点让我们再来看下上面的身份证信息提取流程,整个流程其实就是由上传图片、提取信息、整合信息这几个环节串联起来的。
每一个环节,就是一个节点。它们各司其职,就像完成接力赛一样,完成任务后,接力棒就会交给下一个节点。
Dify 为你准备了不同的节点,比如:LLM (大模型节点)、知识检索节点(Knowledge Retrieval)、条件分支节点、工具节点等,它们能够满足你的不同需求。
你只需要通过选择和拖拽,将不同节点连接起来,像搭积木一样,轻松构建出自动化工作流。在构建的过程中,你只需要思考做什么并专注于按什么顺序即可。
动手实践
前往Dify 官网,点击右上角的立即开始,注册 Dify 账号。
前往探索页面,查看标题下方标记为工作流的应用模板。
打开并运行一个你感兴趣的工作流模板,根据每一个节点,大致了解每一步是做什么的
第 2 课:流程的头和尾(开始与输出节点)
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
上一课我们把工作流比作一份菜谱。今天我们要做的,就是进入 Dify 后厨,认识一下我们的操作台并开始基础制作环节。
创建应用 1 创建空白应用
点击顶端的工作室,在左侧创建应用中,点击创建空白应用。
2 配置应用类型
在弹窗中的选择应用类型里选择工作流,填写应用名称 & 图标和描述后,点击创建。
3 选择开始节点类型
在弹窗中,你会看到一个包含两个选项的弹窗。这两个选项,代表不同的运行逻辑,让我们来做个简单的了解。
- 用户输入
你可以理解为手动模式。当你 / 用户输入具体信息(如问题、指令)后,才会开始运行。
使用场景:对话机器人、写作助手、翻译等多数 AI 应用。
- 触发器
你可以理解为自动模式。它依靠特定的信号(如特定时间、事件)自动运行。
使用场景:每天定时发新闻、当特定事项完成后再运行这个工作流。
我们在这一课,将搭建 AI 邮件助理,需要我们输入邮件内容,所以在这里我们选择用户输入。
认识画布(Orchestration Canvas)选择完开始节点后,你会看到一片空白的区域,这里就是你用来编排工作流的画布。
还记得我们在第一课里学到的节点吗?现在画布上出现的用户输入节点,就是我们工作流的起点。任何一个完整的工作流,都离不开一副最基础的骨架——开始节点 (头) 和输出节点 (尾)。
开始节点 (Start Node) 开始节点是整个工作流的唯一入口,相当于准备材料环节。它的作用是定义工作流开始时,需要从用户那里接收的信息。我们刚刚选择了用户输入作为开始节点。
核心概念:变量 (Variable) 你可以把变量想象成贴着不同标签的储物盒,每个盒子专门放一种特定的信息。
比如,如果你要做一个旅游计划生成器,你需要用户提供目的地和旅行天数这两个信息。然而,每个用户提供的目的地和旅行天数又都不同,所以每次运行时,这些盒子里装的内容都是变化的。
这就是变量的意义——让你的工作流能够灵活处理每一次不同的请求。
输出节点 (Output Node) 这是工作流的结尾,相当于出菜。
比如,刚刚的旅游计划生成器,当用户提供目的地:苏州,旅行天数:5,那么在结束节点,将会生成一个 5 天的苏州旅行计划。
开始节点和输出节点定义了一个工作流最基础的输入和输出,构成了它的基本框架。
动手实践:AI 邮件助理搭建一个 AI 邮件助理工作流的基础框架。
1 创建应用
你可以:
- 在刚刚创建的应用画布上,直接开始编排。
- 或者,你也可以点击顶部的工作室 > 在左侧创建应用中点击创建空白应用 > 在弹窗中选择工作流应用类型,填写应用名为邮件助理(记得在弹窗中选择用户输入)。2 配置开始节点(准备材料)
如果你需要 AI 写一封回复邮件,你需要提供什么信息?
没错,客户的名字和邮件原文。
点击开始节点,在右侧面板中的输入字段内,点击 **+**。
在弹窗中,依次创建两个变量:
第一个变量(短文本)
变量名称:
customer_name显示名称:客户名字
其他选项保持默认
第二个变量(长文本)
字段类型:点击后在下拉菜单中选择段落(这样输入框能够涵盖更多内容,方便粘贴邮件)
变量名称:
email_content显示名称:客户邮件原文
最大长度:手动修改为2000。确保能够涵盖完整的邮件内容
💡 变量名称 vs 显示名称
你可能已经留意到,我们为每个变量都设置了两个名字,他们有什么区别呢?
- 变量名称:这是运行时,给系统看的名字。它必须是独一无二的,并且只能使用英文字母、数字和下划线
_,不能有空格。 - 显示名称:这是给我们自己和最终用户看的名字。你可以使用任何语言(比如中文),让它变得清晰易懂。这个名字会显示在最终应用的输入框前面。
3 创建结束节点(设定目标)
在画布上点击右键,选择添加节点,选择输出节点。
现在,你的画布上有一个准备好接收客户名字和邮件原文的开始节点,和一个等待输出最终邮件的结束节点。
我们已经成功搭建了工作流的基本框架,画布中间的空白区域,就是我们下一课要放置 LLM 节点来处理这些信息的地方。
小挑战任务:如果你需要创建一个旅游计划生成器,这个工作流的开始节点,需要包含哪些变量?
💡 探索输入字段里添加变量的字段类型。
第 3 课:工作流的大脑(LLM 节点)
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
目标:为邮件助理装上大脑,掌握 AI 节点(LLM)的用法,并学会如何测试与调试工作流。
如果说开始节点是准备材料,结束节点是出菜,那么大型语言模型(LLM)节点就是负责烹饪的主厨。它是工作流的大脑和核心,负责执行所有思考、分析、创作等智能任务。你想让 AI 总结文章、写代码、回答问题或是创作文案,都是通过这个节点来完成的。
配置大型语言模型我们需要在 LLM 节点选择使用大型语言模型,让我们来快速配置一下。
1 打开设置
点击头像,在出现的菜单中点击设置。
2 安装 OpenAI 模型供应商
在左侧的设置中点击模型供应商,在安装模型供应商里选择 OpenAI,点击安装。
3 返回编排窗口
安装成功,你会在模型列表中看到名为 OpenAI 的大型语言模型。点击右上角ESC,回到编排窗口。
看懂大语言模型的能力标签正如每位主厨都有自己的拿手菜系,不同的大语言模型也有自己擅长的领域。在 Dify 里选择模型时,你会看到它们身上挂着一些标签,这些标签就是为了告诉我们它擅长什么。
CHAT(聊天)
拥有这个标签的模型,擅长对话、写文章、做总结。我们今天的邮件助理工作流就需要带有这个标签的大型语言模型。
1048K(记忆力)
这个数字代表模型的上下文窗口,可以理解为它的短期记忆有多强。
K 代表千,1048K 就意味着它能一次性处理大约一百万个词(Token)的超长信息,比如读完一本很厚的书,还能记住开头的情节。
💡 包含这个标签的大型语言模型,对于处理长文档、长对话非常有帮助。
多模态能力 (Multi-modal)
模态指的是信息的类型。多模态就是指模型能处理多种类型的信息,而不仅仅是文字。
VISION(看图识字)
带有这个标签的模型,不仅能理解文字,还能看见图片!你可以给它发送一张图,然后问它图里包含什么?
AUDIO(声音辨识)
带有这个标签的模型,可以听懂音频文件。你可以给它一段录音,让它转写成文字或者总结内容。
VIDEO(视频分析)
该模型能理解视频内容。
DOCUMENT(文档阅读)
该模型可以直接阅读和理解你上传的文档,比如 PDF 或者 Word 文件,然后回答相关问题。
了解这些标签,能帮助你在未来为不同的任务,挑选最合适的主厨。对于我们今天的邮件助理,选择一个基础的CHAT模型就足够了。
动手实践 1:添加 LLM 节点 1 打开你的应用
打开刚刚第二课创建的邮件助理工作流。
2 添加节点
在开始和结束节点中的空白处,点击右键选择添加节点 - LLM 节点。选中 LLM 节点,在右侧面板的模型内,选择模型gpt-4o-mini。
3 连接节点
点击 LLM 节点两侧的加号,分别连接开始和结束节点。
接下来,我们需要告诉大型语言模型需要做什么。点击 LLM 节点,在右侧的面板中,找到 System 输入框。在这里,你可以给 AI 输入具体的任务指令(Prompt)。
核心概念:提示词 (Prompt) 你可以理解为给 AI 下达的具体任务指令,你告诉 AI 做什么以及怎么做。
最关键的是,你可以在 Prompt 中,使用来自开始节点的变量。这样,AI 就能根据你每次提供的不同材料而变化。在 Dify 中,你只需要用变量名称这样的格式(我们在第一课动手实践开始节点里的:customer_name和email_content),就可以把变量嵌入到你的指令中。
动手实践 2:编写 Prompt 现在,我们将一起编写提示词,同时把变量融入其中。
1 编写指令
回到刚才的邮件助理工作流,我们将在 LLM 节点中的 System 输入框内输入 Prompt,让我们用简洁明确的方式写出指令。
`You are a professional customer service manager. Based on the customer's email, please draft a professional reply.Requirements:1. Start by addressing the customer name with a friendly tone.2. Thank them for their email.3. Let them know we have received it.4. Sign off as Anne.`2 添加用户消息(User Message)
用户消息是你发送给模型的内容——可以是提问、请求或模型需要完成的任务。 在此工作流中,客户姓名和邮件内容每次都会发生变化。与其手动输入,我们不如在用户消息中添加变量(Variables)。
点击系统框下方的 **Add Message(添加消息)** 按钮。
在用户消息框中,输入
customer name:。按下键盘上的
/键。此时会弹出变量选择菜单,点击customer_name。
按下Enter键开始新的一行,输入
email content:。再次按下
/键并点击email_content。
💡 想插入变量的时候,只要按下键盘上的
/,在弹出的菜单里选中你需要的变量,就能轻松搞定。
- 最终的 Prompt 如下图所示。
💡 至此,你已经完成了首个工作流的完整编排。
运行与调试材料备好了,主厨也到位了,指令也写好了,那么工作流的出品如何呢?在正式出菜之前,让我们先试个菜。
测试是确保工作流稳定运行的关键一步,它能帮助我们提前发现并解决潜在的问题。
小科普:检查清单(Checklist)检查清单就像你的私人体检医生,它会实时扫描你的工作流,自动找出配置不完整或者明显的错误(比如有节点没有连接好)。
在点击运行前先看一眼这里,能帮你提前了解工作流哪里有不完整的地方。
动手实践 3:测试与调试 1 提前检查
看看画布右上角,那个检查清单图标是不是出现了数字 1? 这意味着,你还有一个地方没有处理好。
2 分析警告
点击它,你会看到一个警告:输出变量不能为空。这意味着输出变量没有收到任何内容。
想象一下:主厨(LLM 节点)已经把菜做好了,但是服务员(输出节点)没有拿到菜,也根本不知道该把菜端给你。
3 解决问题
- 点击输出节点。
- 在右侧面板的输入变量旁,点击加号(+)。
- 在左侧变量名中,填入
email_reply。 - 在右侧选择框,选择 LLM 节点下的
{x} text。4 测试运行
完成后,你会发现检查清单上的数字消失了,让我们来进行测试运行。点击画布右上角的运行,输入客户名字和客户邮件原文,点击开始运行。
邮件测试示例
`客户名字:Amanda
客户邮件原文:Hi there,
I'm writing to ask for more information about Dify. Could you please tell me more on it?
Best regards,Amanda`5 运行成功!
你会发现,每个节点都运行成功(右侧有绿色的打勾符号),右侧详情处的状态为 SUCCESS。
💡 恭喜你!你不仅完成了第一个工作流的搭建,并掌握了基础的测试和调试工作流的技巧。
小挑战使用工作流,继续完成旅游攻略生成器的搭建。
💡 探索 Dify 的提示词生成器。
第 4 课:小抄(知识检索)
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
经过前三课的学习,我们的邮件助理已经初见雏形,能够草拟出基础的回复邮件。
但是,如果遇到公司特有的产品细节或者价格,它很可能会出现幻觉 (Hallucination)——也就是我们常说的一本正经地胡说八道,因为信息不准而出错。
那么我们该如何解决 AI 出现幻觉的问题呢?我们给它一本小抄。
检索增强生成 / RAG 解决幻觉的这套方法,叫做 RAG (Retrieval-Augmented Generation),中文名称是检索增强生成。简单来说,RAG 就是让 AI 从凭空想象变成了有据可查,这是构建专业 AI 应用最核心的技术之一。而它的名字已经包含了这三个步骤。
1. 检索(Retrieval)- 找菜谱
根据用户的提问,从知识库中检索(查询)出最相关的信息片段。这就好比听到菜名宫保鸡丁,你先去找到这道菜的菜谱。
2. 增强(Augmented)- 拿到菜谱和准备食材
将检索到的信息片段(上下文),与用户的原始问题一起,组合并转换成给大型语言模型一个更新且更丰富的提示词(Prompt)。你可以理解为把这份菜谱放在手边,方便你随时查阅,同时准备好对应的食材。
3. 生成(Generation)- 烹饪
大语言模型根据这个包含上下文的新提示词(Prompt),生成一个有事实依据的和更准确的回答。你按照菜谱上的步骤,完成烹饪宫保鸡丁。
知识检索 (Knowledge Retrieval) 节点这就像是给 AI 邮件助理旁边,放了一些资料。它会先根据用户的问题,在这本小抄里查找最相关的那几页,然后把找到的内容连同用户的问题一起进行思考。
在接下来的动手实践中,我们将使用知识库检索节点,给我们的 AI 邮件助理一些官方的小抄,让它在回答之前有据可查。
动手实践 1:创建知识库 1 进入知识库
点击顶部的知识库,在左侧点击创建知识库。
进入知识库后,你会看到多种创建文档的方式,比如从 Notion 同步、从网页抓取等,这让 Dify 可以灵活地接入不同来源的数据。
在今天的课程中,我们将学习最基础也是最常用的一种方式:上传本地文件。点击此处下载 Dify 简介文档,我们将使用它来做测试。
2 上传文件
点击选择文件,上传刚刚下载的文本内容,点击下一步。
3 文本分段与清洗
你可以把这里当作一个文本预处理的步骤。因为 AI 在检索信息时,直接阅读一整篇长文档效率很低。所以在这个页面,Dify 会自动帮你把文档切成更小的、逻辑连贯的段落(就像把一本书拆分成一张张知识卡片),并去掉一些不必要的格式,方便后续的检索和理解。
分段设置
此处自动将你的长文本切分成更易于检索的小段落。我们保持选择通用模式即可。
索引方式
- 高质量:会消耗 Token 调用 AI 模型来处理文本,让检索结果更精准。
- 经济:不消耗 Token,但会牺牲一定的准确性。在处理结构和内容相对简单的文本时,我们可以选择经济模式。
4 检索设置
文档处理完成后,我们需要对召回设置进行最后一次检查。在这里,你可以配置 Dify 查找信息的方式。
在经济模式下,检索设置仅支持倒排索引。
- 倒排索引
这是 Dify 使用的默认结构。可以把它想象成实体书背面的索引页——它列出了关键术语,并准确告诉 Dify 这些术语出现在哪些页面上。这让 Dify 能够根据关键词立即跳转到正确的知识卡片,而不是从头到尾阅读整本书。
- Top K
你会看到一个设置为 3 的滑动条。这告诉 Dify:当用户提出问题时,从手册中找出前 3 张最相关的知识卡片展示给 AI。如果你将其设置得更高,AI 会获得更多的上下文参考,但如果设置得过高,过量的信息可能会让 AI 难以处理。
目前,我们只需保持默认设置即可——它们已经可以满足我们的需求。
5 保存并处理
点击保存并处理。
💡 太棒了!
你已经成功创建了第一个知识库。接下来我们将使用知识库升级我们的 AI 邮件助理。
动手实践 2:添加知识检索节点 1 添加节点
回到我们的邮件助理工作流。
鼠标悬停在开始节点和 LLM 节点中间的连线,点击出现的加号,选择知识检索节点。2 连接知识库
点击知识检索节点,在右侧面板知识库中,点击 **+** 按钮。
在弹出的选择引用知识库窗口中,点击选中What’s Dify,点击添加。
3 配置查询文本
知识库已经准备就绪,我们如何确保 AI 会通过知识库来搜索邮件中的答案呢?
停留在当前面板,来到上方的查询文本,点击后选择email_content。
通过这种方式,我们是在告诉 AI:把客户的消息作为搜索关键词,去翻阅我们的知识库手册并寻找匹配信息。 如果没有设置查询文本,AI 就像是在盯着一本合上的书,无从下手。
这样,邮件助理就会以客户的邮件原文作为关键词,去知识库中检索最相关的答案了。
动手实践 3:升级 AI 邮件助理上下文已经准备好了,我们还需要在提示词(Prompt)里告诉大型语言模型先阅读这份资料,再生成邮件回复。
1 添加上下文
点击 LLM 节点,在模型设置的下方找到上下文 (Context)。
在上下文内选择知识检索里的
{x} result。
2 更新提示词
在提示词中输入/符号,在弹出的变量列表中,选择最下方的上下文即可。然后补充完整这个 Prompt,需要根据上下文来回答客户的问题。
** 太棒了!** 你已经完成了本次课程中最具挑战性的一步。你的邮件助理现在不仅拥有了大脑,更拥有了一本可以随时查阅的小抄。让我们来看看效果如何吧。
你可以直接使用下方的邮件示例,点击运行进行测试。
邮件测试示例
`客户名:Amanda
客户邮件原文:Hi,
What does the name 'Dify' actually stand for, and what can it do for my business?
Best regards,Amanda`你会发现,AI 生成的邮件回复内容是基于知识库里的文本完成的。
小挑战
- 在刚才的工作流中,如果用户的提问超出了知识库的内容,该如何应对这样的情况?
- 在你自己的工作或学习中,有哪些信息可以被制作成知识库?
- 探索文本分段与清洗页面中,分段设置和检索设置、索引方式和默认配置的三者关系。
第 5 课:工作流的岔路口(分类与执行)
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
目前,我们的邮件助理无论收到什么邮件,都会用同一套流程去处理。但这显然不够智能。一封询问产品价格的邮件和一封提交 BUG 的邮件,它们的回复口吻、需要查询的知识库都是完全不同的。
如何让我们的助理学会看人下菜碟,对不同类型的邮件进行差异化处理呢?让我们为工作流设置一个十字路口,它能根据不同的信号,让流程走向不同的轨道。
条件分支 (If/Else) 节点工作流的十字路口。它会检查我们设定的条件(比如邮件内容是否包含某个关键词?),根据检查结果,让流程走向对应的方向。
动手实践 1:添加条件分支节点现在,让我们继续升级邮件助理,让它能够通过关键词识别,自动区分和 Dify 有关的邮件和其他邮件。
1 插入节点
将鼠标悬停在开始和知识检索的连接线,点击出现的加号,选择条件分支。
2 配置条件规则
- 点击该节点,回到条件分支的右侧面板。
- 点击 IF 右侧的 **+ 添加条件 ** 按钮,选择
{x} email_content。 - 判断条件:保持默认的包含 (Contains)选项。在下方的输入值内填入Dify。现在,IF 分支的完整逻辑就是:
如果邮件内容中包含了 Dify 这个词。
💡 读懂十字路口的判断逻辑
在设置条件时,你会发现 Dify 提供了多种判断方式,就像给十字路口的红绿灯。
- 是 / 不是
完全等于或不等于某个值。可以把它想象成一把钥匙开一把锁,只有当变量内容和我们设定的值一模一样时,条件才算满足。
- 包含 / 不包含
文本中含有或不含某个关键词。这是我们今天将要使用的功能。
- 开始是 / 结束是
判断文本的开头或结尾是什么。
- 为空 / 不为空
判断一个变量里有没有内容。比如,判断用户是否上传了附件。
了解这些,你就能设置出准确和灵活的判断规则,继而构建更智能的工作流。
动手实践 2:规划不同处理路径现在我们有了十字路口,需要决定每条路上会发生什么。
A. 相关邮件轨道(IF 分支)点击 IF 分支右侧的加号,拖拽出一条线,与我们已有的知识检索节点连接。
这表明:当邮件原文内容中包含了 Dify 这个词,则执行我们上一课创建的、能够查询知识库的专业回复流程。
B. 无关邮件轨道(ELSE 分支)对于其他所有不包含 Dify 的邮件,我们创建一个简单的通用回复流程。
1 添加新的节点
点击 ELSE 右侧的加号,选择 LLM 节点。
2 配置这个 LLM 节点
配置这个新的 LLM 2 节点。点击它,在 SYSTEM Prompt 中输入一个通用的礼貌回复提示词,你可以复制粘贴下方的内容
`You are a professional customer service manager. Based on the customer's email, kindly inform the user that no relevant information was found and provide relevant guidance.
Requirements:1. Address the customer name in a friendly tone.2. Thank them for their letter.3. Keep the tone professional and friendly.4. Sign off as "Anne."`3 添加用户消息(User Message)
- 点击系统框下方的 **Add Message(添加消息)** 按钮。
- 在用户消息框中,输入
customer name:。 - 按下键盘上的 **/** 键。
- 此时会弹出变量选择菜单,点击customer_name。
- 按下Enter键开始新的一行,输入
email content:。 - 再次按下 **/键并点击email_content**。现在我们有两条处理轨道了,它们分别生成了不同类型的回复。你可能会想,我们可以把它们都直接连接到各自的结束节点。对于两条轨道来说,这还算简单。但如果我们有 5 条、10 条甚至更多的分支(比如处理商务合作、投诉建议等),把每一条线都拉到最后的结束节点,整个工作流会看起来比较混乱。
为了让工作流保持整洁和清晰,我们需要一个交通枢纽来将所有分开的轨道重新合并回一条主干线上。
变量聚合器可以把它想象成一个漏斗或一个交通枢纽。无论上游有多少不同分支的数据流,变量聚合器都能将它们汇集到一个出口,确保数据流的整洁和稳定,方便后续统一处理。
动手实践 3:添加变量聚合器 1 添加聚合器
- 选中结束节点和 LLM 之间的连线,然后进行删除。
- 在画布上点击右键,选择添加节点,选择变量聚合节点。2 合并路径
将两个 LLM 节点连接至变量聚合器。
3 赋值输出
- 点击变量聚合器节点。
- 在右侧的面板中点击变量赋值右侧的 **+**。
- 依次选择 LLM 和 LLM 2 节点中输出的text。这样一来,无论哪一个 LLM 节点生成了回复,变量聚合器都会自动把内容汇集起来,再统一交给结束节点。
4 最后一步
- 将变量聚合器连接至结束节点。
- 点击结束节点,在右侧面板删除原本的输出变量,改为变量聚合器的输出。现在的工作流如图所示:
5 运行与测试
点击运行,你可以自行填入客户名字并分别测试包含 Dify 和不含 Dify 关键词的运行结果,看看输出结果。
小挑战如果需要回复商务合作类型的邮件,工作流需要怎样修改?
💡 别忘了在知识库新增与商务合作有关的文档。
第 6 课:处理多个任务(参数提取 & 迭代)
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
我们的邮件助理已经能够处理相对简单的邮件了,但是,如果邮件助理收到一封邮件,内容是:
您好,我想问一下 Dify 是什么?另外,它都支持哪些模型?还有免费套餐吗?
如果我们直接把整封邮件丢给之前的 AI 助理,它可能会只回答第一个问题,或者将两个问题混在一起回复模棱两可的内容。我们需要一种方法,能先把邮件里的所有问题都找出来,然后利用我们第四课创建的知识库,对每个问题逐一进行查询和回答。
参数提取器你可以把它想象成一位信息搜集员。它的工作就是阅读一段文本(比如邮件),然后根据你给定的规则,把里面所有符合条件的关键信息(比如所有独立的问题)都提取出来,整理成一个列表。
动手实践 1:添加参数提取节点现在,我们来继续升级邮件助理,让它能准确地回答客户的每一个问题。在开始之前,我们先移除以下节点:知识检索,条件分支,LLM,LLM 2 和变量聚合器。
1 添加节点
在开始节点后,添加参数提取器节点。
2 选择输入变量值
点击参数提取器,在右侧面板的输入变量中点击设置变量值,在下拉菜单中选择email_content。
由于 AI 并不知道我们需要提取邮件里的那些信息,所以我们需要明确告诉它,我们需要收集邮件里的所有问题。
3 添加提取参数
在下方的提取参数中,点击右侧的加号,后会弹出一个添加提取参数的窗口。在名称内,我们可以把这个参数命名为question_list,即邮件内提取出的问题列表。
💡 参数类型
如果说添加提取参数是一个搜集员,那么类型就相当于篮子。你需要将收集的信息放到对应的篮子里。
单项类型(只装一个)
String (文本):用来装单个文本信息,比如一个客户的名字。
Number (数字):用来装单个数字,比如订单数量。
Boolean (布尔值):用来装是或否这样的判断结果。列表类型(装多个)
Array[String](文本列表):Array 代表列表,String 代表文本。所以,
Array[String]就意味着,我们要用一个能装多个文本的篮子,比如邮件里的所有问题。Array[Number](数字列表):用来装多个数字,比如一份清单里的所有商品价格。
Array[Boolean](布尔值列表):用来装多个是 / 否判断结果。比如,检查一份包含多个待办事项的清单,返回每一项是否完成的结果,如
[是,否,是]。Array[Object](对象列表):这是更高级的类型,用来装多个结构化信息包,比如一份包含姓名和电话的完整通讯录。
4 完成提取参数
- 基于上面的参数类型,我们需要为邮件内容选择
Array[String]。 - 接着,可以在描述内添加补充内容,比如:用户在邮件中提出的所有问题。完成后,点击添加。5 添加指令
在提取参数下方的指令输入框中,输入清晰的指令,告诉 AI 如何执行提取。
例如:请从文本中提取所有独立的问题,每一个问题作为列表中的一项。
这样,这个节点就能在邮件中找到所有独立的问题了。接下来,我们需要让 AI 对每个提取到的问题进行先查询再回答的操作。
迭代这就像是给助理配备了一个分身。当你把一个列表(比如上面提取到的问题列表)交给它时,它会为列表中的每一个项目,都单独执行一遍你设定好的子流程(比如查询知识库并回答)。
动手实践 2:配置迭代节点 1 添加节点
- 在参数节点后,新增迭代节点。
- 点击迭代节点,在右侧面板的输入中,选择参数提取器下的
{x} question_list。 - 输出变量暂时保持默认空白。迭代的高级选项
在迭代的面板中,你能看到其他选项,让我们快速进行了解。
并行模式:默认关闭。
关闭时,工作流会按顺序处理列表中的每一项(处理完问题 1,再处理问题 2)。
开启后,工作流会尝试同时处理列表中的所有项(类似 5 个厨师同时炒 5 个菜)。错误响应方法:默认为错误时终止。
错误时终止:意味着如果列表中的任何一项(比如第 2 个问题)在子流程中执行失败了,整个工作流就会立刻停止。
忽略错误并继续:意味着即使第 2 个问题处理失败了,工作流也会跳过它,继续处理后续问题。
移除错误输出:和忽略相似,在最终的输出结果列表中,移除这一项。回到工作流界面,你会看到迭代节点下方出现了一个子流程区域。所有在这个区域里的节点,都会为列表中的每一个问题单独运行一次。
2 添加知识检索节点
- 在迭代框内,点击添加节点,选择知识检索。
- 将查询变量设置为当前迭代
{x} item。在迭代节点的子流程中,item特指当前正在处理的列表项,也就是当前的这个问题。知识库选择我们之前创建的 Dify 简介。
3 添加 LLM 节点
- 在知识检索节点后,新增一个 LLM 节点。
- 像我们在第四课学习的配置那样,对 LLM 进行配置。别忘了上下文和在 System 里选择上下文和完成包含变量的提示词(Prompt)。
💡 还记得第四课吗?使用那些 Prompt 技巧,别忘了上下文!
你可以参考下面的提示词:
System:
`You are a professional Dify Customer Service Manager. Please provide a response to questions strictly based on the `Context`.`User:
`questions: Iteration/{x} item`由于迭代节点会对每个问题都生成一个答案,所以我们需要将这些答案汇总起来形成一份完整的回复邮件。
4 选择迭代节点的输出
- 选中迭代节点。
- 在输出变量选择 LLM 下对应的变量。这样,迭代节点就会把每次循环生成的答案内容收集起来,形成一个最终的答案列表。5 添加最后的 LLM 节点
在迭代节点后,再连接一个 LLM 节点。这个节点负责将所有问题的答案,整理成一封完整的邮件。
别忘了在 System 里补充提示词(Prompt)并在用户信息中填入变量,你可以参考下面的提示词。
`You are a professional customer service assistant. Pleaseorganize the answers prepared for customer into a clear andcomplete email reply.Sign the email as Anne.`User:
`answers: Iteration/{x}outputcustomer: User Input/{x}customer_name`6 检查
- 点击右上角的检查清单,查看是否有遗漏的地方。根据提示,我们需要将输出节点与前面的节点连接,并为它选择一个正确的输出变量。
- 将输出节点与前面的 LLM 2 连接,点击输出变量,选择 LLM 2 下面的 text。现在你可以在一封邮件里包含多个问题,看看最终的邮件回复是否包含了每个问题的回复。
小挑战除了提取问题,参数提取器还能提取什么?
💡 探索参数提取器内的类型。
第 7 课:增强工作流(插件)
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
我们的邮件助理现在已经能够熟练地在我们的专属知识库里查找答案。但如果邮件内容包含了一个知识库里没有的、最新的问题呢?比如:Dify 最近有什么新功能发布吗?
这个时候,邮件助理就不能只啃旧书本了,还需要学会上网搜索。
工具和Dify Marketplace插件市场为你的工作流配备对应的工具,让它拥有了连接世界和执行多样任务的能力。
工具在 Dify 中,工具通常以插件的形式存在于插件市场 (Dify Marketplace) 里,你可以在那里找到各种各样的官方或社区提供的工具,极大地扩展你的工作流能力。
现在,我们在第六课完成的工作流上进行升级,让邮件助理能同时通过知识库查询和网页搜索来回答问题。
动手实践 1:升级迭代的子流程我们需要先对提取出来的问题进行判断和分类,实现在必要时搜索的逻辑。
开始之前,我们仅保留如下节点:用户输入,参数提取器和迭代节点。
第一步:知识库查询和基础判断 1 检查知识检索节点
- 找到迭代内的子流程,仅保留知识检索节点,删除其他所有节点。
- 点击知识检索节点,在右侧面板内,确保查询变量为当前迭代下的
{x} item。2 新增 LLM 节点
在知识检索节点后,新增一个 LLM 节点,这个节点用来判断知识库能否回答提取出来的问题。
上下文选择知识检索中的
{x} result Array [Object]。在 System 内,填入提示词:
`Based on the `Context`, determine if the answer contains enough information to answer the questions. If the information is insufficient, you MUST reply with: "Information not found in knowledge base".`- 在 User 内,引用对应的变量:
`questions: Iteration/{x} item`当前工作流如图所示。
第二步:判断是否需要搜索 1 添加条件分支节点
在 LLM 节点后,新增条件分支节点。配置 IfLLM/{x} text包含知识库未找到的相关信息 (Information not found in knowledge base)。
2 添加搜索工具
让我们在 If 后连接搜索工具,这表明当知识库未找到相关回答信息时,使用搜索进行答案查询:
- 在 If 节点后,添加工具,在搜索框中输入 Google。
- 鼠标移至 Google,点击右侧的安装。在弹窗中再次点击安装。3 选择搜索功能
选择 Google 下方的谷歌搜索,点击该节点。
4 获取 API Key
当你第一次尝试让邮件助理使用谷歌搜索时,它可能会突然卡住,提示你需要先进行 API Key 授权配置,就像在上网前输入 Wi-Fi 密码,只有输入正确的密钥,Dify 才能安全地帮你访问外部世界的信息。
- 在谷歌搜索工具的设置页面中,点击API Key 授权配置,这时候页面会提示从 SerpAPI 获取您的 SerpAPI API key。点击跳转进入 SerpAPI 官网后,简单注册一个账号,就能立即获得你的专属 API Key。
⚠️ API Key 是你访问外部世界的通行证,要妥善保管、避免泄露。
点击复制,让我们回到工作室,填写一个容易分辨的凭据名称,粘贴从平台获取的密钥。现在,你已经成功配置谷歌搜索的 API Key 了!
当 API Key 授权成功后,面板中会出现查询字段。选中 Google Search 节点,在查询字段中选择
Iteration/{x} item。
5 配置两条路径
现在,我们需要根据不同的路径使用不同的方式来回答问题。
搜索回答路径
在 Google Search 节点后连接一个新的 LLM 节点,用于根据搜索结果回答问题。
System:
`You are a Web Research Specialist. Based on Google Search, concisely answer the user's questions. Please do not mention the knowledge base in your response.`User Message:
`results: GOOGLESEARCH/{x} textquestions: Iteration/{x} item`知识库回答路径
在 Else 节点后,新增一个 LLM 节点来处理基于知识库的回答。
System:
`You are a professional Dify Customer Service Manager. Strictly follow the `Context` to reply to questions.`User Message:
`questions: Iteration/{x} item`6 汇总信息
- 在子流程中(迭代框内部),在最后添加一个变量聚合器节点,将它与 LLM 2 和 LLM 3 连接。
- 在变量聚合器面板中,将变量赋值设置为
LLM 2/{x}text String和LLM 3/{x}text String。这样做可以将两个可能的答案合并到一条路径上。
当前工作流是这样的:
第三步:汇总输出我们已经完成了对邮件内容的判断,并根据判断执行不同的分支。现在我们要将输出进行汇总,完成一封最终的邮件。
1 配置迭代输出变量
点击迭代节点,将输出变量设置为{x}Variable Aggregator/{x}output String。
2 连接总结 LLM
在迭代节点后,连接一个新的 LLM 节点,用来总结所有的输出内容。你可以参考下面的提示词。
System:
`You are a professional Customer Service Manager. Summarize all the answers of the questions, and organize a clear and complete email reply for the customer.Do not include content where the knowledge base could not find relevant information.Signature: Anne.`User Message:
`questions: Iteration/ {x} outputcustomer: User Input / {x} customer_name`3 添加输出节点
在 LLM 节点后,添加输出节点。将输出变量设置为LLM 4/{x}text String。
我们已经完成了工作流的所有搭建和配置。现在我们的邮件助理可以根据知识库内容完成对应问题的回答,也能使用谷歌搜索进行补充回答。
尝试发送一封包含知识库中肯定没有答案的问题的邮件,看看 AI 是否能够成功使用谷歌搜索找到相关答案。
小挑战
- 条件分支节点还能根据哪些条件来决定执行下一步搜索?
- 探索 Marketplace,为工作流添加其他工具。
第 8 课:Agent 节点
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
经过前面七课的学习,我们的邮件助理已经经历了几次重大升级:
- 学会了查阅资料 —— 知识库检索
- 学会了区分情况 —— 条件判断
- 学会了处理多个任务 —— 参数提取 + 迭代
- 还学会了使用工具来延展 —— 工具节点你会发现,我们的工作流不再是简单的一步接一步,而是变得越来越像一个能够自主分析、判断、并调用不同能力来解决问题的智能助手。这种更高级的工作流模式,正是我们今天要深入探讨的核心概念——Agentic Workflow。
Agentic WorkflowAgentic Workflow 不再是简单的”输入 > 处理 > 输出”,而是包含了思考、规划、使用工具、根据结果调整等一系列更智能步骤的工作流。它让 AI 从一个简单的执行者变成了一个能自主解决问题的智能体 (Agent)。
Agent 策略为了让 Agent 更聪明地工作,研究者们设计了很多思考模式,这些策略像锦囊妙计一样,指导 Agent 如何一步步解决复杂问题。
- ReAct (Reason + Act)
边思考边行动。Agent 会先思考我该做什么,然后执行一步(比如调用工具),观察结果,再根据结果进行下一步思考和行动,如此循环往复。
- Plan-and-Execute(规划与执行)
先制定详细的计划,再一步步严格执行计划。
- Chain of Thought(CoT - 思维链)
引导 AI 在回答问题前,先进行一步步的推理分析,把思考过程写出来,从而提高最终答案的准确性。
- Self-Correction(自我修正)
让 AI 对自己生成的初步结果进行审视和评估,发现其中的问题并进行修正。
- Memory(记忆)
为 Agent 配备短期或长期记忆机制,让它能记住之前的对话内容或关键信息,做出更连贯、更个性化的反应。
在第七课中,我们花费了较多的时间对迭代的子流程进行升级,那我们有无更加简单的办法,让 AI 能够先查资料,查不到再上网搜索,最后再进行整合呢?
答案是:使用 Dify 内的Agent 节点。
Agent 节点你可以把它看作一个高度封装的智能单元。
你只需要给它通过指令设定一个目标 (Goal),并提供它可能需要用到的工具 (Tools),它就能在内部自主地思考、规划、选择并调用工具(利用选定的 Agent 策略,如 ReAct,以及模型的 Function Calling 能力),直到完成你设定的目标。
在 Dify 中,这极大地简化了构建复杂 Agentic Workflow 的过程。
动手实践 1:使用 Agent 节点重构我们的目标是使用 Agent 节点替换掉迭代里的部分节点。
1 清理迭代
让我们仅保留迭代节点里子流程的知识检索节点,移除其他节点。
2 添加 Agent 节点
在迭代节点里的知识检索节点后,添加 Agent 节点。
3 安装 Agent 策略
由于我们还没有安装 Agent 策略,所以我们需要前往 Marketplace 进行安装。
点击 Agent 节点,在右侧面板中点击Agent 策略,点击在 Marketplace 中查找更多。
4 选择 Agent 策略
在 Dify Marketplace 页面里,点击 Agent 策略进入到对应插件页面,鼠标移动至Dify Agent 策略。点击安装,并在弹窗中再次确认安装。
5 选择 ReAct
让我们回到工作流页面,如果此时 Agent 策略仍然为空,可以刷新页面。点击Agent 策略,选择 Agent 内的ReAct。
为什么选择 ReAct?
ReAct(Reason + Act)是一种非常强大且通用的 Agent 策略。它允许 Agent 像人一样思考:先推理 (Reason) 下一步该做什么(比如我应该先查知识库),然后行动 (Act)(调用知识库工具),观察结果后,再进行下一步推理(比如知识库没找到,我需要搜索)和行动(调用搜索工具)。
这种边想边做的模式非常适合处理需要动态决策和多工具协作的复杂任务。
6 选择模型
ReAct 是一种思考策略,但要真正执行行动部分,AI 需要具备调用外部工具相应的技能,这种技能被称为函数调用(Function Calling)。
为什么必须支持 Function Calling?
因为 Agent 节点的核心能力之一就是自主调用工具。Function Calling 是模型理解何时以及如何调用你提供的工具(如谷歌搜索)的关键技术。如果模型不支持此功能,Agent 就无法有效地与工具交互,也就失去了大部分自主决策的能力。
所以,我们需要选择一个支持函数调用的模型。在这里,我们选择gpt-5。
7 选择工具
在工具列表中添加谷歌搜索,确认启用。
8 填写指令
请清晰地告诉 Agent,它的任务目标、角色、上下文以及需要遵循的工作流程或者规则。你可以参考下面的指令,或者自行进行修改和补充。
`Goal: Answer user questions about Dify products.
Steps:1. I have provided a relevant internal knowledge base retrieval result. First, judge if this result can fully answer the user's questions.2. If the context clearly answers it, generate the final answer based on the context.3. If the answer is insufficient or irrelevant, use the Google Search tool to find the latest information and generate the answer based on search results.
Requirement: Keep the final answer concise and accurate.`9 上下文和查询
在指令中,我们要求 Agent 根据上下文进行判定。接下来,我们需要在上下文框内,选择对应的知识检索结果。
- 上下文:选择知识检索内的
Knowledge Retrieval / (x) result Array[Object](这会将知识库内容传递给 Agent)。 - 查询:选择
Iteration/{x} item。为什么是 item,而不是最开始的 email_content 呢?
让我们快速回忆一下,我们使用参数提取器从email_content中提取了一个问题列表question_list。现在,迭代节点正在逐一处理这个问题列表,而迭代里的 item 就是当前在处理的一个个问题。将 item 作为查询输入,能让 Agent 更聚焦于当前的任务,提高其决策和行动的准确性。
10 设置迭代输出变量
选择Agent/{x}text String作为输出变量。
💡 🎉 我们完成了迭代节点的所有升级操作。
由于迭代节点会为邮件中的每个问题都产生一个答案,继而输出一个包含所有问题答案的列表。所以我们需要在最后对这些答案进行一个总结,最终形成一份通顺和完整的邮件回复。
动手实践 2:最后的拼装 1 最终撰写人(LLM)
在迭代节点后增加一个 LLM 节点,作为最终的邮件撰写人。
点击该节点,在右侧的 System 里输入 Prompt。你可以参考下面的 Prompt,或自行修改。
`Combine all answers for the original email.Write a complete, clear, and friendly reply to the customer.Signature: Anne`- 在 User Message 中分别将 answers、email content 和 customer name 替换成对应的变量。当前 LLM 节点如下所示。
2 添加输出节点
将输出变量设置为 LLM 的 text,并命名为email_reply。
最终的工作流如下:
点击运行。提问一些混合问题,观察 Agent 节点如何自主决定何时使用上下文、何时使用谷歌搜索。
小挑战
- 我们能否让 Agent 节点直接替换掉迭代节点?应该怎么样进行编排?
- 上下文还能选择哪些信息,帮助 Agent 更好地运行?
第 9 课:排版设计师(模板)
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
回顾第八课,我们使用最后的 LLM 节点产出一篇完整的回复邮件。
虽然,我们在这个 LLM 节点内的 Prompt 里告知了邮件内需要每一个问题对应一个答案,但仍然会有每封邮件输出格式不统一的情况。
为了解决这个问题,我们需要一个专属的排版小助手,在最终生成邮件之前,把所有的内容整理成工整和标准的格式。
模板转换你可以将它理解成排版设计师,它能够接收一个或者多个输入变量(比如我们的答案列表),然后按照你设置好的模板,将这些变量重新组合、排版,最终输出一段格式统一的文本。
动手实践:优化邮件排版 1 更新 LLM 节点
既然模板节点将会负责处理问候语和落款,我们需要告诉 LLM 只专注于回答问题本身就行。你可以复制并粘贴下方的提示词,也可以自由修改。别忘了在用户消息(User Message)中把文本替换成相应的变量。
`Combine all answers for the original email. Write a complete, clear, and friendly reply that only includes the summarized answers.
IMPORTANT: Focus SOLELY on the answers. Do NOT include greetings (like "Hi Name"), do NOT write intro paragraphs (like "Thank you for reaching out"), and do NOT include signatures.`2 添加用户信息 (User Message)
在 LLM 的 User 框内,分别列出并插入对应的变量。
3 添加模板转换节点(Template Node)
在 LLM 节点之后,点击+号添加一个模板节点。
4 设置输入变量
我们需要把原材料交给我们的排版设计师,让它知道该排版哪些内容。 点击模板节点,找到输入变量(Input Variables)区域,并添加以下这两个变量:
customer:选择User Input / {x} customer_name Stringbody:选择LLM / {x} text String
5 使用 Jinja 语法进行排版
什么是 Jinja2?
简单来说,Jinja2 就是一种让你把变量(比如答案列表)按照你想要的格式,填入到一个文本模板里的工具。它使用一些简单的符号来标记变量的位置和执行一些基本操作。通过它,我们能把一个原始的数据列表,转换成一段格式整齐的文本。
在这里,我们可以把开场白、邮件正文和署名落款拼装在一起,确保每次发出的邮件都既专业又格式统一。
请将下方这段排版代码直接复制并粘贴到模板节点的代码框中。
`Hi{{customer}},
Thank you for reaching out to us, and we are more than happy to provide you with the information you are seeking.
Here are the details regarding your specific questions:
{{body}}
---Thank you for reaching out to us!Best regards,Anne`这是最终的工作流:
点击运行,在一封邮件中提出多个问题进行测试。你会发现,最终生成的回复完美包含了个性化的开场白、LLM 在中间部分出色总结的答案,以及最下方标准、专业的落款。
小挑战
- 如何修改 Jinja2 的语法,将项目符号列表修改成数字编号列表。
💡 可前往Template Designer Documentation,或者向 AI 提问,探索更多格式。
- 格式转换除了对列表进行统一的格式处理,还能做什么?
第 10 课:发布和监控你的 AI 应用
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
经过前九课的学习和搭建,我们的邮件助理已经具备了连接知识库、使用搜索工具、并产出格式化的回复能力。但它现在还是躺在 Dify 的工作室里,只有你能够看到和使用它。
我们如何能够将它分享给其他人使用?如何知道它在实际运行中的表现如何?有没有报错?
这就需要我们完成最后两个关键步骤:发布(Publish)和监测(Monitor)。
发布你的应用
- 将鼠标移至画布的右上角,点击发布按钮。此时,下方的其他按钮为灰色,点击发布更新。
⚠️ 当你完成修改后,需要保存并发布所有的修改,请点击发布更新。
如果不更新发布,线上版本将保持原来的旧版本。
点击发布更新后,你会发现下方的按钮已经可以点击。
分享你的应用
点击下方的运行,Dify 会为你生成一个网页(WebApp),这就是你创建的邮件助理应用界面啦。
你可以在这里直接使用邮件助理,也可以将链接分享给其他人。他们不需要登录 Dify,就能直接使用你开发的邮件助理了。
- 批量运行
如果你有 100 封邮件需要 AI 处理,一封封复制粘贴效率会非常低,有了批量运行,你只需要把这 100 封邮件整理成一个 CSV 表格文件,上传给 Dify,它就会自动把这 100 封邮件一次性处理完,最后给你一个包含所有结果的表格。
由于在 Workflow 里,我们设定了不同的变量,所以你需要上传指定格式的 CSV 表格文件。你也可以点击下载模板,再往这个模板里填充对应内容。
其他连接方式
访问 API:如果你懂编程,可以获取 API 密钥,把这个工作流集成到你自己的网站或 App 里。
在”探索”中打开:和你常用的工作流一并放置在探索页面左侧的工作区,你能下次更快地使用它。
发布为工具:将你当前的工作流打包成一个插件(你可以理解成工具),让它能被其他的 Agent 调用。
监测你的应用作为邮件助理的创建者,我们需要时刻关注它运行的状态,我们能够通过日志和监测来了解应用的健康状况、潜在的性能瓶颈等。
上帝视角 — 监测(Monitor)监测是你的指挥中心,你能在这里通过不同面板看到应用的表现。
名称释义全部消息数 AI 每天的互动总次数,每回答用户一个问题算一条消息。你能了解应用的实用热度。活跃用户数与 AI 有效互动,即有一问一答以上的唯一用户数。提示词编排和调试的会话不计入。费用消耗反映每日该应用请求语言模型的 Tokens 花费,用于成本控制。当曲线出现突然的提升或减少,你需要进行检查。平均用户调用次数反映每天用户的使用次数。该指标反映了用户粘性。
放大镜 - 日志(Logs) 日志记录了你的应用每次运行的详细记录,包括时间、输入内容、耗时等。
日志的作用
- 排查故障 (Debug):当用户说邮件助理用不了了,你可以通过日志还原案发现场,找到是哪个节点出了问题。
- 优化性能:查看每个节点的耗时,找出拖慢整个流程的”瓶颈”。
- 理解用户:看看用户实际输入了什么内容,以此来不断优化你的 Prompt 或知识库。
- 监控成本:查看每次运行消耗了多少 Token,控制预算。名称释义开始时间任务触发的时间状态 Success(成功);Failure(失败)运行时间整个流程花了多少时间 TOKENS 这次运行消耗的 AI 算力(Token 数)用户或账户用户 ID 触发方式是通过 WebApp 界面运行的,还是通过 API 调用的你可以点击每条日志查看详情。例如,你可以发现用户高频提问的问题,并以此及时更新和修改你的知识库。
发布不是终点,而是新的起点,这就是LLMOps(大语言模型运维)的核心理念。
- 观察 (Observe):通过日志,看用户真的在问什么?AI 的回答用户满意吗?
- 分析 (Analyze):发现有些问题 AI 回答得不好,或者某些工具调用经常失败。
- 优化 (Optimize):回到画布,修改 Prompt,补充知识库,或者调整工作流逻辑。
- 发布 (Publish):再次发布新版本。通过上面的循环,你的 AI 邮件助理会变得越来越智能,越来越懂你的业务。
结束语现在,你不仅掌握了 Dify 这个工具,更掌握了构建 AI 应用的思维方式:
`把任务进行拆解 → 选择合适的节点、模型和工具去解决 → 将它们连接在一起 → 通过监测数据持续迭代`现在,你可以去 Dify 的探索页面里点开一个模板,进行拆解和分析。或者,从工作中的痛点出发,从空白的工作室开始,从零搭建一个属于你自己的工作流或者 AI 应用。
愿你使用 Dify,在 AI 时代下,工作更轻松,创造更自由。
