Dify 是一个易用的平台,帮助您以低代码或零代码方式构建 AI 应用。它通过拖拽具有不同功能的模块来工作。信息在模块之间流动,被处理并组合以生成答案。
在本文中,我将通过一步步创建一名 AI 旅行助手,带您了解 Dify 的基础知识。
我们通过发送 The Median(每周五发布的免费通讯,梳理本周 AI 关键信息)来为读者持续更新 AI 最新动态。订阅即可每周几分钟快速掌握要点:
什么是 Dify?
Dify 是一个旨在简化 AI 应用开发的平台,无需深厚的编码技能。它提供友好的低代码环境,用户可以通过拖拽不同组件来构建应用。
可以把 Dify 想象成一个数字工具箱,里面装满了可拼接的现成模块,用于搭建可用的软件。此方式让技术更易触达,使编程经验有限的人也能将想法变为现实。
每种模块都有输入,并根据模块类型将其转换为不同的输出。信息在各模块间传递和转换,最终产生结果。
开始使用 Dify
我们有两种使用 Dify 的方式:
本教程使用云端版本。Dify 的云端版本提供免费方案,因此无需付费订阅即可跟随教程操作。
如果您对本地部署感兴趣,最简单的方法是:
- 从官方仓库下载或克隆 Dify。
- 按仓库 README 的快速开始部分说明使用 Docker 运行 Dify。
在 Dify 中创建 Chatflow
Dify 提供多种应用类型。我们将专注于构建 Chatflow 应用,这是一种让用户通过聊天界面与智能体交互的 AI 流程。
要创建新的 Chatflow 应用,先点击 "Create from blank",然后选择 "Chatflow" 选项。

创建流程时,我们设置一个名称,然后点击“Create”按钮:

这将创建如下默认流程:

该流程包含三个模块:
- 起始模块负责启动流程。对于 Chatflow,流程由用户发送消息触发。
- LLM 节点将用户消息作为输入并发送给 LLM,本例中为
gpt-4。
- 最终节点用于在聊天中显示消息。在此示例中,它连接到 LLM 节点,因此 LLM 节点的输出会发送到聊天界面。
这三个节点共同构成了一个类似 ChatGPT 的 AI 聊天。运行该应用前,我们需要安装并配置 OpenAI 插件。
安装并设置 OpenAI 插件
安装 OpenAI 插件的步骤如下:
- 点击右上角的 "Plugins" 按钮。

- 点击 “Install from Marketplace”。

- 在搜索框中输入 "openai",然后点击 OpenAI 插件。

- 选中 OpenAI 插件并点击 “Install”。
接下来,我们需要设置 OpenAI API 密钥。如果您还没有,请在此处创建。请注意,使用 OpenAI API 并非免费,您需要为 API 密钥绑定支付方式。
拿到密钥后,按以下步骤进行配置:
- 选择 LLM 节点。

- 点击模型名称旁的配置图标。

- 点击顶部的模型下拉菜单。

- 点击列表底部的 "Model Provider Settings"。

- 在 API key 部分点击 "Setup"。

- 粘贴 API 密钥并点击 “Save”。

运行应用
现在我们可以点击预览按钮来运行应用:

目前它并不算有趣,因为只是一个 AI 聊天机器人。请记住,在用户发送消息之前,它不会执行任何操作。

创建变量
Dify 允许通过为变量赋值来存储应用状态,这些变量对所有模块可见。
要创建变量,点击变量按钮:

让我们创建一个变量来存储用户名:

此配置创建了名为 name 的变量,用于存储字符串(文本)。我们将默认值留空,因此变量初始为空字符串。
有多种方式可以填充它,但最常见的是使用 AI 模块从对话中自动识别。稍后我们会学习如何实现。在此之前,我们先学习如何检查变量的值以控制应用流程。
IF/ELSE 模块
要检查变量的值,我们可以使用 IF/ELSE 模块。该模块用于根据变量的值执行不同操作。
要添加新模块,点击底部的“+”按钮:

