Agent Workflow 学习向:If/Else 节点,按条件互斥走真假两支
上一篇LLM 节点用 prompt 生成文本默认 stub可选真实模型相关02 最小工作流 API · 04 Code 节点示例仓库flow-forge本篇讲图第一次从「一条直线」变成「按条件二选一」——If/Else 节点求值布尔条件后只走 true 或 false 出边另一支上的节点本次运行不会执行。先说结论前五篇里的图几乎都是单后继每个节点最多一条出边Runner 顺着走到底。真实工作流常要「分数够了走及格文案不够走不及格文案」。本篇补的是控制流不是新的「算内容」节点对比以前线性本篇If/Else出边数量普通节点仍最多 1 条if-else恰好 2 条怎么选下一家唯一后继看条件真走true假走false另一支无本次不执行互斥不是并行配置字段—data.condition 边上的source_handle一句话If/Else 让 Runner 能「岔路口选一边」一次运行只走一支假分支上的节点不会出现在成功事件里。HTTP 仍是 create → run → events。变的是图结构与 Runner 选边规则。1. 为什么需要 If/Else只有直线时你只能用 Template/Code/LLM 改「写出什么」改不了「下一步去哪」。对照 Dify 一类产品If/Else专门负责互斥分支。本仓 changeif-else-node故意不做并行两条支路同时跑再汇合——那是另一类调度问题。术语是什么本仓怎么用If/Else 节点求值条件并选择出边data.type: if-elsedata.condition条件一段返回真/假的短代码必须result 布尔值如result score 60source_handle出边贴在节点的哪个「出口」上取值只能是true或false互斥一次只选一条路另一条路上的节点本次不跑2. 功能一图里怎么配2.1 节点条件写法{id:if_1,data:{type:if-else,condition:result score 60}}片段在干什么score来自运行inputs或上游变量score 60比较运算结果是真或假result ...固定约定必须把布尔结果赋给result与 Code 的result同套路但这里必须是 bool校验condition非空、长度上限约 1KB静态禁止import/open等与 Code 同源安全边界。2.2 边必须成对带 handle从 if-else 出去的两条边都要写source_handle且恰好一个true、一个false{edges:[{id:e0,source:start_1,target:if_1},{id:e1,source:if_1,target:tpl_true,source_handle:true},{id:e2,source:if_1,target:tpl_false,source_handle:false},{id:e3,source:tpl_true,target:end_1},{id:e4,source:tpl_false,target:end_1}]}缺一条 handle、或两条都标成true创建图时就会被拒绝。结构示意start → if-else ─┬─(true)→ template「pass」 → end └─(false)→ template「fail」 → end两条支路可以汇合到同一个end本示例就是也可以各自接不同终点。3. 功能二跑起来选哪一支Runner 走到 if-else 时白话在受控环境里执行data.condition取出布尔result若为真 → 只沿source_handle: true的边继续假 → 只沿false普通节点仍禁止多出边只有 if-else 允许「两条边里选一」事件照常记node_started/node_succeeded未选中分支上的节点不会出现在事件列表里输入条件score 60走哪支典型输出{score: 80}真tpl_true→ endtext为pass{score: 40}假tpl_false→ endtext为fail条件不是 bool例如误写result 1、缺变量、语法错 → Runfailed与其它节点失败同一套观测方式。和「并行」差在哪互斥 If/Else本篇并行本仓尚未做同时执行几条支路1多条事件里会不会两边节点都出现不会会若做了Runner 怎么选边按 handle 选一要 fan-out / joinREADME 里写明「不是并行」就是为了避免把两条出边理解成「两边一起跑」。4. 你怎么跟跑方式 A浏览器联调页起好apiweb左侧换成SAMPLE_IF_ELSE_GRAPH先用{score: 80}运行 → 应看到pass事件里有tpl_true、没有tpl_false再改成{score: 40}→ 应看到fail事件里有tpl_false、没有tpl_true方式 B文档与自动化约定见api/README.md的 If/Else 小节cd api uv run pytest覆盖真/假支、缺 condition、缺 false 边、非 bool 失败等HTTP 契约不变换的只是图 JSON。5. 仓库地图位置本篇职责core/workflow/graph.py允许if-else边字段source_handle校验 true/false 成对core/workflow/nodes/if_else.py受控求值result必须为 boolcore/workflow/runner.pyif-else 按 handle 选后继其它节点仍禁多出边web/lib/sample.ts/lib/api.ts示例图边类型带上可选source_handle读代码建议先跟跑真假两次输入 → 对照 events 里出现了哪些node_id→ 再打开runner.py里「选边」那几行。本篇顺带认识的词词先怎么记和本篇的关系布尔bool只有真 / 假两种取值条件的result必须是这种「大于或等于」比较示例score 60handle句柄节点出口的名字标签source_handle: true/false互斥多选一不能同时选与并行相对result ...把结果放进名为 result 的格子与 Code 同约定这里必须是 bool和前作怎么接篇补哪一段02 最小工作流线性调度 单出边04 Code 节点受控result …模式05 LLM 节点生成类节点本篇控制流互斥双出边07 并行分支fan-out / join顺序模拟下一篇并行分支fan-out 多出边与 join 汇合顺序模拟你可以从这里带走什么工作流要「改路径」而不只是「改内容」需要If/Else 这类控制流节点。契约三件套condition→ 布尔result→ 带source_handle的成对出边。互斥 ≠ 并行一次运行只执行一支用 events 里的node_id就能验证。条件求值复用 Code 的受控边界避免另造一套 DSL。Runner 对「普通节点单出边 / if-else 选 handle」的区分是以后扩展并行时的明确边界。仓库与相关文档GitHubhttps://github.com/jimchou-h/flow-forgeIf/Else 说明api/README.md条件求值nodes/if_else.py图校验与边 handlegraph.py调度选边runner.pyWeb 示例图web/lib/sample.ts欢迎 Star、Issue 和 PR。_本文基于 Flow Forgeif-else-node覆盖互斥条件分支、source_handle与真假路径验证。