一,AI工作流 从概念到工具全景

1.1 什么是AI工作流

在生成式AI的早期实践中,许多开发者将大语言模型视为一个高度通用的推理引擎,期望通过不断优化Prompt来覆盖复杂业务需求。然而,随着应用场景走向真实生产环境,“单点调用”的模式逐渐暴露出稳定性与可控性不足的问题-1

行业实践正在形成一个共识:真正让系统完成从模型能力到工程能力跃迁的,不是更大的参数规模,而是工作流(Workflow)的引入-1

那么,什么是AI工作流?

从形式化定义来看,大模型工作流可定义为一个六元组 W = (T, A, D, R, M, S),其中:

  • T:任务集合,包含原子任务与复合任务
  • A:动作集合,每个任务对应工具调用动作
  • D:数据依赖集合,表示任务间的输入输出关系
  • R:资源约束集合,定义CPU/内存/QPS等限制
  • M:记忆接口,规范与记忆系统的交互方式
  • S:状态集合,表示工作流的执行状态-7

通俗地说,AI工作流是将一个复杂的业务目标,通过可视化的方式拆解为一系列可执行、可追踪的原子任务节点,并定义节点之间的数据流转与逻辑关系。这种设计的本质,是为大模型的概率输出引入“工程护栏”,避免其在长链路任务中因语义漂移而失控-1

工作流在智能体系统中扮演着三类关键角色-1

角色 作用
逻辑编排层 提供条件分支、循环回退、状态管理等控制结构,使任务具备可预测的执行路径
资源调度层 将工具能力与具体任务节点绑定,限制每个阶段可见的工具范围,降低决策复杂度
风险控制层 在关键节点引入人工确认、自动评估、重试机制,拦截长链路累积误差

1.2 工作流 vs AI Agent:厘清概念边界

在实际讨论中,工作流与AI Agent常被混为一谈,但两者解决的是完全不同的问题-9

对比维度 工作流 (Workflow) AI Agent
控制范式 显式控制流,遵循预定义步骤 隐式目标驱动,动态决策
任务表示 BPMN/DMN等形式化定义 自然语言/奖励函数
环境交互 预定义API接口 动态探索,试错学习
可验证性 支持模型检测,行为可追溯 黑箱决策,难以形式化验证
适用场景 结构化任务:数据处理、流程审批 非结构化任务:创意生成、复杂决策
触发方式 特定事件或时间表 持续监控,自主决定行动时机-9

一个实用的认知是:对于日常面临的大多数自动化问题,工作流可以满足约80%的需求,而无需引入Agent的复杂性-9。在实际系统中,两者也常采用混合架构:将Agent作为工作流中的特殊节点,处理非结构化的决策任务-7

1.3 主流AI工作流工具全景对比

当前市场上的AI工作流平台主要分为四类:开源自部署型商业化SaaS型大厂生态型以及垂直领域专用型-6。下面针对你关注的Dify、n8n、ComfyUI、扣子(Coze)四个工具进行深度对比。

1.3.1 Dify:低代码AI应用开发平台

核心定位:Dify是一个融合BaaS(后端即服务)与LLMOps理念的开源平台,目标是将AI应用开发从“手工作坊”升级为“标准化流水线”-8

技术架构:采用“模型层-工具链层-应用层”三层架构-2

  • 模型层:集成主流大模型(OpenAI、Claude、Llama、通义千问等200+),支持私有化部署
  • 工具链层:包含数据标注、模型微调、性能评估等开发工具
  • 应用层:通过可视化界面与API接口,支持快速构建业务场景

核心优势

  • 上手速度快:拖拽式工作流设计,10分钟可上线一个客服机器人-8
  • 功能完整:预置RAG(检索增强生成)能力,自动处理文档分块、向量化存储-8
  • 企业级特性:RBAC权限控制、AES-256加密、审计日志,满足合规要求-8
  • 社区活跃:GitHub Star 5.4万,文档与案例完善-8

适用场景:需要快速验证AI应用的中小企业、希望将AI能力融入业务的传统企业、对数据安全有要求的私有化部署场景-2-6

1.3.2 n8n:开源自动化之王

核心定位:n8n是国外最流行的开源自动化平台之一,通过直观的可视化节点编辑器,让用户连接各种应用和服务-3。它的设计哲学是“fair-code”——代码透明、可自部署、无厂商锁定-6

技术特点

  • 400+集成:覆盖数据库、API、云服务、SaaS应用-3
  • 节点化设计:每个节点代表一个操作,连线表示数据流向-9
  • 强定制性:支持JavaScript自定义逻辑,可深度修改-3
  • 数据主权:所有数据流转在企业可控范围内-6

独特优势

  • 2000+现成模板:开源社区提供了大量即用型工作流模板,可一键导入-9
  • 可视化调试:实时监控、错误处理能力强,可精确调试问题-9
  • 与向量数据库集成:支持Pinecone、PGVector、Milvus等,可构建RAG应用-3-9

典型应用:某开发者用n8n为开源书籍搭建问答机器人,自动监听GitHub release,同步更新向量库,集成到官网提供对话服务-3

适用场景:有技术团队、对数据安全要求极高的企业;需要深度定制、避免厂商锁定的项目;复杂的系统集成场景-6

1.3.3 ComfyUI:AI生成的工作流神器

核心定位:ComfyUI是最强大的开源节点式生成式AI应用,支持创建图像、视频及音频内容-10。它将复杂的生成过程分解为可视化的模块化组件,使用户能够精确控制生成流程的每个环节-4

设计理念:基于**数据流(Dataflow)**架构,每个节点代表一个特定操作(如CLIP文本编码、VAE解码、ControlNet处理),节点间的连线表示数据传递路径-4

核心能力

  • 完全可视化编程:通过拖拽节点创建复杂工作流,无需编写代码-10
  • 全模型支持:SD1.x、SD2.x、SDXL,以及各种ControlNet、LoRA、超网络-10
  • 状态持久化:从生成的PNG文件可完整加载工作流(含种子)-10
  • 资源友好:支持低显存运行(–lowvram参数),甚至纯CPU模式-10

交互设计

  • 节点拖放创建与连接
  • 节点组(Node Groups)用于逻辑分组
  • 工作流模板保存与加载
  • 节点状态的实时可视化-4

适用场景:AI绘画创作者、需要精细控制生成过程的设计师、研究生成模型的技术人员。

1.3.4 扣子(Coze):字节生态的AI工作流平台

核心定位:扣子是字节跳动旗下的AI Agent平台,2026年1月升级至2.0版本,定位是帮助更多职场人使用AI-5

2.0核心能力

能力 说明
Agent Skills 封装“场景最佳实践+所需工具”为可复用技能模块,用户可一键安装使用-5
Agent Plan “长期计划”能力,将需要数小时甚至数天完成的宏观目标分解为多步骤持续执行,主动汇报-5
Agent Office 深度理解职场场景,支持写战略报告Word、做分析PPT、梳理数据Excel-5
Agent Coding Vibe Coding开发平台,通过连续对话即可构建智能体、工作流、网站、移动应用-5

独特优势

  • AI能力强:依托字节的AI技术积累
  • 多模态支持:图像、视频处理能力突出
  • 生态整合:与字节系产品无缝连接-6

适用场景:字节生态内的企业、需要多模态处理能力的场景、希望快速搭建AI应用的职场用户。

1.4 四款工具的选型建议

基于上述分析,可以给出以下选型参考:

场景 推荐工具 理由
快速构建AI应用(如客服机器人、知识库问答) Dify 可视化编排、预置RAG组件、10分钟上线-8
复杂系统集成、数据同步、自动化流程 n8n 400+集成、开源可控、2000+模板-3-9
AI绘画、精细控制生成过程 ComfyUI 节点化精确控制、全模型支持、工作流可复用-4-10
字节生态内应用、多模态处理、职场提效 扣子 Agent Skills/Plan、深度办公场景、Vibe Coding-5
对数据安全要求极高的企业 n8n / Dify私有化 完全自部署、数据本地留存-6-8

1.5 小结

AI工作流不是模型能力的附属配置,而是系统能够被部署、被维护、被信任的核心基础-1。它将概率输出转化为工程确定性,将复杂任务拆解为可执行的原子步骤,为LLM的应用落地提供了坚实的骨架。

Dify、n8n、ComfyUI、扣子这四款工具,分别代表了AI工作流在不同领域的最佳实践:Dify聚焦低代码AI应用开发,n8n深耕自动化集成,ComfyUI专攻生成式AI精细控制,扣子则依托字节生态打造职场智能助手。理解它们的定位与差异,是选择合适工具的第一步。

接下来的章节,我们将以Dify为核心,深入探讨如何从零构建一个完整的AI工作流应用。

二,Dify安装

克隆代码和配置

克隆代码

git clone https://github.com/langgenius/dify.git

cd dify/docker目录
修改.env文件

如果你电脑上80 443端口被占用了可以修改其他端口