然后选择要添加的模块。本例中我们选择 "IF/ELSE":

接着点击该模块进行配置,选择我们之前创建的 name 变量。
为测试起见,我们添加两个 Answer 模块。这些模块用于在聊天中显示消息。将其中一个连接到 IF 输出(条件为真时运行),另一个连接到 ELSE 输出(条件为假时运行)。

对于 IF 输出,我设置字符串 "Sorry, I don't know your name.";而对于 ELSE,我设置为 "Hello, {name}!"。我们可以用花括号在字符串中插入变量。这在后续构建提示词时也很有用。
点击 "Preview" 按钮即可试用该 Chatflow。请注意,Chatflow 由用户消息触发,因此需要先发送一条消息,比如 "Hi"。以下是根据是否设置了名字的不同结果(第二个示例中我在界面变量里手动设置了名字):

变量赋值器与参数提取器模块
我们可以使用参数提取器模块借助 AI 识别并提取变量的值。该模块使用 LLM 从对话中提取信息。

我们先在 IF 分支后添加一个参数提取器模块。以下是模块配置:

INPUT VARIABLE 设置为 sys.query,即用户消息。这意味着参数提取器模块将尝试从用户消息中提取值。
- 在
EXTRACTION PARAMETERS 中,我们定义要提取的信息。遗憾的是,这里不能直接指定变量,因此需要点击“+”按钮重新定义该信息。

INSTRUCTION 字段是提示词,用于引导 LLM 要做什么。
- 接着我们添加一个变量赋值器模块,将参数提取器提取到的值(若有)赋给
name 变量。

务必将提取到的 name 赋给 name 变量。

完成此步后,name 变量可能仍未定义,因为用户可能没有提供姓名。因此我们再添加一个 IF/ELSE 模块进行检查:若名字已设置,则向用户问好;否则询问其姓名。

以下是一个交互示例:

此流程展示了 Dify 工作流的基本原理。无论用户消息是什么,只要姓名未定义,就尝试从消息中提取;若失败则询问;否则便用其姓名致意。
此时还没有 LLM 模块,因此该智能体不会执行其他任务。
代码模块
代码模块可用于执行自定义 Python 代码。我们来修改上一个流程,改为提取用户所在地而不是姓名。然后使用一个代码模块请求天气 API,并将天气预报发送给用户。
- 创建一个名为
location 的新变量。
- 将 IF/ELSE 模块改为检查
location 而非 name。
- 将参数提取器模块改为提取所在地而非姓名。
- 将变量赋值器模块改为将提取的值赋给
location 变量。
- 修改 Answer 模块,分别用于询问所在地并显示所在地。
完成这些步骤后,流程应如下所示:

以下是一个示例交互:

下一步是在得到所在地后添加代码模块。该模块向OpenWeather API 发起请求,获取该地的天气预报。
该 API 可免费使用,但需控制请求次数。
将第二个 Answer 模块替换为代码模块。

配置其接收一个参数,即 location 的值。

对于 Python 代码,下面演示如何使用 requests 包从 OpenWeather API 获取天气:
import requests
API_KEY = "PASTE_YOUR_API_KEY_HERE"
def main(location: str) -> str:
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": location,
"appid": API_KEY,
"units": "metric",
}
response = requests.get(base_url, params=params)
data = response.json()
if response.status_code == 200:
weather_desc = data["weather"][0]["description"]
temp = data["main"]["temp"]
return {
"result": f"Current weather in {location}: {weather_desc}, Temperature: {temp}°C"
}
else:
return {
"result": "Could not retrieve weather data",
}技术支持
最后,将代码节点的输出连接到一个 Answer 节点,向用户展示结果。

现在我们已有一个能告知天气预报的 Chatflow:

项目:创建旅行规划 AI 智能体
现在我们已经具备构建 AI 旅行助手所需的工具。可能性很多,但为避免过度复杂化,本教程将保持简洁。
该智能体将专注于规划旅行中的单日行程。它会先收集用户的所在地以及其喜欢的活动类型。为此我们使用两个变量:
location:存储用户旅行目的地。
activities:字符串数组,存储用户想做的活动。

