🚀 从 Prompt 到 Workflow:2026 年 AI 工程师的“军备竞赛”

在 2026 年的 AI 圈子,流传着这样一句话:只会写 Prompt 的是“用户”,能编排 Workflow 的才是“开发者”。

很多人问:GPT 已经这么强了,为什么还要学 Dify?

真相很残酷: 靠单一对话框实现的 AI 始终是“概率性的黑盒”。当你想让 AI 稳定地调用音乐 API、精准地计算星座运势、并在毫秒间吐出精美的 Markdown 卡片时,你需要的不是更长的提示词,而是确定性的工作流编排

今天,我将复盘我这一个月在 Dify 平台踩过的所有坑,手把手带你搭建一个商业级的 AI 智能体。从 HTTP 请求的“接力棒”机制,到 Python 代码节点的“数据手术刀”,这篇文章将是你 2026 年最值得收藏的 AI 开发路线图。


1. 从 ChatBot 到 Workflow:AI 应用的形态演变

早期的 AI 应用大多是简单的 ChatBot(聊天机器人),它们依赖单一的提示词来完成任务。但随着业务复杂度的提升,开发者发现单纯靠聊天的模糊性无法解决确定性的业务逻辑。

AI 应用的形态演变经历了以下三个阶段:

  • 阶段 1:点对点对话 —— 基础的 Q&A,依赖模型原生能力。
  • 阶段 2:RAG(检索增强生成) —— 引入外部知识库,让 AI 说话更有据可依。
  • 阶段 3:Workflow(工作流编排) —— 将复杂的任务拆解为多个确定性的节点。通过 HTTP 请求 获取实时数据、通过 Python 代码 提取核心字段、再通过 LLM 进行智能润色。

2026 年的共识是:AI 不再只是“聊天工具”,而是能够串联 API、处理复杂逻辑的“数字员工”。


2. Dify 的核心优势:为什么它是开发者的首选?

在众多的编排平台中,Dify 脱颖而出,其核心竞争力在于:

🎨 可视化编排(低门槛与高上限)

Dify 提供了极致流畅的画布体验。你可以像拼乐高一样,通过拖拽 开始、HTTP 请求、LLM、代码执行 等节点来构建逻辑。 这种可视化方式极大降低了复杂逻辑的理解成本,同时允许你在关键环节插入 Python 或 Node.js 代码,保证了开发的上限。

🔌 强大的插件与节点生态

无论是调用外部的音乐 API、星座 API,还是进行复杂的 JSON 数据解析,Dify 都有成熟的节点支撑。 特别是其 JSON 解析模板转换 节点,能让原始、杂乱的数据在秒级内转化为精美的视觉名片。

🛠️ 极低的学习与部署成本

Dify 支持私有化部署,对于企业级开发者来说,数据隐私得到了完美保障。对于个人开发者,其简洁的 UI 让你可以专注于业务逻辑,而非繁琐的基础设施搭建。


3. 巅峰对决:Dify vs. Coze

很多同学会问:“Dify 和 Coze(扣子)到底怎么选?”

虽然两者都是顶级编排工具,但在定位上有着显著差异:

维度 Dify (本项目采用) Coze (字节跳动)
开源属性 完全开源,支持私有化部署。 闭源 SaaS,生态高度绑定。
灵活性 极高。支持深度自定义 Python 代码,对开发者非常友好。 较高。侧重于插件集成,更适合非技术人员快速上手。
数据隐私 开发者完全掌控数据流向。 数据托管在云端。
适用场景 企业级内部应用、需要深度逻辑定制的复杂项目。 快速构建社交媒体机器人(如飞书、微信、Discord)。

总结: 如果你追求可控性、私有化以及深度逻辑定制(比如我们后面要实现的星座匹配专家和音乐搜索助手),Dify 是绝对的王者。

一、 核心概念:拆解 Dify 工作流的“乐高积木”

在 Dify 的世界里,编排一个 AI 应用不再是编写成百上千行的面条代码,而是像搭积木一样,将不同的节点 (Node) 按照业务逻辑连接起来。理解了节点和变量流转,你就掌握了 Dify 的底层逻辑。

1. 什么是节点 (Node)?任务的基础单元

节点是组成工作流的最小功能模块,是任务执行的基础单元。

你可以把每一个节点想象成一块拥有特定功能的“乐高积木”:有的负责发起网络请求,有的负责运行 Python 脚本,有的则负责调动大模型进行思考。通过将这些功能单一的积木组合在一起,就能构建出处理复杂业务逻辑的强大系统。


2. 变量流转的逻辑:“接力棒”机制

