从生成到通知:用 Dify 搭一条能跑起来的自动化工作流(含源码)
Dify 工作流自动化教程|附源码
在 AI 应用落地过程中,“能不能做”往往不是最大问题,真正的瓶颈是:能不能稳定地把多个步骤串起来,形成可复用、可维护、可扩展的自动化流程。
Dify 的工作流(Workflow)正是为此而生。
如果你已经厌倦了“发一条指令,AI 回一个结果”这种一次性对话模式,那么工作流会让你看到另一种可能:
- 自动读取输入
- 调用模型生成内容
- 做条件分支
- 接入数据库 / Webhook / 第三方系统
- 输出结构化结果
- 形成真正可上线的自动化应用
本文将以一个“内容生成 + 审核 + 通知”的实际场景为例,手把手讲清楚 Dify 工作流怎么搭建,并附上可直接参考的源码示例,帮助你快速做出第一条可用的自动化流程。
一、什么是 Dify 工作流?
Dify 工作流可以理解为一条“AI 自动化流水线”。
它不是单轮聊天,而是由多个节点组成的任务图,每个节点负责一个步骤,例如:
- 开始节点:接收用户输入
- LLM 节点:让模型完成分类、改写、总结、生成
- 条件分支节点:根据结果走不同路径
- 代码节点:做格式转换、字段清洗、逻辑处理
- HTTP 请求节点:调用外部 API
- 结束节点:输出最终结果
你可以把它想象成“AI 版的 n8n / Zapier + Prompt 编排”。
工作流适合什么场景?
常见场景包括:
-
内容生产自动化
- 标题生成
- 文章润色
- SEO 关键词扩展
- 社媒文案批量生成
-
办公流程自动化
- 用户提交表单后自动总结
- 自动分类工单
- 自动生成会议纪要
-
客服与运营
- 问题意图识别
- FAQ 自动回复
- 投诉内容摘要并通知负责人
-
企业系统集成
- 与飞书、企业微信、钉钉联动
- 与 CRM、工单系统、数据库联动
- 与 Webhook、API 服务联动
二、本文要实现的示例:自动生成内容并发送通知
为了让文章更落地,我们做一个实战案例:
用户输入一段产品信息或文章素材 → Dify 自动生成一篇营销文案 → 判断文案是否达标 → 达标则返回结果,不达标则重新优化 → 最后通过 Webhook 发送到飞书/企业微信。
这个流程非常适合:
- 新媒体团队
- 电商运营
- 产品运营
- 独立开发者
- 接单做 AI 自动化项目的人
这个案例的价值在于,它不仅能“生成”,还体现了工作流最核心的能力:自动判断 + 自动分支 + 自动通知。
三、开始前你需要准备什么?
在开始之前,建议准备以下内容:
- 一个可用的 Dify 环境(云端或自建均可)
- 一个支持调用的大模型配置
- 一个可接收通知的 Webhook 地址
- 基本的 API 调用知识
- 对提示词工程有一点了解
如果你是初学者,也没关系,下面的步骤会尽量写得足够细。
四、Dify 工作流搭建步骤
1)新建工作流应用
进入 Dify 控制台后:
- 点击 创建应用
- 选择 Workflow(工作流)
- 输入应用名称,例如:
内容自动生成器 - 进入工作流编辑界面
这时你会看到一个默认的工作流画布,通常包括:
- Start
- LLM
- End
我们接下来要做的是把它扩展成完整的自动化流程。
2)设计输入变量
先定义工作流的输入参数。
例如我们希望用户传入:
topic:主题style:风格target_audience:目标受众length:字数要求
你可以把这些变量都放到 Start 节点里,让后续节点统一调用。
示例输入:
{
"topic": "Dify 工作流自动化教程",
"style": "专业、实用、面向开发者",
"target_audience": "想学习 AI 自动化的技术人员",
"length": 1200
}
3)配置 LLM 节点:生成初稿
LLM 节点是整个工作流的核心。
这里我们让模型根据输入内容生成一段营销文案或文章初稿。
提示词示例:
你是一名资深内容运营专家,擅长将原始素材整理为高质量的中文营销文案。
请根据以下信息生成一篇内容:
- 主题:{{topic}}
- 风格:{{style}}
- 目标受众:{{target_audience}}
- 字数要求:{{length}}
要求:
1. 语言自然流畅,结构清晰;
2. 突出产品价值和用户收益;
3. 如信息不足,请合理补全,但不要胡编乱造;
4. 输出为适合直接发布的中文文案。
这里的关键点是:
输入变量要明确,输出要求要明确,模型角色要明确。
4)增加代码节点:做结果检查
很多时候,LLM 输出不一定完全符合预期。
比如:
- 字数不够
- 没有包含重点信息
- 格式不规范
这时可以加一个代码节点,对模型结果做简单校验和处理。
示例 Python 代码
def main(content: str, min_length: int = 800):
result = {
"pass": True,
"reason": "",
"content": content
}
if not content or len(content.strip()) < min_length:
result["pass"] = False
result["reason"] = f"内容长度不足,当前长度:{len(content.strip()) if content else 0}"
return result
这个节点会输出:
pass: 是否通过reason: 不通过原因content: 原始内容
5)增加条件分支节点
接下来,根据代码节点的结果进行判断:
- 如果
pass = true,则进入下一步通知 - 如果
pass = false,则重新回到 LLM 节点优化内容
这样就形成了一个简单的“自动纠错”闭环。
分支逻辑示例:
- 通过分支:发送结果
- 失败分支:增强提示词重新生成
这个思路特别重要,因为它让 AI 从“单次生成工具”升级成了“自动工作系统”。
6)配置 HTTP 请求节点:发送飞书通知
如果你希望工作流真正接入业务,就不能只停留在 Dify 内部。
最常见的做法是通过 HTTP 请求节点,把结果发送到飞书、企业微信、Slack 或自建服务。
飞书 Webhook 示例
飞书群机器人通常提供一个 Webhook 地址,你可以直接 POST 消息。
请求体示例:
{
"msg_type": "text",
"content": {
"text": "Dify 自动生成任务已完成:\n{{content}}"
}
}
HTTP 节点配置要点
- 请求方法:
POST - Content-Type:
application/json - 请求地址:你的飞书 Webhook
- 请求体:使用上一步输出的内容变量
7)结束节点:返回最终结果
最后在 End 节点输出:
- 生成内容
- 校验结果
- 通知状态
这样,整个工作流就闭环了。
五、一个完整的工作流逻辑图
你可以把流程理解成如下结构:
Start
↓
LLM:生成初稿
↓
Code:检查长度与格式
↓
Condition:是否通过?
├─ 是 → HTTP 请求:发送通知 → End
└─ 否 → 回到 LLM:优化重写 → 再检查
这个结构虽然简单,但已经具备很多真实业务场景中的核心特征:
- 可重复执行
- 可自动纠错
- 可接入外部系统
- 可扩展更多节点
六、附源码:Dify API 调用示例
很多人搭好工作流后,下一步就想把它接入自己的系统。
下面给你一份可以直接参考的 Python 调用示例。
1)Python 调用 Dify Workflow API
说明:以下示例用于调用 Dify 的工作流接口,适合集成到你自己的后端服务中。
import requests
import json
DIFY_API_URL = "https://api.dify.ai/v1/workflows/run"
DIFY_API_KEY = "你的Dify API Key"
def run_workflow(topic, style, target_audience, length):
headers = {
"Authorization": f"Bearer {DIFY_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"inputs": {
"topic": topic,
"style": style,
"target_audience": target_audience,
"length": length
},
"response_mode": "blocking",
"user": "demo-user-001"
}
response = requests.post(DIFY_API_URL, headers=headers, json=payload, timeout=120)
response.raise_for_status()
return response.json()
if __name__ == "__main__":
result = run_workflow(
topic="Dify 工作流自动化教程",
style="专业、实用、适合技术读者",
target_audience="AI 工具学习者",
length=1500
)
print(json.dumps(result, ensure_ascii=False, indent=2))
2)FastAPI 封装成一个对外接口
如果你想把 Dify 工作流包装成一个业务 API,可以这样做:
from fastapi import FastAPI
from pydantic import BaseModel
import requests
app = FastAPI()
DIFY_API_URL = "https://api.dify.ai/v1/workflows/run"
DIFY_API_KEY = "你的Dify API Key"
class WorkflowRequest(BaseModel):
topic: str
style: str
target_audience: str
length: int
@app.post("/generate")
def generate(req: WorkflowRequest):
headers = {
"Authorization": f"Bearer {DIFY_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"inputs": req.model_dump(),
"response_mode": "blocking",
"user": "api-user"
}
resp = requests.post(DIFY_API_URL, headers=headers, json=payload, timeout=120)
resp.raise_for_status()
return resp.json()
这样你就可以把 Dify 工作流变成一个标准 API,接入:
- 网站后台
- 小程序
- CRM 系统
- 自动化脚本
- 内部运营平台
七、进阶技巧:让工作流更像“生产系统”
如果你只是玩一玩,基础流程已经够用了。
但如果你要真正上线,建议继续优化下面几个点。
1)给每个节点明确职责
不要让一个 LLM 节点同时负责:
- 分类
- 生成
- 改写
- 审核
最好拆成多个节点,各司其职,这样更稳定,也更容易调试。
2)输出尽量结构化
建议让模型输出 JSON 或固定格式,方便后续节点处理。
例如:
{
"title": "xxx",
"summary": "xxx",
"keywords": ["AI", "Dify", "自动化"],
"content": "正文内容..."
}
3)保留中间结果
在复杂流程里,建议把每一步的输出都保存下来。
这样一旦结果异常,排查会非常快。
4)加上异常处理
例如:
- API 超时怎么办
- 模型输出空内容怎么办
- 分支判断失败怎么办
真正的自动化系统,核心不是“成功时多漂亮”,而是“失败时是否可恢复”。
八、常见问题
Q1:Dify 工作流和聊天应用有什么区别?
聊天应用更适合对话式交互;工作流更适合流程化、自动化、可编排的任务。
Q2:工作流能接数据库吗?
可以,通常通过 HTTP 请求节点或代码节点对接你自己的后端服务,再由后端去操作数据库。
Q3:能不能让工作流自动循环?
可以通过条件分支和节点回跳实现,但要注意避免死循环,建议设置最大重试次数。
Q4:适合做哪些业务?
内容生成、客服摘要、工单分类、数据清洗、报告生成、通知推送、表单自动处理,都很适合。
九、一个实用建议:先做“小而美”的工作流
很多人一上来就想做:
- 多模型路由
- 多工具调用
- 多轮记忆
- 数据库检索
- 自动审批
结果画布越画越大,最后难以调试。
我的建议是:
先从“单输入 → 单输出 → 单通知”开始。
比如先做:
- 输入主题
- 生成内容
- 校验长度
- 发飞书通知
这个流程跑通后,再逐步加入:
- 分类
- 重写
- 评分
- 审核
- 多渠道分发
你会发现,真正靠谱的 AI 自动化,不是一次性做得很大,而是一步一步做得很稳。
十、总结
Dify 工作流的价值,不只是“让 AI 会写东西”,而是让 AI 真正融入业务流程。
它能把模型能力、提示词、业务逻辑、外部系统整合在一起,形成一个可执行、可维护、可扩展的自动化系统。
本文通过一个“内容生成 + 校验 + 通知”的案例,展示了 Dify 工作流的基本搭建方法,并附上了 Python API 调用源码和 FastAPI 封装示例。你可以直接拿去改造自己的业务场景。
如果你是:
- 想学习 AI 自动化的开发者
- 想把 Dify 用到实际业务中的运营人员
- 想快速搭建 AI 工作流产品的创业者
那么最好的方式,不是只看教程,而是立刻动手搭一个最小可用版本。
先跑通,再优化;先闭环,再扩展。
如果你愿意,我还可以继续帮你写一篇:
- 《Dify 工作流实战:自动生成公众号文章并发布》
- 《Dify + 飞书自动化:从表单到通知全流程搭建》
- 《Dify 工作流源码详解:节点编排、变量传递与 API 接入》
你只要回复一个标题,我可以继续写成同风格的高质量长文。