以下是可用于同时提取这两个变量的流程:

在此示例中,我们首先使用一个变量提取模块,同时提取 location 以及 activities 列表。

然后我们使用 IF/ELSE 模块检查是否成功提取到每个参数,并在成功时更新变量。与之前的示例相反,这使得用户可以更新这些值。
在完成取值与变量赋值后,再添加一个 IF/ELSE 模块检查是否仍有缺失。如果缺少某项,就明确向用户索取。

如果 location 和 activities 都已定义,我们使用之前创建的代码模块获取该地天气。最后将天气、所在地与活动信息提供给一个 LLM 模块,为用户规划当天行程。

LLM 模块配置了系统提示词,告诉模型要做什么。所在地、活动与天气将被注入其中。以下是流程的最后部分:

以下是与该智能体的示例交互:

从回复中可以看到,由于代码节点的加入,智能体不仅能提供天气信息,还能在规划活动时加以考虑。
由于流程的设置方式,如果用户在第一条消息中就直接提供了信息,智能体会直接给出当天的行程计划。

定义自定义问候语
您可能注意到,智能体会先向用户发送一条问候消息:

要启用此功能,我们需要激活 Conversation Opener 功能。


Dify 工具
在本教程中,我们学习了 Dify 的基础构建模块。还有一个方面尚未涉及:工具(Tools)。
在 Dify 中,工具是强大的扩展,使您的 AI 智能体能够突破语言模型的限制,与外部世界交互。虽然 LLM 能基于训练数据和提示上下文进行推理并生成回答,但它无法实时访问在线数据或外部服务。
工具通过让智能体发起 API 调用、查询数据库、执行计算、检索文档等,充当 AI 与外部信息源之间的桥梁,从而解决这一问题。

您可以通过平台的可视化界面配置工具,指定工具类型(如 HTTP 请求、代码解释器或第三方插件)、输入/输出模式以及身份验证要求。配置完成后,这些工具可通过 Tool 模块在智能体流程中使用,您可以在模块间传递数据,并将结果馈送至 LLM 节点或其他逻辑模块。

