在实际搭建Dify工作流时,条件分支节点往往是决定业务逻辑能否顺畅跑通的核心——例如用户提问自动分流、风控等级动态路由、多角色权限跳转等真实场景。一旦条件配置错误,流程便会卡死在判断点,或者始终走默认路径,导致前功尽弃。下面将配置要点与避坑指南系统梳理一遍。
添加与配置基础条件节点
在Dify工作流画布的空白处点击「+」,然后从节点列表中选择「Condition」拖入画布。接着,将前序节点(如Trigger或LLM)的输出线连接到这个Condition节点的输入口。这一步操作并不复杂,但后续的配置细节容易被遗漏。
双击Condition节点,右侧会弹出配置面板。在「Condition Expression」输入框中,根据需求编写判断表达式。例如:【{{input.question.includes("退款") || input.question.includes("退货")}}】。随后分别在「True Branch」和「False Branch」的下拉菜单中指定对应的目标节点,比如“售后处理”和“通用应答”。
需要注意的是,配置完成后一定要点击保存按钮,否则刷新页面后所有设置都会丢失——这是不少新手常遇到的陷阱。
设置多分支路径与优先级顺序
单个Condition节点其实支持多条分支,适合处理三类及以上意图的场景。这里提供三种常见方法:
方法一:在配置面板右上角点击「+ Add branch」按钮,输入新分支名称(例如“VIP用户”),然后在Condition Expression中写入【{{input.user_level in ["vip", "premium"]}}】,再指定目标节点。重复该操作,即可添加其他分支。
方法二:一次性将所有路径写在一个switch-style结构里。但顺序至关重要——系统按照从上到下的顺序匹配,第一个为真的分支立即生效,后续分支不再评估。因此必须将最具体、优先级最高的条件放在最前面,例如先判断“admin”,再判断“editor”,最后才是“viewer”。
方法三:为避免所有条件都不满足导致流程中断,最后一个分支务必勾选「Default branch」选项,作为兜底路径。这是提升健壮性的基本功。
编写高阶条件表达式
当上游LLM返回的是结构化JSON数据时,比如{"intent":"payment","confidence":0.92,"entity":{"order_id":"ORD-7890"}},表达式不能简写为intent == "payment",而需要用JSONPath语法精准提取字段。正确的写法是:【{{output.intent == "payment" && output.confidence > 0.85}}】,否则会报变量未定义的错误。
组合逻辑运算符可以完成更复杂的判断。例如,同时校验用户状态与时间窗口:{{input.status == "active" && now() | date("HH") | int >= 9 && now() | date("HH") | int < 18}}。其中now()是Dify内置函数,用于获取当前时间戳。
处理数组类型成员判断时,务必确认左侧变量确实是数组。如果实际是字符串,需要先用split()转换,比如{{input.tags.split(",") in ["urgent", "high"]}}。这个细节很容易被忽略,但正是条件不生效的常见原因。
调试条件分支是否生效
配置完成后,点击工作流右上角的「Test」按钮,输入测试数据,比如{"question":"我要退货","user_level":"vip"}。然后在执行日志中找到Condition节点的输出行,查看「Evaluated condition」的值是true还是false,以及「Jumped to」指向的节点名是否与预期一致。
如果日志显示「No matching branch found」,说明所有条件表达式求值结果均为false,且未设置Default branch。此时需要回头检查表达式是否写错,或者变量路径是否正确。
建议每条分支都单独测试一次,不要只测一个样本就认为所有通路正常——条件分支的逻辑往往比看上去更复杂,多跑几组测试案例总没坏处。