如果说节点是积木,那么变量 (Variable) 就是连接这些积木的粘合剂。在 Dify 工作流中,数据流转遵循一种类似“接力棒”的机制:

  • 输入与输出: 每一个节点都会接收上一级传递过来的数据(输入),处理完成后,再将结果输出给下一个节点。
  • 跨节点引用: 你可以在后续节点中通过 {{node_name.variable_name}} 的语法,精准引用前面任何一个节点产生的数据。
  • 数据隔离与安全: 这种机制确保了数据的线性流转,每个节点只需关注自己拿到的“接力棒”,无需担心全局状态的混乱。

3. 常用节点概览:你的工具箱里都有啥?

在实战中,以下几类节点是你最常打交道的“核心成员”:

节点名称 核心职能 实战应用场景
开始 (Start) 接收用户输入,定义初始变量。 获取用户想要搜索的 music_name
HTTP 请求 模拟浏览器或服务器发起 API 调用。 对接 QQ 音乐或星座运势第三方接口获取原始数据。
代码执行 运行自定义 Python/Node.js 代码。 使用 json.loads() 清洗数据,解决转义字符问题。
LLM (大模型) 逻辑推理、文本生成、数据格式化。 对原始 JSON 数据进行语义化提取或生成智能点评。
模板转换 利用 Jinja2 语法进行 Markdown 排版。 将散乱的变量(歌曲、歌手、链接)组合成精美的播放卡片。
直接回复 将最终处理结果呈现给终端用户。 在对话框中输出最终的音乐搜索结果或运势报告。

💡 作者的话

理解了这套“积木”和“接力棒”的逻辑,你就已经推开了 AI 工作流开发的大门。

二、 基础篇:HTTP 请求节点——连接外部世界的“感官”

如果说 Dify 工作流是一个大脑,那么 HTTP 请求节点 就是它的“眼、耳、口、鼻”。它负责走出 Dify 的小世界,去第三方 API 调取实时数据——无论是搜索一首周杰伦的《晴天》,还是查询今日的星座运势,都离不开它。


这是官方的接口文档示例和请求api的案例·介绍
在这里插入图片描述

1. 配置详解:Method 选择与 URL 填写规范

在 Dify 的 HTTP 请求节点中,顶部的 API 配置区是整个请求的“收货地址”和“寄送方式”。
在这里插入图片描述

Method (请求方法)
  • GET (获取):这是最常用的方法。比如我们的“星座配对查询”和“音乐搜索”,本质上都是向服务器索取信息。
  • POST (提交):当我们需要向服务器发送大量数据、上传文件或进行更安全的身份验证时,通常使用 POST。
URL (接口地址)

URL 必须是完整且准确的路径。

  • 规范写法:例如星座接口 http://apis.juhe.cn/xzpd/query
  • 避坑指南:不要在这里直接手动拼接参数(如 ?key=xxx),虽然可行,但不利于后续的变量维护。

2. 参数传递 (PARAMS):如何实现“动态注入”

这是新手最容易卡壳的地方,也是让 AI “动起来”的关键。

什么是 PARAMS?

在 GET 请求中,参数通常以键值对的形式存在。观察我们之前的配置截图:

  • 键 (Key):必须严格对应第三方 API 文档的要求。例如星座 API 要求 menwomen 字段。
  • 值 (Value):这里就是体现“工作流”价值的地方。我们不写死一个星座,而是通过 变量引用
动态注入技巧

在 Dify 中,点击值输入框右侧的 变量符号,你可以引用“开始节点”中定义的变量:

  • 操作:将 {{sys.query}}{{music_name}} 填入值的框内。
  • 效果:当用户输入“巨蟹座”时,节点会自动将其转化成 .../query?men=巨蟹座 发送出去。

3. 进阶配置:鉴权、超时与重试

为了保证请求的稳定性和安全性,这三个设置是高级开发者的必修课。

Header (请求头) 鉴权

有些 API 需要验证你的身份。

  • 常见场景:在 HEADERS 中添加 Authorization 或 API 提供商要求的 key
  • Content-Type:通常设置为 application/json,告诉服务器我们期望的数据格式。
超时设置 (Timeout)

API 并不是永远秒回的。

  • 建议值:建议设置在 10-30 秒。对于响应较慢的音乐搜索接口,设置过短会导致频繁报错。
失败重试 (Retry)

互联网环境很复杂。

  • 实战配置:建议开启失败重试,并将 最大重试次数设置为 3 次。这样即使遇到短暂的网络波动,系统也会自动“帮你在试一下”,极大地提升了用户体验。

4. 输出变量:接力棒的“交接仪式”