EXPOSE_NGINX_PORT=8888
EXPOSE_NGINX_SSL_PORT=8443

如果你有一些输入是 epub,doc可能需要Unstructured服务,默认ETL_TYPE=dify,已经可以处理docx excel,pdf这些基础的类型了,基本够用,如果有需要可以配置这个 否则默认。
在这里插入图片描述

# ETL type, support: `dify`, `Unstructured`
# `dify` Dify's proprietary file extraction scheme
# `Unstructured` Unstructured.io file extraction scheme
# ETL_TYPE=dify
ETL_TYPE=Unstructured

# Unstructured API path and API key, needs to be configured when ETL_TYPE is Unstructured
# Or using Unstructured for document extractor node for pptx.
# For example: http://unstructured:8000/general/v0/general
UNSTRUCTURED_API_URL=https://api.unstructuredapp.io/general/v0/general
UNSTRUCTURED_API_KEY=你自己申请的key
SCARF_NO_ANALYTICS=true

申请地址:https://platform.unstructured.io/
在这里插入图片描述

docker-compose安装

请自行配置好本机docker和docker-compose环境,在docker目录打开cmd

docker-compose up -d

访问 http://localhost:8888/install 设置管理员账号和密码 即可登录。

三,文生图案例。

同个一个文生图案例熟悉常用的组件。

前置条件

先去https://build.nvidia.com/去申请一个图像生成key,搜索图片生成模型
在这里插入图片描述
我们使用其中的flux.dev和stable-diffusion-3-medium
在这里插入图片描述
点击右上角Get Api Key(这个是图形生成key),点击shell查看请求参数和路径
在这里插入图片描述
stable-diffusion例子

invoke_url='https://ai.api.nvidia.com/v1/genai/stabilityai/stable-diffusion-3-medium'

authorization_header="Authorization: Bearer $NVIDIA_API_KEY"
accept_header='Accept: application/json'
content_type_header='Content-Type: application/json'

data='{
  "prompt": "Vintage, steampunk-inspired airship soaring above a sprawling, Victorian-era cityscape, with intricate clockwork mechanisms and steam-powered engines",
  "cfg_scale": 5,
  "aspect_ratio": "16:9",
  "seed": 0,
  "steps": 50,
  "negative_prompt": ""
}'

response=$(curl --silent -i -w "\n%{http_code}" --request POST \
  --url "$invoke_url" \
  --header "$authorization_header" \
  --header "$accept_header" \
  --header "$content_type_header" \
  --data "$data"
)

http_code=$(echo "$response" | tail -n 1)

echo "$response" | awk '/{/,EOF-1'

输出格式base64图片

{
    "image": "/9j/4QkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ",
    "finish_reason": "SUCCESS",
    "seed": 31780493
}

flux.dev1调用例子

invoke_url='https://ai.api.nvidia.com/v1/genai/black-forest-labs/flux.1-dev'

authorization_header="Authorization: Bearer $NVIDIA_API_KEY"
accept_header='Accept: application/json'
content_type_header='Content-Type: application/json'

data='{
  "prompt": "a simple coffee shop interior",
  "mode": "base",
  "cfg_scale": 3.5,
  "width": 1024,
  "height": 1024,
  "seed": 0,
  "steps": 50
}'

response=$(curl --silent -i -w "\n%{http_code}" --request POST \
  --url "$invoke_url" \
  --header "$authorization_header" \
  --header "$accept_header" \
  --header "$content_type_header" \
  --data "$data"
)

http_code=$(echo "$response" | tail -n 1)

echo "$response" | awk '/{/,EOF-1'

输出格式base64图片,注意:artifacts是数组

{
    "artifacts": [
        {
            "base64": "hiR5jDFIatYok2UnyNpijdaPPVdSbjVdo6BUqWSimSaTplZQPRHS5ZEOEJypS/8AugFcp2QvKlh1QC4wLboXgZkbb8qAISJtnLfSHPOoSm8N6eULnWFtYGpn/9k=",
            "finishReason": "SUCCESS",
            "seed": 2198654932
        }
    ]
}

拿到调用例子作用, 后面在工作流可以加http请求节点就可以生成图像返回

案例完整图

在这里插入图片描述

输入节点(Start Node):工作流的起点

用户输入节点允许你定义从最终用户收集哪些内容作为应用程序的输入。
可以定义用户收入的字段,可以是各种类型。
我这里定义两个字段:

  • imageDesc 图片生成提示词,字符串。
  • model 模型类型,下拉框
    在这里插入图片描述
    下拉框可以设置选项
    在这里插入图片描述

