Dify 快速入门
Dify 快速入门
本文整理自 Dify 官方文档,涵盖 快速入门 章节的全部内容。
本章内容
介绍
原文:介绍
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
⚠️ ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考英文原版。
Dify 是一个用于构建 AI 工作流的开源平台。通过在可视化画布上编排 AI 模型、连接数据源、定义处理流程,直接将你的领域知识转化为可运行的软件。
快速开始数分钟内开始构建强大的应用
概念核心 Dify 构建模块解释
自部署在你的笔记本电脑 / 服务器上安装 Dify
论坛与社区交流心得
更新日志查看过往版本的更新内容
教程 Dify 用例示例演练
💡 Dify 这个名字来自DoItForYou。
核心概念
原文:核心概念
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
⚠️ ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考英文原版。
Dify 应用 Dify 专为智能体应用构建而设计。在Studio中,你可以通过拖拽界面快速构建智能体工作流并将其发布为应用。你可以通过 API、Web 或作为MCP 服务器访问已发布的应用。Dify 提供两种主要的应用类型:工作流和对话流。在创建新应用时,你需要选择一种应用类型。
💡 我们推荐选择工作流或对话流作为你的应用类型。但除了这些之外,Dify 还提供 3 种更基础的应用类型:聊天机器人、智能代理和文本生成器。
这些应用类型在底层运行相同的工作流引擎,但提供了更简单的传统界面:
工作流构建工作流应用来处理单轮任务。Web 应用界面和 API 提供了便捷的批量执行多个任务的访问方式。
💡 在底层,工作流构成了 Dify 中所有其他应用类型的基础。
你可以指定如何以及何时启动工作流。有两种类型的开始节点:
用户输入和触发器开始节点是互斥的——它们不能在同一画布上使用。要在它们之间切换,请右键单击当前开始节点 >更改节点。或者,删除当前开始节点并添加一个新节点。
⚠️ 只有由用户输入启动的工作流才能发布为独立的 Web 应用程序或 MCP 服务器,通过后端服务 API 公开,或在其他 Dify 应用程序中用作工具。
对话流对话流是一种特殊类型的工作流应用,在对话的每一轮都会被触发。除了工作流功能外,对话流还具有存储和更新自定义对话特定变量的能力,在大型语言模型节点中启用记忆功能,并在对话流运行的不同节点流式传输格式化的文本、图像和文件。
与工作流不同,对话流不能使用触发器来启动。
Dify 领域特定语言所有 Dify 应用都可以导出为 Dify 自有领域特定语言的 YAML 文件,你也可以直接从这些领域特定语言文件创建 Dify 应用。这使得将应用移植到其他 Dify 实例并与他人分享变得容易。
变量变量是存储信息的标记容器,因此你可以通过引用其名称来查找和使用该信息。在构建 Dify 应用时,你会遇到不同类型的变量:
输入:你可以在用户输入节点为你的应用最终用户指定任意数量的输入变量来填写。
此外,用户输入节点还带有一组输入变量,你可以在流程中稍后引用。根据应用程序类型(工作流或对话流),会提供不同的变量。
- 工作流
- 对话流:first-child
(p)] [&>:first-child (p)_img] [&> data-table-wrapper ]:!pt-0” data-component-part=“tab-content”> 变量名数据类型描述注释sys.user_idString 用户 ID:系统在用户使用工作流应用程序时自动分配给每个用户的唯一标识符。用于区分不同的用户。sys.app_idString 应用程序 ID:系统自动分配给每个应用程序的唯一标识符。此参数用于记录当前应用程序的基本信息。此参数用于具有开发能力的用户区分和定位不同的工作流应用程序。sys.workflow_idString 工作流 ID:此参数记录当前工作流应用程序中所有节点的信息。此参数可供具有开发能力的用户用于跟踪和记录工作流中包含的节点信息。sys.workflow_run_idString 工作流运行 ID:用于记录工作流应用程序的运行时状态和执行日志。此参数可供具有开发能力的用户用于跟踪应用程序的历史执行记录。sys.timestampNumber 每次工作流执行的开始时间。:first-child(p)] [&>:first-child (p)_img] [&> data-table-wrapper ]:!pt-0 hidden” data-component-part=“tab-content”> 变量名数据类型描述注释sys.conversation_idString 聊天框交互会话的唯一 ID,将所有相关消息分组到同一对话中,确保 LLM 在相同的主题和上下文中继续聊天。sys.dialogue_countNumber 用户与对话流应用程序交互期间的对话轮次数。每次聊天轮次后计数自动增加 1,可与 if-else 节点结合使用以创建丰富的分支逻辑。例如,LLM 将在第 X 个对话轮次时审查对话历史并自动提供分析。sys.user_idString 为每个应用程序用户分配一个唯一 ID,以区分不同的对话用户。服务 API 不共享 WebApp 创建的对话。这意味着具有相同 ID 的用户将在 API 和 WebApp 界面之间具有单独的对话历史记录。sys.app_idString 应用程序 ID:系统自动分配给每个应用程序的唯一标识符。此参数用于记录当前应用程序的基本信息。此参数用于具有开发能力的用户区分和定位不同的工作流应用程序。sys.workflow_idString 工作流 ID:此参数记录当前工作流应用程序中所有节点的信息。此参数可供具有开发能力的用户用于跟踪和记录工作流中包含的节点信息。sys.workflow_run_idString 工作流运行 ID:用于记录工作流应用程序的运行时状态和执行日志。此参数可供具有开发能力的用户用于跟踪应用程序的历史执行记录。用户输入在每次工作流运行开始时设置,无法更新。
输出:每个节点产生一个或多个输出,可以在后续节点中引用。例如,大型语言模型节点有以下输出:
与输入一样,节点输出也无法更新。
环境变量:使用环境变量来存储你应用特定的敏感信息,如 API 密钥。这允许在密钥和 Dify 应用本身之间进行清晰分离,因此在分享你的应用领域特定语言时,你不必承担暴露密码和密钥的风险。环境变量也是常量,无法更新。
会话变量(仅对话流):这些变量是对话特定的——意味着它们在单个对话的多轮对话流运行中持续存在,因此你可以存储和访问动态信息,如待办事项列表和令牌成本。你可以通过变量分配器节点更新会话变量的值:
变量引用在配置输入字段时,你可以通过从下拉菜单中选择,轻松将变量传递给任何节点:
你还可以通过键入/斜杠并从下拉菜单中选择所需变量,将变量值插入到复杂的文本输入中。
30 分钟快速入门
原文:30 分钟快速入门
Documentation IndexFetch the complete documentation index at:https://docs.dify.ai/llms.txt
⚠️ ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考英文原版。
这个分步教程将带你从零开始创建一个多平台内容生成器。
除了基本的 LLM 集成,你还将发现如何使用强大的 Dify 节点来更快、更轻松地编排复杂的 AI 应用程序。
在本教程结束时,你将拥有一个工作流,它可以接受你提供的任何内容(文本、文档或图像),添加你偏好的语音和语调,并生成针对你选择语言的精美的、特定平台的社交媒体帖子。
完整的工作流如下所示。在构建过程中,可以随时参考它以保持正轨,并了解所有节点如何协同工作。
开始之前 1 登录 Dify Cloud
前往Dify Cloud免费注册。
Sandbox 计划的新账户包含 200 条消息额度,可用于调用 OpenAI、Anthropic 和 Gemini 等提供商的模型。
💡 消息额度为一次性分配,不会按月续费。
2 设置模型供应商
前往设置>模型供应商,安装 OpenAI 插件。本教程使用gpt-5.2作为示例。
如果你使用 Sandbox 额度,则无需 API 密钥——插件安装后即可直接使用。你也可以配置自己的 API 密钥来替代使用。
3 配置默认模型
在模型供应商页面的右上角,点击系统模型设置。
将系统推理模型设置为
gpt-5.2。这将成为工作流中的默认模型。
步骤 1:创建新工作流
前往工作室,然后选择从空白创建>工作流。
将工作流命名为
多平台内容生成器,然后点击创建。你将自动进入工作流画布开始构建。选择用户输入节点以开始我们的工作流。
步骤 2:编排与配置
⚠️ 保持未提及的设置为默认值。
💡 为节点和变量提供清晰、描述性的名称,使它们更容易识别和引用。
1. 收集用户输入:用户输入节点
💡 首先,我们需要定义从用户那里收集什么信息来运行我们的内容生成器,例如草稿文本、目标平台、期望的语调以及任何参考材料。
用户输入节点是我们可以轻松设置这些的地方。我们在这里添加的每个输入字段都会成为所有下游节点可以引用和使用的变量。
点击用户输入节点,打开其配置面板,然后添加以下输入字段。
参考材料 - 文本
字段类型:
段落变量名:
draft标签名:
草稿最大长度:
2048必填:
是参考材料 - 文件字段类型:
文件列表变量名:
user_file标签名:
上传文件 (≤ 10)支持文件类型:
文档、图片上传文件类型:
两者最大上传数量:
10必填:
否语音和语调字段类型:
段落变量名:
voice_and_tone标签名:
语音与语调最大长度:
2048必填:
否目标平台字段类型:
短文本变量名:
platform标签名:
目标平台 (≤ 10)最大长度:
256必填:
是语言要求字段类型:
选择变量名:
language标签名:
语言选项:
English日本語简体中文必填:
是
2. 识别目标平台:参数提取器节点
💡 由于我们的平台字段接受自由格式的文本输入,用户可能会以各种方式输入:
x 和 linkedIn、在 Twitter 和 LinkedIn 上发布,甚至Twitter + LinkedIn please。
然而,我们需要一个干净、结构化的列表,如["Twitter", "LinkedIn"],下游节点可以可靠地使用。
这正是参数提取器节点的完美工作。在我们的场景中,它使用 gpt-5.2 模型来分析用户的自然语言,识别所有这些变化,并输出标准化的数组。
在用户输入节点之后,添加一个参数提取器节点并配置它:
在输入变量字段中,选择
User Input/platform。添加一个提取参数:
名称:
platform类型:
Array[String]描述:
The platform(s) for which the user wants to create tailored content.必填:
是在指令字段中,粘贴以下内容来引导 LLM 进行参数提取:
INSTRUCTION
`# TASK DESCRIPTIONParse platform names from input and output as a JSON array.
## PROCESSING RULES-Support multiple delimiters: commas, semicolons, spaces, line breaks, "and", "&", "|", etc.-Standardize common platform name variants (twitter/X→Twitter, insta→Instagram, etc.)-Remove duplicates and invalid entries-Preserve unknown but reasonable platform names-Preserve the original language of platform names
## OUTPUT REQUIREMENTS-Success: ["Platform1", "Platform2"]-No platforms found: [No platforms identified. Please enter a valid platform name.]
## EXAMPLES-Input: "twitter, linkedin" → ["Twitter", "LinkedIn"]-Input: "x and insta" → ["Twitter", "Instagram"]-Input: "invalid content" → [No platforms identified. Please enter a valid platform name.]`💡 注意,我们已指示 LLM 为无效输入输出特定的错误消息,这将在下一步中作为我们工作流的结束触发器。
3. 验证平台提取结果:IF/ELSE 节点
💡 如果用户输入了无效的平台名称,比如
ohhhhhh或BookFace怎么办?我们不想浪费时间和令牌生成无用的内容。
在这种情况下,我们可以使用 IF/ELSE 节点创建一个分支,提前停止工作流。我们将设置一个条件来检查参数提取器节点的错误消息;如果检测到该消息,工作流将直接路由到输出节点并结束。
在参数提取器节点之后,添加一个 IF/ELSE 节点。
在 IF/ELSE 节点的面板上,定义IF条件:
IFParameter Extractor/platform包含No platforms identified. Please enter a valid platform name.
在 IF/ELSE 节点之后,向 IF 分支添加一个输出节点。
在输出节点的面板上,将
Parameter Extractor/platform设置为输出变量。
4. 按类型分离上传的文件:列表操作器节点
💡 我们的用户可以上传图像和文档作为参考材料,但这两种类型在使用
gpt-5.2时需要不同的处理:图像可以通过其视觉能力直接解释,而文档必须先转换为文本,模型才能处理。
为了管理这一点,我们将使用两个列表操作器节点来过滤和将上传的文件分成单独的分支——一个用于图像,一个用于文档。
在 IF/ELSE 节点之后,向 ELSE 分支添加两个并行的列表操作器节点。
将一个节点重命名为
图像,另一个重命名为文档。配置图像节点:
将
User Input/user_file设置为输入变量。启用过滤条件:
{x}type在Image。配置文档节点:
将
User Input/user_file设置为输入变量。启用过滤条件:
{x}type在Doc。
5. 从文档中提取文本:文档提取器节点
💡
gpt-5.2不能直接读取像 PDF 或 DOCX 这样的上传文档,因此我们必须先将它们转换为纯文本。
这正是文档提取器节点所做的。它将文档文件作为输入,并为下一步输出干净、可用的文本。
在文档节点之后,添加一个文档提取器节点。
在文档提取器节点的面板上,将
Document/result设置为输入变量。
6. 整合所有参考材料:LLM 节点
💡 当用户同时提供多种参考类型——草稿文本、文档和图像时,我们需要将它们整合成一个连贯的摘要。
LLM 节点将通过分析所有分散的片段来处理此任务,创建一个指导后续内容生成的综合上下文。
在文档提取器节点之后,添加一个 LLM 节点。
将图像节点也连接到这个 LLM 节点。
点击 LLM 节点进行配置:
将其重命名为
整合信息。启用VISION并将
Image/result设置为视觉变量。在系统指令字段中,粘贴以下内容:
`# ROLE & TASKYou are a content strategist. Analyze the provided draft and reference materials (if any), then create a comprehensive content foundation for multi-platform social media optimization.
# ANALYSIS PRINCIPLES-Work exclusively with provided information—no external assumptions-Focus on extraction, synthesis, and strategic interpretation-Identify compelling and actionable elements-Prepare insights adaptable across different platforms
# REQUIRED ANALYSISDeliver structured analysis with:
## 1. CORE MESSAGE-Central theme, purpose, objective-Key value or benefit being communicated
## 2. ESSENTIAL CONTENT ELEMENTS-Primary topics, facts, statistics, data points-Notable quotes, testimonials, key statements-Features, benefits, characteristics mentioned-Dates, locations, contextual details
## 3. STRATEGIC INSIGHTS-What makes content compelling/unique-Emotional/rational appeals present-Credibility factors, proof points-Competitive advantages highlighted
## 4. ENGAGEMENT OPPORTUNITIES-Discussion points, questions emerging-Calls-to-action, next steps suggested-Interactive/participation opportunities-Trending themes touched upon
## 5. PLATFORM OPTIMIZATION FOUNDATION-High-impact: Quick, shareable formats-Professional: Business-focused discussions-Community: Interaction and sharing-Visual: Enhanced with strong visuals
## 6. SUPPORTING DETAILS-Metrics, numbers, quantifiable results-Direct quotes, testimonials-Technical details, specifications-Background context available`- 点击添加消息来添加一条用户消息,然后粘贴以下内容。输入
{或/将Doc Extractor/text和User Input/draft替换为列表中对应的变量。
USER
`Draft: User Input/draftReference material: Doc Extractor/text`7. 为每个平台创建定制内容:迭代节点
💡 现在整合的参考和目标平台已准备就绪,让我们使用迭代节点为每个平台生成定制的帖子。
该节点将遍历平台列表并为每个平台运行子工作流:首先分析特定平台的风格指南和最佳实践,然后基于所有可用信息生成优化的内容。
在整合信息节点之后,添加一个迭代节点。
在迭代节点内部,添加一个 LLM 节点并配置它:
将其重命名为
识别风格。在系统指令字段中,粘贴以下内容:
`# ROLE & TASKYou are a social media expert. Analyze the platform and provide content creation guidelines.
# ANALYSIS REQUIREDFor the given platform, provide:
## 1. PLATFORM PROFILE-Platform type and category-Target audience characteristics
## 2. CONTENT GUIDELINES-Optimal content length (characters/words)-Recommended tone (professional/casual/conversational)-Formatting best practices (line breaks, emojis, etc.)
## 3. ENGAGEMENT STRATEGY-Hashtag recommendations (quantity and style)-Call-to-action best practices-Algorithm optimization tips
## 4. TECHNICAL SPECS-Character/word limits-Visual content requirements-Special formatting needs
## 5. PLATFORM-SPECIFIC NOTES-Unique features or recent changes-Industry-specific considerations-Community engagement approaches
# OUTPUT REQUIREMENTS-For recognized platforms: Provide specific guidelines-For unknown platforms: Base recommendations on similar platforms-Focus on actionable, practical advice-Be concise but comprehensive`- 点击添加消息来添加一条用户消息,然后粘贴以下内容。输入
{或/将Current Iteration/item替换为列表中对应的变量。
USER
`Platform: Current Iteration/item`在识别风格节点之后,添加另一个 LLM 节点并配置它:
将其重命名为
创建内容。在系统指令字段中,粘贴以下内容:
`# ROLE & TASKYou are an expert social media content creator. Generate publication-ready content that matches platform guidelines, incorporates source information, and follows specified voice/tone and language requirements.
# LANGUAGE REQUIREMENT-Generate ALL content exclusively in the target language specified in the user message. You MUST write the entire post in that language, regardless of the language of any source materials.-No mixing of languages whatsoever-Adapt platform terminology to the target language
# CONTENT REQUIREMENTS-Follow platform guidelines exactly (format, length, tone, hashtags)-Integrate source information effectively (key messages, data, value props)-Apply voice & tone consistently (if provided)-Optimize for platform-specific engagement-Ensure cultural appropriateness for the specified language
# OUTPUT FORMAT-Generate ONLY the final social media post content. No explanations or meta-commentary. Content must be immediately copy-paste ready.-Maximum heading level: ## (H2) - never use # (H1)-No horizontal dividers: avoid ---
# QUALITY CHECKLIST✅ Platform guidelines followed✅ Source information integrated✅ Voice/tone consistent (when provided)✅ Language consistency maintained✅ Engagement optimized✅ Publication ready`- 点击添加消息来添加一条用户消息,然后粘贴以下内容。输入
{或/将所有输入替换为列表中对应的变量。
USER
`Platform Name: Current Iteration/itemTarget Language: User Input/languagePlatform Guidelines: Identify Style/textSource Information: Integrate Info/textVoice & Tone: User Input/voice_and_tone`- 启用结构化输出。
💡 这使我们能够以更可靠的方式从 LLM 的响应中提取特定信息,这对于下一步格式化最终输出至关重要。
在输出变量旁边,将结构化切换为开启。
structured_output变量将出现在下方。点击配置。在弹出的架构编辑器中,点击右上角的从 JSON 导入,并粘贴以下内容:
`{"platform_name":"string","post_content":"string"}`点击迭代节点进行配置:
将
Parameter Extractor/platform设置为输入变量。将
Create Content/structured_output设置为输出变量。启用并行模式并将最大并行度设置为
10。
💡 这就是为什么我们在用户输入节点的目标平台字段的标签名称中包含了
(≤10)。
8. 格式化最终输出:模板节点
💡 迭代节点为每个平台生成一个帖子,但其输出是原始数据数组(例如,
[{"platform_name": "Twitter", "post_content": "..."}]),不太可读。我们需要以更清晰的格式呈现结果。
这就是模板节点的用武之地——它允许我们使用Jinja2模板将这些原始数据格式化为组织良好的文本,确保最终输出用户友好且易于阅读。
在迭代节点之后,添加一个模板节点。
在模板节点的面板上,将
Iteration/output设置为输入变量并命名为output。粘贴以下 Jinja2 代码:
`{% for item in output %}# 📱 {{ item.platform_name }}{{ item.post_content }}
{% endfor %}`{% for item in output %}/{% endfor %}:遍历输入数组中的每个平台-内容对。{{ item.platform_name }}:显示平台名称作为带有手机表情符号的 H1 标题。{{ item.post_content }}:显示为该平台生成的内容。{{ item.post_content }}和{% endfor %}之间的空行在最终输出中为各平台之间添加间距。
💡 虽然 LLM 也可以处理输出格式化,但它们的输出可能不一致且不可预测。对于不需要推理的基于规则的格式化,模板节点以更稳定可靠的方式完成任务,且成本为零令牌。
LLM 非常强大,但知道何时使用正确的工具是构建更可靠和经济高效的 AI 应用程序的关键。
9. 将结果返回给用户:输出节点
- 在模板节点之后,添加一个输出节点。
- 在输出节点的面板上,将
Template/output设置为输出变量。
步骤 3:测试你的工作流现在已完成!让我们测试一下。
确保你的检查列表已清除。
对照开头提供的参考图检查你的工作流,确保所有节点和连接都匹配。
点击右上角的运行测试,填写输入字段,然后点击开始运行。
如果你不确定要输入什么,可以尝试以下示例输入:
草稿:
We just launched a new AI writing assistant that helps teams create content 10x faster.上传文件:留空
语音与语调:
Friendly and enthusiastic, but professional目标平台:
Twitter and LinkedIn语言:
English
成功运行后会生成格式化的输出,每个平台有一个单独的帖子,如下所示:
⚠️ 你的结果可能会因使用的模型不同而有所差异。能力更强的模型通常会产生更高质量的输出。
💡 要测试节点对来自先前节点的不同输入的反应,你不需要重新运行整个工作流。只需点击画布底部的查看缓存变量,从列表中找到要更改的变量,然后编辑其值。
如果遇到任何错误,请检查相应节点的最后运行日志以确定问题的确切原因。
步骤 4:发布和共享一旦工作流按预期运行并且你对结果感到满意,点击发布>发布更新使其生效并可共享。
💡 如果你稍后进行任何更改,请始终记住再次发布,以便更新生效。