请求成功后,你会得到类似 bodystatus_codeheaders 的输出。

  • body (响应内容):这是我们的核心数据所在,通常是一串带有转义字符(如 \")的 JSON 字符串。
  • status_code (状态码):看到 200 代表大功告成!
  • 在这里插入图片描述

在这里插入图片描述


💡 作者的话

恭喜你!到这一步,你的工作流已经能够成功从外部世界带回数据了。虽然带回来的数据可能还像“原始矿石”一样混杂着各种转义符(乱码),但别担心。

在下一章【进阶篇】中,我们将深入探讨“数据清洗与转换”。我会教你如何利用 JSON 解析节点和 Python 代码节点,将这些原始矿石精炼成闪闪发光的结构化数据。

三、 进阶篇:数据清洗与转换——告别乱码与转义符

当你成功通过 HTTP 节点拿到返回数据时,你可能会发现结果并不“漂亮”。返回的 body 通常是一个包含了大量反斜杠(如 \")和换行符(如 \n)的原始字符串。

这种“原始矿石”无法直接被 LLM 或用户优雅地阅读。因此,数据清洗是 AI 工作流中不可或缺的环节。在 Dify 中,我们有两条路可选:JSON 解析节点Python 代码执行节点


1. JSON 解析节点:零代码的路径提取

对于结构简单的 JSON 数据,JSON 解析节点是最快的选择。

  • 核心语法:使用标准的 JSONPath 语法(以 $. 开头)来定位数据。
  • 实战避坑:一定要注意“文本模式”与“列表模式”的区别。如果你在配置时遇到 Value error, value must be a list 的报错,通常是因为你在文本框里写错了语法。切换到列表模式通过 UI 勾选变量是最稳妥的办法。

2. Python 代码执行节点:低代码开发的“手术刀”

💡 专家秘籍:为什么在 Dify 里,代码节点是“万能钥匙”?

很多同学纠结是选择“JSON 解析”还是“Python 代码”。

听我的:如果数据层级超过 3 层,或者存在 \" 转义符,直接上 Python!

为什么?因为 json.loads() 是标准化的“暴力美学”。它可以瞬间识别并消除所有让 LLM 抓狂的反斜杠,将原始矿石直接炼成黄金。这不仅是效率,更是系统的健壮性。

核心语法:json.loads() 的魔力

在 Python 中,json.loads() 函数可以将字符串类型的 JSON 转化为 Python 字典。它会自动识别并消除字符串中的转义符(如 \"),将数据还原为纯净的字典格式。

变量映射:inputsreturn 的一一对应原则

这是新手最容易报错的地方。Dify 的代码节点运行遵循极其严格的验证逻辑:

  1. 输入变量 (Inputs):你在左侧面板定义的变量名(如 json_body),必须作为 main 函数的参数传入。
  2. 输出变量 (Return):你在左侧面板定义的“输出变量”列表,必须在代码最后的 return 字典里找到对应的键。
  • 报错警示:如果返回的字典里多了一个键或少了一个键,系统会弹出红色的 Not all output parameters are validated

3. 星座匹配专家:全功能 Python 源码解析

以下是我们实战中使用的完整 Python 脚本。它不仅完成了反序列化,还实现了字段的安全提取和初步的排版。

Python

import json  # 导入 Python 自带的 JSON 处理模块

# 这里的参数名必须和你在左侧“输入变量”里定义的变量名一致
def main(json_body: str):
    try:
        # 1. 反序列化:将带转义符的 body 字符串转为 Python 字典
        # json.loads 会自动处理掉那些令人头疼的 \" 和 \n
        data_dict = json.loads(json_body)
        
        # 2. 定位到 result 核心数据层
        result = data_dict.get("result", {})
    except Exception as e:
        # 如果解析失败,返回空值防止流程中断
        return {
            "output": f"解析失败: {str(e)}",
            "man": "", "woman": "", "score": "", "advice": "", "tips": "", "jieguo": ""
        }

    # 3. 按照你的要求提取数据
    # .get("键名", "默认值") 是最安全的写法,防止 API 缺字段导致崩溃
    man_const = result.get("men", "未知")          # 男方星座
    woman_const = result.get("women", "未知")      # 女方星座
    zhishu = result.get("zhishu", "0")             # 配对指数
    jieguo = result.get("jieguo", "无评价")        # 结果标签
    lianai = result.get("lianai", "暂无建议")      # 恋爱解析
    zhuyi = result.get("zhuyi", "无注意事项")      # 注意事项

    # 4. 构造一个用于直接展示的汇总字符串 (formatted_output)
    formatted_output = (
        f"🌟 【{man_const}】 & 【{woman_const}】\n"
        f"📊 配对指数:{zhishu}%\n"
        f"📝 核心评价:{jieguo}\n"
        f"--- \n"
        f"💡 建议:{lianai}"
    )

    # 5. 返回结果:这里的键(如 "man")必须对应你左侧定义的“输出变量”名
    return {
        "output": formatted_output,
        "man": man_const,
        "woman": woman_const,
        "score": zhishu,
        "advice": lianai,
        "jieguo": jieguo,
        "tips": zhuyi
    }

在这里插入图片描述

💡 作者的话

通过代码节点,我们已经把杂乱无章的原始数据“驯服”成了规整的变量。

五、 美学篇:模板转换 (Template)——打造精美视觉名片

AI 提取的数据虽然精准,但一堆“冷冰冰”的变量直接展示给用户,交互体验是非常枯燥的。如何将这些变量包装成精美的卡片,让你的 AI 应用拥有“大厂级”的 UI?这就是 模板转换 (Template) 节点的用武之地。


1. Jinja2 语法入门:变量引用与 Markdown 渲染

Dify 的模板转换节点内置了强大的 Jinja2 模板引擎,它允许开发者通过极其简洁的语法实现复杂的文本排版。

  • 变量引用 ({{}}):这是模板节点的灵魂。通过双大括号包裹变量名,例如 {{man}},节点在运行时会自动将其替换为流程中传递过来的实时数据。
  • Markdown 渲染:模板节点完美支持标准的 Markdown 语法。你可以使用 # 定义各级标题、> 创建引用块、--- 插入分割线。通过合理的布局,原本杂乱的文字信息会被转化为充满层次感的“视觉名片”。

2. 实战案例:星座运势报告的视觉排版技巧

以我们的“星座匹配专家”项目为例,我们将展示如何通过模板转换将 Python 清洗出的变量(manwomanscore 等)聚合为一张高质量的报告卡片。

A. 参数绑定 (接力棒的最后一次传递)

在配置模板转换节点时,首先需要在 “输入变量” 区域点击 “+” 号。根据我们在 Python 代码执行节点 中定义的输出,将 manwomanscoreadvicetipsjieguo 等变量逐一引入。

B. 编写精美排版源代码

在节点的“代码”框(支持 Jinja2)中输入以下源码:

Markdown

# 🌟 星座配对报告:{{man}} & {{woman}}

---

### 📊 契合指数:**{{score}}%**
> **专家鉴定**:`{{jieguo}}`

---

#### 💌 恋爱解析
{{advice}}

---

#### ⚠️ 相处建议
> {{tips}}

---
C. 核心排版技巧拆解
  1. Emoji 图标点缀:在标题前加入 🌟📊 等图标,能有效降低文字阅读的疲劳感,特别适合移动端和社交场景展示。
  2. 引用块 (Blockquote) 重点隔离:使用 > 符号包裹“专家鉴定”和“相处建议”。在渲染后,这些内容会以不同的背景色或左侧边线呈现,引导用户瞬间抓取核心结论。
  3. 粗体与行内代码块:对配对分值进行加粗处理 **{{score}}%**,对专家鉴定内容使用反引号包裹 jieguo。这些细节的修饰,能显著提升信息的易读性和专业度。

💡 作者的话

模板转换节点是 Dify 工作流中的“整容医生”。它成功解决了数据在“确定性”与“美观度”之间的平衡问题。至此,我们的数据流、逻辑流和展示层已经全部打通。
在这里插入图片描述
在这里插入图片描述

💡 结语:AI 工程师的下一站

当你看到“星座匹配专家”完美地从后台调取数据、处理逻辑并吐出那张漂亮的视觉名片时,你其实已经跨越了 AI 开发者的分水岭。

从此,AI 在你手中不再是一个只会聊天的“电子宠物”,而是一个能连接外部世界、能处理复杂逻辑、能产生确定性价值的“数字合伙人”

AI 工作流不是终点,而是你创造力的起点。

接下来的进阶之路,你可以尝试引入 Agent 智能体循环 或是 RAG 知识库检索。如果你在搭建过程中遇到了 value must be a list 或是 429 配额限制,不要沮丧,回头看看我这篇文章的“故障排查”章节。

世界正在重塑,而你手中握着遥控器。


✍️ 作者简介: 我这里是[心枢AI研习社],一名致力于让 AI 落地更简单的开发者。如果这篇教程帮到了你,请毫不吝啬地点赞、收藏、评论

📢 互动时刻: 你的第一个 Dify 工作流打算实现什么功能?欢迎在评论区告诉我,我抽 3 位同学进行深度 Debug 指导!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