大语言模型(LLM Node):文本处理节点

大型语言模型节点调用语言模型来处理文本、图像和文档。它向你配置的模型发送提示词并捕获其响应,支持结构化输出、上下文管理和多模态输入。

我这里因为flux和diffusion对中文支持不好,我用大语言模型对中文描述润色并且转换成英文

配置模型

点击用户logo
在这里插入图片描述
点击设置
在这里插入图片描述
点击模型提供商,在右上角输入OpenAI-API-compatible
在这里插入图片描述
如果这个插件没有安装 你就现在下面的dify市场选择并安装就可以了。
点击添加模型
在这里插入图片描述
我这里使用清华的bigmodel中的免费模型,自己去申请个key吧。
在这里插入图片描述

测试聊天

点击dify图标回到首页,点击创建空白应用
在这里插入图片描述
选择Chatflow,就取个名字就可以了,点击预览就可以聊天了,这样可以测试模型是否正常
在这里插入图片描述

配置图像提示语

回到主题 我们的llm在案例中是一个专业的图片描述生成器,在用户收入节点右侧的+号添加LLM
在这里插入图片描述
配置llm
在这里插入图片描述
SYSTEM描述:

你是一个专业的图片描述生成器。
任务步骤:
1. 根据用户提供的中文图片主题,结合'动漫风格、充满想象力'的特点,生成一段生动的中文图片描述(可适当增加场景、色彩、氛围等细节)。
2. 将生成的中文描述翻译成通顺的英文。
输出格式:仅输出英文描述即可。

在下面点击 + 添加消息,出现一个USER 输入/ 会有提示,选择输入节点的imageDesc变量
在这里插入图片描述
选择好后变成了一个图标+文字组合,标识是用户输入节点的变量imageDesc。
在这里插入图片描述

如果想删除两个节点间的连线 可以选择中间的线删除,如果想加上,在第一个节点右侧的+号上聚焦鼠标就变成了大的加号,按住鼠标左键,将线拖动到第二个节点时,第二个节点左右都会出现+号,拖动到第二个节点出现的+号上,释放鼠标就行了
在这里插入图片描述
选择结构化输出,自动将输出内容填充到text变量
在这里插入图片描述

条件分支(If-Else Node)

If-Else 节点通过根据你定义的条件将执行路由到不同路径,为你的工作流添加决策逻辑。它评估变量并确定你的工作流应该遵循哪个分支。
我这里根据mode字段的值判断调用flux还是diffusion;
llm右侧添加一个条件分支
在这里插入图片描述
配置条件分支
在这里插入图片描述
当你配置好 if else后 条件分支右侧就会有两个+ 如果有elseif就可能更多个 你可以将if+指向某个后续节点,也可以将else加入后续节点。
在这里插入图片描述

HTTP请求

HTTP 请求节点将你的工作流连接到外部 API 和 Web 服务。使用它来获取数据、发送 webhooks、上传文件,或与任何接受 HTTP 请求的服务集成。

因为我们之前已经在nvdia申请了文生图的key这里我就创建两个http请求分别调用flux
if+连接flux的http请求,else+连接diffsion的http请求。
flux请求
在这里插入图片描述
diffusion请求
在这里插入图片描述
http请求默认的格式化输出是在body变量中
在这里插入图片描述

JSON解析

dify支持拓展工具来支持各种场景。这里因为flux和diffusion返回的json格式 我们需要解析到变量中,可以安装一个插件(名字:JSON处理)
在diff工具中搜索并安装
在这里插入图片描述
flux请求右侧工具选择JSON解析
在这里插入图片描述
输入变量输入/选择前面http请求的body字段,JSON解析对象,如果是flux是artifacts数组,如果是diffusion是image
在这里插入图片描述
在这里插入图片描述
工具解析出的内容也会被写入一个text变量中,字符串类型
在这里插入图片描述

代码执行

由于flux返回结果artifacts是一个数组

{
    "artifacts": [
        {
            "base64": "hiR5jDFIatYok2UnyNpijdaPPVdSbjVdo6BUqWSimSaTplZQPRHS5ZEOEJypS/8AugFcp2QvKlh1QC4wLboXgZkbb8qAISJtnLfSHPOoSm8N6eULnWFtYGpn/9k=",
            "finishReason": "SUCCESS",
            "seed": 2198654932
        }
    ]
}