这不仅让您的智能体更“聪明”,也更具行动力,能够通过与真实世界服务交互,提供最新、具上下文相关性的答案。
在我们的示例中,我们使用了代码模块请求天气 API。另一种做法是创建一个工具,并将该工具提供给 LLM 使用。
结语
在本教程中,我们探索了开始使用 Dify 所需的一些基础模块。不过,Dify 还有许多功能与能力有待发掘。
为加深理解,一个很好的练习是对我们创建的旅行助手进行增强。例如,加入互联网搜索能力以在线发现本地活动,从而丰富智能体的功能并提供更具动态性的建议。
如果您对像 Dify 这样的 AI 智能体搭建工具感兴趣,推荐继续阅读我们的其他教程:
Dify 是一个易用的平台,帮助您以低代码或零代码方式构建 AI 应用。它通过拖拽具有不同功能的模块来工作。信息在模块之间流动,被处理并组合以生成答案。
在本文中,我将通过一步步创建一名 AI 旅行助手,带您了解 Dify 的基础知识。
我们通过发送 The Median(每周五发布的免费通讯,梳理本周 AI 关键信息)来为读者持续更新 AI 最新动态。订阅即可每周几分钟快速掌握要点:
什么是 Dify?
Dify 是一个旨在简化 AI 应用开发的平台,无需深厚的编码技能。它提供友好的低代码环境,用户可以通过拖拽不同组件来构建应用。
可以把 Dify 想象成一个数字工具箱,里面装满了可拼接的现成模块,用于搭建可用的软件。此方式让技术更易触达,使编程经验有限的人也能将想法变为现实。
每种模块都有输入,并根据模块类型将其转换为不同的输出。信息在各模块间传递和转换,最终产生结果。
开始使用 Dify
我们有两种使用 Dify 的方式:
本教程使用云端版本。Dify 的云端版本提供免费方案,因此无需付费订阅即可跟随教程操作。
如果您对本地部署感兴趣,最简单的方法是:
在 Dify 中创建 Chatflow
Dify 提供多种应用类型。我们将专注于构建 Chatflow 应用,这是一种让用户通过聊天界面与智能体交互的 AI 流程。
要创建新的 Chatflow 应用,先点击 "Create from blank",然后选择 "Chatflow" 选项。
创建流程时,我们设置一个名称,然后点击“Create”按钮:
这将创建如下默认流程:
该流程包含三个模块:
gpt-4。这三个节点共同构成了一个类似 ChatGPT 的 AI 聊天。运行该应用前,我们需要安装并配置 OpenAI 插件。
安装并设置 OpenAI 插件
安装 OpenAI 插件的步骤如下:
接下来,我们需要设置 OpenAI API 密钥。如果您还没有,请在此处创建。请注意,使用 OpenAI API 并非免费,您需要为 API 密钥绑定支付方式。
拿到密钥后,按以下步骤进行配置:
运行应用
现在我们可以点击预览按钮来运行应用:
目前它并不算有趣,因为只是一个 AI 聊天机器人。请记住,在用户发送消息之前,它不会执行任何操作。
创建变量
Dify 允许通过为变量赋值来存储应用状态,这些变量对所有模块可见。
要创建变量,点击变量按钮:
让我们创建一个变量来存储用户名:
此配置创建了名为
name的变量,用于存储字符串(文本)。我们将默认值留空,因此变量初始为空字符串。有多种方式可以填充它,但最常见的是使用 AI 模块从对话中自动识别。稍后我们会学习如何实现。在此之前,我们先学习如何检查变量的值以控制应用流程。
IF/ELSE 模块
要检查变量的值,我们可以使用 IF/ELSE 模块。该模块用于根据变量的值执行不同操作。
要添加新模块,点击底部的“+”按钮:
然后选择要添加的模块。本例中我们选择 "IF/ELSE":
接着点击该模块进行配置,选择我们之前创建的
name变量。为测试起见,我们添加两个 Answer 模块。这些模块用于在聊天中显示消息。将其中一个连接到
IF输出(条件为真时运行),另一个连接到ELSE输出(条件为假时运行)。对于
IF输出,我设置字符串 "Sorry, I don't know your name.";而对于ELSE,我设置为 "Hello, {name}!"。我们可以用花括号在字符串中插入变量。这在后续构建提示词时也很有用。点击 "Preview" 按钮即可试用该 Chatflow。请注意,Chatflow 由用户消息触发,因此需要先发送一条消息,比如 "Hi"。以下是根据是否设置了名字的不同结果(第二个示例中我在界面变量里手动设置了名字):
变量赋值器与参数提取器模块
我们可以使用参数提取器模块借助 AI 识别并提取变量的值。该模块使用 LLM 从对话中提取信息。
我们先在
IF分支后添加一个参数提取器模块。以下是模块配置:INPUT VARIABLE设置为sys.query,即用户消息。这意味着参数提取器模块将尝试从用户消息中提取值。EXTRACTION PARAMETERS中,我们定义要提取的信息。遗憾的是,这里不能直接指定变量,因此需要点击“+”按钮重新定义该信息。INSTRUCTION字段是提示词,用于引导 LLM 要做什么。name变量。务必将提取到的
name赋给name变量。完成此步后,
name变量可能仍未定义,因为用户可能没有提供姓名。因此我们再添加一个 IF/ELSE 模块进行检查:若名字已设置,则向用户问好;否则询问其姓名。以下是一个交互示例:
此流程展示了 Dify 工作流的基本原理。无论用户消息是什么,只要姓名未定义,就尝试从消息中提取;若失败则询问;否则便用其姓名致意。
此时还没有 LLM 模块,因此该智能体不会执行其他任务。
代码模块
代码模块可用于执行自定义 Python 代码。我们来修改上一个流程,改为提取用户所在地而不是姓名。然后使用一个代码模块请求天气 API,并将天气预报发送给用户。
location的新变量。location而非name。location变量。完成这些步骤后,流程应如下所示:
以下是一个示例交互:
下一步是在得到所在地后添加代码模块。该模块向OpenWeather API 发起请求,获取该地的天气预报。
该 API 可免费使用,但需控制请求次数。
将第二个 Answer 模块替换为代码模块。
配置其接收一个参数,即
location的值。对于 Python 代码,下面演示如何使用
requests包从 OpenWeather API 获取天气:最后,将代码节点的输出连接到一个 Answer 节点,向用户展示结果。
现在我们已有一个能告知天气预报的 Chatflow:
项目:创建旅行规划 AI 智能体
现在我们已经具备构建 AI 旅行助手所需的工具。可能性很多,但为避免过度复杂化,本教程将保持简洁。
该智能体将专注于规划旅行中的单日行程。它会先收集用户的所在地以及其喜欢的活动类型。为此我们使用两个变量:
location:存储用户旅行目的地。activities:字符串数组,存储用户想做的活动。以下是可用于同时提取这两个变量的流程:
在此示例中,我们首先使用一个变量提取模块,同时提取
location以及activities列表。然后我们使用 IF/ELSE 模块检查是否成功提取到每个参数,并在成功时更新变量。与之前的示例相反,这使得用户可以更新这些值。
在完成取值与变量赋值后,再添加一个 IF/ELSE 模块检查是否仍有缺失。如果缺少某项,就明确向用户索取。
如果
location和activities都已定义,我们使用之前创建的代码模块获取该地天气。最后将天气、所在地与活动信息提供给一个 LLM 模块,为用户规划当天行程。LLM 模块配置了系统提示词,告诉模型要做什么。所在地、活动与天气将被注入其中。以下是流程的最后部分:
以下是与该智能体的示例交互:
从回复中可以看到,由于代码节点的加入,智能体不仅能提供天气信息,还能在规划活动时加以考虑。
由于流程的设置方式,如果用户在第一条消息中就直接提供了信息,智能体会直接给出当天的行程计划。
定义自定义问候语
您可能注意到,智能体会先向用户发送一条问候消息:
要启用此功能,我们需要激活 Conversation Opener 功能。
Dify 工具
在本教程中,我们学习了 Dify 的基础构建模块。还有一个方面尚未涉及:工具(Tools)。
在 Dify 中,工具是强大的扩展,使您的 AI 智能体能够突破语言模型的限制,与外部世界交互。虽然 LLM 能基于训练数据和提示上下文进行推理并生成回答,但它无法实时访问在线数据或外部服务。
工具通过让智能体发起 API 调用、查询数据库、执行计算、检索文档等,充当 AI 与外部信息源之间的桥梁,从而解决这一问题。
您可以通过平台的可视化界面配置工具,指定工具类型(如 HTTP 请求、代码解释器或第三方插件)、输入/输出模式以及身份验证要求。配置完成后,这些工具可通过 Tool 模块在智能体流程中使用,您可以在模块间传递数据,并将结果馈送至 LLM 节点或其他逻辑模块。
这不仅让您的智能体更“聪明”,也更具行动力,能够通过与真实世界服务交互,提供最新、具上下文相关性的答案。
在我们的示例中,我们使用了代码模块请求天气 API。另一种做法是创建一个工具,并将该工具提供给 LLM 使用。
结语
在本教程中,我们探索了开始使用 Dify 所需的一些基础模块。不过,Dify 还有许多功能与能力有待发掘。
为加深理解,一个很好的练习是对我们创建的旅行助手进行增强。例如,加入互联网搜索能力以在线发现本地活动,从而丰富智能体的功能并提供更具动态性的建议。
如果您对像 Dify 这样的 AI 智能体搭建工具感兴趣,推荐继续阅读我们的其他教程: