Dify工作流基于有向无环图(DAG)的事件驱动图执行引擎构建,通过可视化节点编排实现AI能力的灵活组合,其中条件分支、循环迭代与变量传递是支撑复杂业务逻辑的三大核心机制,理解其底层设计是高效搭建工作流的关键。
条件分支:基于规则的动态流程路由
条件分支节点(If-Else)是工作流实现决策逻辑的核心组件,与依赖大模型意图识别的问题分类节点不同,它基于明确的布尔表达式判断流程走向,适用于权限校验、阈值判断、内容过滤等规则明确的场景。
节点支持IF、ELIF、ELSE三级分支结构,执行时按顺序判断条件,命中即跳转对应分支,所有条件均不满足则走ELSE兜底路径。条件配置支持丰富的判断类型:文本类包含/不包含/开头结尾匹配/精确相等/空值判断,数值类支持大小比较,多条件可通过AND(交集)或OR(并集)组合实现复杂逻辑。所有判断条件均可引用上游任意节点的输出变量,结合变量聚合器可将多分支输出统一为单一变量,避免下游节点需要适配不同分支的数据格式。
循环与迭代:两种差异化的重复执行模式
Dify提供迭代(Iteration)和循环(Loop)两种重复执行节点,二者底层逻辑完全不同,适用场景严格区分。
迭代节点是数据驱动的批量处理组件,输入必须为数组类型,会对数组中的每个元素独立执行相同的子流程,各轮次之间无状态依赖,输出结果同样为数组。它支持顺序执行(适配流式输出场景)和并行执行(最高10并发,适合无依赖的批量任务),提供终止、跳过失败、移除失败三种错误处理策略,默认单节点最大迭代100次。典型场景包括批量翻译文章段落、多文件内容提取、多链接数据爬取等互不影响的重复任务。
循环节点则是状态累积的渐进式执行组件,核心特征是每一轮执行都依赖上一轮的输出结果,通过循环变量维持跨轮次的状态。它支持for(固定次数/数组长度)和while(动态条件判断)两种模式,终止条件可以是自定义表达式、最大循环次数或显式退出节点,循环内不可嵌套其他循环/迭代节点。典型场景包括内容迭代优化、动态分页请求、需要基于前一轮结果决策的重试机制等。
变量传递:跨节点的数据流转体系
变量是工作流中数据流转的核心载体,Dify将变量分为四类:用户变量(开始节点定义的输入参数)、系统变量(sys.前缀的预设参数,如用户ID、应用ID)、环境变量(存储API密钥等敏感信息的只读变量)、会话变量(仅Chatflow可用,跨多轮对话存储的临时状态)。
变量传递遵循显式声明原则:所有跨节点数据必须通过画布连线建立依赖关系,下游节点通过节点ID+变量名的引用语法获取上游输出,禁止隐式传递。不同节点的变量作用域存在差异:主流程变量可被所有下游节点引用,迭代节点内置的当前元素、当前索引变量仅循环体内可用,循环节点的循环变量可在循环结束后被下游节点访问。当多分支输出需要统一引用时,可通过变量聚合器将不同分支的同功能变量合并为单一输出,简化下游配置。
这三大机制相互协同:变量传递为条件判断和循环执行提供数据基础,条件分支决定流程走向,循环节点处理重复任务,共同支撑从简单自动化到复杂AI应用的各类场景落地。