json解析无法处理这种数组的 我们可以使用代码执行组件去解析,在flux请求后的json解析添加一个代码执行
在这里插入图片描述
代码执行可以使用pyhon3 方法名称 main,可以定义多个输入参数,我这里输入上一个json解析返回的text 我就一个变量,最后输出一个字典 字典的变量可以定义这个节点输出变量
在这里插入图片描述
自此flux这一分支的代码执行输出了一个变量名result的base64字符串
difussion的json解析输出了一个变量名text的base64字符串。
我们需要将这两个分支聚合到一个变量输出图片显示。

变量聚合器

变量聚合器节点将来自不同执行路径的变量组合成单一的统一输出。当多个分支产生相似输出时,该节点通过创建一个一致的变量引用,消除了对重复下游处理的需求,可以指定多个分支变量输入,固定输出到output变量。
在这里插入图片描述
将两条分支的base64变量聚合到output输出。

base64编码解码

到此我们有了一个output的base64图片我们需要将他解码到文件
工具搜索并安装(Base64 编码解码)
在这里插入图片描述
在变量聚合器添加Base64编码解码工具
在这里插入图片描述
指定输入base64变量:
在这里插入图片描述
这里文件会被写入到输出变量files。

输出组件

定义工作流输出和终止点
在输出节点中,你可以通过添加输出变量(例如 LLM 的响应)来定义应从工作流返回给用户的数据。必须至少指定一个输出变量;否则,不会返回任何内容。

在这里插入图片描述
在输出变量定义一个名字右侧 输入/选择前一个节点的files

测试运行

点击右上交测试运行,输入开始节点生成图像描述,选择模型
在这里插入图片描述
点击开始运行 可以看到模型从第一个节点开始运行
在这里插入图片描述
输出了最终图片
在这里插入图片描述
点击追踪可以看到每个节点运行时间已经输入和输出,方便调试
看下llm节点输入和最终输出的是英文描述
在这里插入图片描述
数据处理

{
  "model_mode": "chat",
  "prompts": [
    {
      "files": [],
      "role": "system",
      "text": "你是一个专业的图片描述生成器。\n任务步骤:\n1. 根据用户提供的中文图片主题,结合'动漫风格、充满想象力'的特点,生成一段生动的中文图片描述(可适当增加场景、色彩、氛围等细节)。\n2. 将生成的中文描述翻译成通顺的英文。\n输出格式:仅输出英文描述即可。"
    },
    {
      "files": [],
      "role": "user",
      "text": "一只漂亮的大猩猩"
    }
  ],
  "usage": {
    "completion_price": "0",
    "completion_price_unit": "0",
    "completion_tokens": 428,
    "completion_unit_price": "0",
    "currency": "USD",
    "latency": 5.95,
    "prompt_price": "0",
    "prompt_price_unit": "0",
    "prompt_tokens": 85,
    "prompt_unit_price": "0",
    "time_to_first_token": 4.458,
    "time_to_generate": 1.491,
    "total_price": "0",
    "total_tokens": 513
  },
  "finish_reason": "stop",
  "model_provider": "langgenius/openai_api_compatible/openai_api_compatible",
  "model_name": "chatglm45"
}

输出

{
  "text": "Under the dreamy starry sky, a beautiful silver-furred gorilla sits elegantly atop an ancient temple. Its eyes sparkle with wisdom, as if it can see through the mysteries of the universe. The gorilla is adorned with magnificent golden decorations and wears a mysterious gemstone on its chest, emitting a soft glow. The surrounding clouds shimmer with rainbow colors, and distant mountains appear and disappear in the mist, creating a mysterious and dreamlike atmosphere. The gorilla's expression is gentle yet determined, extending one hand as if inviting viewers to explore this wonderful world together.",
  "reasoning_content": "",
  "usage": {
    "completion_price": "0",
    "completion_price_unit": "0",
    "completion_tokens": 428,
    "completion_unit_price": "0",
    "currency": "USD",
    "latency": 5.95,
    "prompt_price": "0",
    "prompt_price_unit": "0",
    "prompt_tokens": 85,
    "prompt_unit_price": "0",
    "time_to_first_token": 4.458,
    "time_to_generate": 1.491,
    "total_price": "0",
    "total_tokens": 513
  },
  "finish_reason": "stop"
}

四,导入导出。

配置的流程图可以导出为DSL格式,空白处右键:导出DSL
在这里插入图片描述
导入可以在工作流选择:导入DSL文件
在这里插入图片描述

五,开源dsl

以下是获取开源 Dify DSL 的主要渠道和类型:

  • https://github.com/wwwzhouhui/dify-for-dsl
  • https://github.com/svcvit/Awesome-Dify-Workflow
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