AutoGPT Condition(条件判断)Block 实战指南:基于比较运算符在 Agent 工作流中实现数据分支路由
条件判断是任何可编排工作流(Workflow)中都不可或缺的控制流原语。本指南以 AutoGPT Platform 内置的 Condition Block(条件判断块)为核心,完整讲解它的输入/输出契约、六种比较运算符的真实语义、字符串数值的自动转型行为,并结合源码实现与兄弟块 If Input Matches 给出可直接落地的分支路由方案。读完你将能够在 AutoGPT 图形化 Agent 中,用最小节点搭建"判断 → 走 Yes 分支 / No 分支"的可视化逻辑,并能准确理解该块底层求值行为与文档不一致的兜底细节。
一、Condition Block 是什么:AutoGPT 中的逻辑控制流组件
根据官方文档 branching.md 的定义,Condition Block 是一个逻辑(Logic)类组件:它在两个值之间执行一次比较运算,根据运算结果产生对应的分支输出。从功能定位看,它是 AutoGPT Platform 工作流里实现"规则化分支"的标准节点,属于整个逻辑类块家族(logic.md)中的一员,与 Calculator、Count Items、Data Sampling、Step Through Items、If Input Matches 等块并列。
它的落地实现位于平台后端 branching.py。源码中的关键元信息如下:
- 类名:
ConditionBlock,继承自块框架基类Block; - 所属分类:
BlockCategory.LOGIC(逻辑类); - 固定块 ID:
715696a0-e1da-45c8-b209-c2fa9c3b0be6(工作流持久化依赖该 ID 引用此块); - 块描述:
"Handles conditional logic based on comparison operators"。
在文档与产品形态层面,该块与另一个基于大模型(LLM)做判断的 AI Condition Block 相互补充:AI 条件块适合"语义化、模糊、需要推理"的分支判断,而本块适合"确定性强、规则清晰"的比较运算。这一分工可以从 ai_condition.py 的源码注释中得到印证:AIConditionBlock 明确说明它"提供与标准 ConditionBlock 相同的 yes/no 数据透传功能"(provides the same yes/no data pass-through functionality as the standard ConditionBlock)。
二、工作流程:比较求值 → 布尔结果 → 双路输出路由
结合文档与 run() 实现,Condition Block 的单次执行过程可以拆成三步:
- 取参:读取两个待比较值
value1、value2与一个比较运算符operator; - 求值:用所选运算符对两个值做比较,得到布尔结果
True或False; - 路由输出:无论结果如何,都会先输出一次
result(布尔值);随后仅当条件为真时产出yes_output分支,仅当条件为假时产出no_output分支。
源码以生成器(yield)形式逐条发出输出,其执行语义与文档描述一致:"根据比较结果输出布尔值,并给出对应的真/假分支值"。需要特别留意的是:单次运行里 yes_output 与 no_output 只有其一会被产出,这决定了你在画布上连接下游节点时,两条分支连线天然互斥,这正是"条件路由"能成立的根本原因。
三、支持的比较运算符(源码级枚举)
Condition Block 支持的运算符并非自由文本,而是由代码中的 ComparisonOperator 枚举严格约束(branching.py)。可选项共 6 个,覆盖等值与大小比较两大家族:
| 运算符 | 枚举成员 | 含义 |
|---|---|---|
== |
EQUAL |
等于 |
!= |
NOT_EQUAL |
不等于 |
> |
GREATER_THAN |
大于 |
< |
LESS_THAN |
小于 |
>= |
GREATER_THAN_OR_EQUAL |
大于等于 |
<= |
LESS_THAN_OR_EQUAL |
小于等于 |
在运行时,run() 通过一张"运算符 → 比较函数"的映射表(branching.py)将用户选择的符号翻译成底层 lambda 比较:
EQUAL → lambda a, b: a == b
GREATER_THAN → lambda a, b: a > b
GREATER_THAN_OR_EQUAL → lambda a, b: a >= b
LESS_THAN → lambda a, b: a < b
LESS_THAN_OR_EQUAL → lambda a, b: a <= b
NOT_EQUAL → lambda a, b: a != b
如果参与比较的两个值在所选运算符下无法比较(例如一个数字与一个结构上不兼容的对象直接做 > 运算),块不会静默失败,而是抛出 ValueError("Comparison failed: ...") 异常(见 branching.py),异常原因会透传给上层工作流用于调试。
四、输入字段详解
下表继承文档定义并补充了源码(Input 模式)中的默认值与取值约束:
| 输入字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Value 1 | 任意(数字 / 文本 / 布尔) | 是 | 参与比较的第一个值;UI 占位提示如 10、'hello'、True |
| Operator | 枚举(6 种运算符) | 是 | 要执行的比较运算,见上文运算符表 |
| Value 2 | 任意(数字 / 文本 / 布尔) | 是 | 参与比较的第二个值;占位提示如 20、'world'、False |
| Yes Value | 任意 | 否(默认 None) |
条件为真时输出的值;不填则回退为转换后的 Value 1 |
| No Value | 任意 | 否(默认 None) |
条件为假时输出的值;不填则回退为转换后的 Value 2 |
补充说明两点实战语义:
- 字符串的智能转型:在比较前,
run()会对value1/value2做一次预处理(branching.py)——若输入是字符串,先去除首尾空白;若去除空白后的文本能被float()解析,就将其转换为浮点数参与比较,否则保留为清理后的字符串。这意味着:- 传入
"10"与传入10在数值比较上是等价的,"10" < "9"这类字符串字典序陷阱会被避免; - 传入
"hello"这类无法转数字的文本时,则按字符串原样参与运算。
- 传入
- 比较失败的边界:两个值类型差异过大、运算符无法作用于当前组合时,会触发上文所述的
ValueError。
五、输出字段详解
| 输出字段 | 类型 | 说明 |
|---|---|---|
| Result | 布尔值 | 条件是否成立(True / False),每次运行都会产出 |
| Yes Output | 任意 | 条件为真时的输出;填了 Yes Value 则输出该值,否则回退为 Value 1 |
| No Output | 任意 | 条件为假时的输出;填了 No Value 则输出该值,否则回退为 Value 1 |
⚠️ 值得注意的源码与文档差异:关于 No Value 的兜底,当前文档(以及输入字段的 Schema 描述文本)均写作"若未提供则使用 Value 1",但查看当前快照下
run()的实际回退逻辑(branching.py)会发现:yes_value缺省时回退的是 Value 1,而no_value缺省时实际回退的是 Value 2:
yes_value = input_data.yes_value if input_data.yes_value is not None else value1
no_value = input_data.no_value if input_data.no_value is not None else value2
也就是说,按当前代码行为,当条件为假且你未填写 No Value 时,no_output 会输出 Value 2 而非文档所述的 Value 1。在设计工作流时若两条分支都依赖"缺省透传输入值",建议显式填写 Yes Value / No Value,避免依赖文档描述与实现之间的这一偏差。
六、内置测试用例:最直接的运行验证
ConditionBlock 在构造时内嵌了一组测试输入/期望输出(branching.py),这是理解其行为的最快路径,也可作为你自己搭工作流时的等价参考:
- 测试输入:
value1 = 10,operator = ">",value2 = 5,yes_value = "Greater",no_value = "Not greater"; - 期望输出:
result = True且yes_output = "Greater"。
该用例验证了最典型的"数值阈值 + 自定义分支文案"场景:由于 10 > 5 成立,块产出布尔 True,并把 Yes 分支的 "Greater" 沿 yes_output 传出,no_output 不产出。
七、典型实战场景
场景一:客户忠诚度折扣判定(文档原生示例)
沿用 branching.md 的完整案例:在客户忠诚度程序中判断客户是否达到折扣门槛。
- 将 Value 1 接客户累计消费金额;
- 将 Operator 选为
>=(greater than or equal to); - 将 Value 2 填门槛金额(如
100); - 将 Yes Value 填
"Qualified for discount"(符合折扣资格); - 将 No Value 填
"Not qualified"(不符合)。
随后把 yes_output 连向"发放折扣"的下游处理,把 no_output 连向"继续跟进"的另一条路径,即可完成资格分流与消息下发的双路路由。
场景二:更广泛的规则化分支模式
logic.md 为逻辑类块归纳了三类可直接迁移到 Condition Block 的高频用法:
- 阈值检查(Threshold Checks):当数值越过上限时切换流程,例如"订单金额 > 100 触发人工审批";
- 状态校验(Status Validation):判断状态值是否等于
"complete"或"error",据此走向成功/失败处理分支; - 数值比较(Numeric Comparisons):对比得分、计数或指标,按大小关系条件性触发后续动作。
八、姊妹块:If Input Matches(输入匹配)
在条件类逻辑中,除了支持 6 种运算符的 Condition Block,AutoGPT 还内置了仅做相等判断的 If Input Matches 块(IfInputMatchesBlock,块 ID 6dbbc4b3-ca6c-42b6-b508-da52d23e13f2,同样位于 branching.py)。它的定位(logic.md)与 Condition Block 互补:
- 输入:
input(待匹配的值)、value(目标匹配值)、可选的yes_value/no_value; - 工作方式:当
input == value时输出result = True并给出yes_output,否则输出result = False并给出no_output; - 特有的类型宽容机制:当两个值不相等且类型不同时,块会尝试把
value转换成input的类型后再比较(复用 util/type.py 的 convert 逻辑 的convert()函数),转换失败则保持原值比较——这让"把字符串'10'与数字10判为相等"成为可能。
内置测试集(branching.py)覆盖了三种典型情况:数值相等(输出 True / yes 分支)、数值不相等(输出 False / no 分支)、以及 value 传入 "None" 字符串与 input=10 不匹配的容错场景。
它的典型应用包括按类别路由、特性开关(feature flag)判断、以及基于 pending / approved / rejected 等状态值的流程分支——凡是"判定输入是否等于某个精确取值"的场景,用它比用完整比较表达式更直白。
九、两类条件块的分工小结与选用建议
综合源码与文档,AutoGPT 平台实际提供了三种互补的"分支判断"能力,你可以按确定性程度选用:
| 能力 | 实现位置 | 判断方式 | 适用场景 |
|---|---|---|---|
| Condition | branching.py 中的 ConditionBlock | 6 种比较运算符(==/!=/>/</>=/<=) |
数值阈值、状态等值、大小关系的确定性规则分支 |
| If Input Matches | branching.py 中的 IfInputMatchesBlock | 单值相等(带类型转换宽容) | 类别路由、精确取值匹配、特性开关 |
| AI Condition | ai_condition.py 中的 AIConditionBlock | 大模型语义判断 | 无法用规则表达的模糊、语义化决策 |
实践建议:能用规则表达的判断优先使用 Condition / If Input Matches,它们确定性强、零模型成本、便于测试复现;只有当判断本身依赖语义理解(如"这段文本情绪是否积极")时才应升级到 AI Condition。三者的输出侧结构一致(result + yes/no 分支透传),因此后续节点的接线方式完全相同,替换判断块不会破坏你已搭好的分支图。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00