Skip to content

If-Else Block ​

容器节点,根据条件判断选择执行不同的分支。

功能说明 ​

If-Else Block 是一个条件分支容器节点。它包含一个或多个 if 分支和一个可选的 else 分支。运行时按顺序检测每个 if 分支的条件,命中第一个满足条件的分支后执行其内部 Block,跳过其余分支。如果所有 if 条件都不满足,则执行 else 分支(如存在)。

If-Else Block 本身不产生直接输出,内部 Block 的执行结果写入全局上下文。

使用场景 ​

  1. 结果分流:根据上游 Block 的输出值,决定走不同的处理路径(如成功/失败分支)。
  2. 条件过滤:检查某个变量是否满足特定条件,满足时才执行后续操作。
  3. 多路分支:添加多个 if 分支实现类似 switch-case 的多路选择逻辑。

配置参数 ​

If-Else 容器节点 ​

属性名类型说明默认值
idstring节点唯一标识(自动生成)—
namestring节点名称(自动生成,可自定义)—
outputDecisionDetailboolean是否产出 @{块名.decision} 判断详情变量(见「输出判断详情」)false

If 分支节点 ​

属性名类型说明默认值
idstring分支唯一标识(自动生成)—
namestring分支名称(自动生成,可自定义)—
conditionCondition分支执行条件空条件

Else 分支节点 ​

属性名类型说明默认值
idstring分支唯一标识(自动生成)—
namestring分支名称(自动生成,可自定义)—

Condition 结构 ​

条件支持两种模式:

比较模式(默认):结构化三段比较。

字段类型说明
firstValueSource左值(变量引用或字面量)
compareCompare比较操作符
secondValueSource右值(变量引用或字面量)

AI Prompt 模式:自然语言逐句判断(详见下文「AI Prompt 判断模式」)。

字段类型说明
mode'prompt'固定为 prompt;旧数据没有 mode/prompts 字段时按比较模式解析
promptsstring[]1 句或多句判断语句,每句由决策模型独立判定 true/false
combine'all' | 'any'all = 全部为真才为真(默认);any = 任一为真即真
modelIdstring决策模型(可选,默认 jev-latest)

ValueSource 结构(比较模式的左/右值通用):

sourceTypesourceValue 形态说明
variable[blockId, varName] 数组(新格式)或字符串 '@blockName.varName'(旧格式)变量引用
string / number / boolean对应类型的字面量字面量
arrayValueSource[](每项递归解析)数组值源,Loop 列表循环的数据源即此类型
literal字符串已弃用(等同于 string),仅为旧文档保留读兼容

变量引用的写法与语义:

  • 新格式为 [blockId, varName] 数组;varName 里可以继续带路径(如 struct_1.items.0.title)。
  • 旧格式字符串 @blockName.varName、@blockName > varName 均可解析;没有 @ 前缀的 blockName.varName 也会尝试解析。
  • __default__ 解包:[blockId]、[blockId, '__default__']、@name、@name > __default__ 四种写法等价。
  • 引用密钥/凭据(@{secrets.…})会被拒绝,解析结果为 undefined。

可用比较操作符及其求值语义:

操作符说明
Equals / NotEquals严格相等(===):字符串 "60" 与数字 60 不相等
GreaterThan / GreaterThanOrEqual / LessThan / LessThanOrEqual数值比较:两侧经 Number() 强转,任一侧为 null/undefined/NaN 时结果为 false
Contains / NotContains文本包含:两侧经 String() 强转后做子串判断(数字也会转成文本)

输出变量 ​

If-Else Block 本身不产生输出变量。被执行分支内各 Block 的输出直接写入全局上下文(可在外部引用);未走到的分支变量不存在,If-Else 之后不要同时引用两个分支里的变量。

开启「输出判断详情」开关(AI Prompt 条件,见下文)后额外产出:

变量名类型说明
@{块名.decision}object整组 AI 判断详情(形状见下文)

引用语法示例:

命中分支序号:{{ifElse_1.decision.matched}}
是否走了 else:{{ifElse_1.decision.else}}
某分支某题概率:{{ifElse_1.decision.branches.0.results.0.probability}}

使用示例 ​

示例 1:成功/失败分支处理 ​

[Code Block] name: code_1
  const score = {{struct_1.score}}
  return score

[If-Else Block] name: ifElse_1

  [If] condition: code_1.output GreaterThanOrEqual 60

    [Generation Block] name: gen_pass
      恭喜!分数 {{code_1.output}} 达到及格线,请生成祝贺信。

  [Else]

    [Generation Block] name: gen_fail
      分数 {{code_1.output}} 未达标,请生成鼓励信。

根据分数是否大于等于 60,执行不同的 Generation Block。

示例 2:多路分支 ​

[If-Else Block] name: ifElse_1

  [If] condition: struct_1.category Equals "技术"
    [Generation Block] 按技术文章风格处理...

  [If] condition: struct_1.category Equals "新闻"
    [Generation Block] 按新闻简报风格处理...

  [Else]
    [Generation Block] 按通用风格处理...

根据文章分类走不同的处理路径,类似 switch-case 逻辑。

运行时约束 ​

  • 适用文档类型:普通文档(document)。不可用于 skill 文档。
  • 可插入上下文:文档顶层。
  • 节点结构:容器节点(content: 'decisionPrompt? if+ else?'),可选的「判断说明」子节点(AI Prompt 条件用,见下文)之后是至少一个 if 分支,else 分支可选。
  • 分支内容:每个分支(if / else)必须包含至少一个子 Block。
  • 执行语义:按顺序检测 if 条件,命中后执行该分支并跳过其余分支。仅执行一个分支。

注意事项 ​

  • If-Else Block 最多只会执行一个分支。即使多个 if 条件同时满足,也只执行第一个命中的。
  • 如果所有 if 条件都不满足且没有 else 分支,则整个 If-Else Block 不执行任何操作。
  • 内部 Block 的输出直接写入全局上下文,不需要通过 If-Else Block 的变量中转。
  • 条件中的左值和右值支持变量引用(如引用其他 Block 的输出)和字面量(字符串、数字、布尔值)。
  • 在 skill 文档中不可使用 If-Else Block。
  • Else-If 多分支:支持无限数量的 Else-If 分支(if / elseif / elseif / ... / else),无硬性上限。第一个条件为 true 的分支被执行,其余全部跳过。
  • 分支变量互斥:if 和 else 分支内定义的变量是互斥的——运行时只有一个分支会执行,因此不能在外部同时引用两个分支的变量。
  • 条件格式:比较模式的 Condition 使用结构化对象({first, compare, second});AI Prompt 模式使用 {mode:"prompt", prompts, combine, modelId},不支持直接传字符串表达式。

AI Prompt 判断模式(条件) ​

If 分支的条件支持两种模式:

  • 比较判断(默认):变量/字面量的结构化比较(Equals / Contains 等)
  • AI Prompt 判断:用 1 句或多句自然语言描述判断条件,由决策模型(默认 jev-latest)对**容器块级「判断说明」**里的材料逐句判定 true/false:
    • 全部为真(默认)/ 任一为真 组合方式
    • 判断依据只来自 If-Else 容器的判断说明(块级说明区,写法与 Decision Block 的判断说明一致:文字 + @ 引用具体变量,或 @上文 引用全部上文的纯文本部分);图片/文件等多模态引用会明确报错
    • 判断语句内嵌变量(2026-09-27):判断语句本身也可以 @ 引用变量(编辑器输入 @ 触发变量菜单,存储为 @{变量路径} 文本)。求值时引用渲染为当前值直接进入题目文本;变量当前无值时渲染为占位符 [暂无值] 并在材料中附一句说明(告知模型该占位代表尚无值)——不报错、不跳过,由模型按题自行判定,any/all 组合按题自然生效。多模态引用与密钥引用与判断说明同口径报错拒绝
  • 旧文档(未迁移、无说明)回退读取整段累计纯文本上文——行为与改造前一致;显式空说明会在求值时报错中止(lint 会提示补写)
  • 判断失败(渠道错误/配置错误)会中止运行并报错,不会静默走 else 分支

判断说明的 Markdown IR 写法

导出为 Markdown IR 时,判断说明编码为容器标头/开注释之后的逐行 > 引用块区(显式空说明 = 单个 > 行;没有引用块区 = 旧格式)。写法与 Decision Block 的判断说明一致。

输出判断详情(可选开关) ​

配置面板的「输出判断详情」开关开启后,If-Else 执行完产出 @{块名.decision} 详情变量:

{
  matched: 命中 if 的零基分支序号(无命中为 null),
  else: 是否执行了 else 兜底(true/false),
  branches: [
    { index: 分支序号, results: [ {value: true/false, probability?: 概率, probabilities?: {true:0.xx, false:0.xx}} ] }
  ]
}

命中某个 if → matched=该分支序号, else=false;执行 else → matched=null, else=true;无命中且无 else → matched=null, else=false。branches 只含参与合并判断的 AI 条件分支。

整组条件一次判断 ​

进入 If-Else 时,系统先收集当前这组 if / else-if 的全部 AI Prompt 条件,使用进入时的判断说明(一次解析、一次模型调用)取得所有问题的答案;然后按分支顺序,仅执行第一个满足条件的分支。即使多个分支为 true,也只执行第一个;全部为 false 则执行 else(如存在)。不需要额外添加 Decision Block。

例如三个分支分别判断「是否退款」「是否咨询价格」「是否咨询产品」,一次返回 false / true / true,只执行第二个分支。

  • 每个分支仍可配置多句问题,按自身「全部为真 / 任一为真」组合。
  • 同组提示词条件必须使用同一个模型;未指定模型使用默认 jev-latest。旧配置选择了不同模型时,需要手动统一。
  • 全部提示词合计最多 64 个非空问题,不是 64 个分支;普通比较条件不占题数。超过上限会在请求前报错,不会自动拆成多次请求。
  • 可以混用普通比较条件,它们仍在本地判断。只要存在 AI Prompt 条件,系统就会先请求全部 AI 条件,即使前面的普通条件已能命中。
  • 后面分支的无效提示词、缺失答案或渠道错误也会让整组失败,不会静默当 false 或走 else。
  • 概率沿用现有规则:≥ 0.5 为 true;不按置信度高低重新排序分支。
  • 嵌套 If-Else 只有实际进入时才单独判断;循环中每次进入都会重新解析判断说明(说明里的 @变量 取当时最新值)并判断,不复用上次结果。
  • 一次调用指一次逻辑模型调用,渠道重试或降级可能产生多次网络尝试。问题总量较大可能增加耗时,仍受现有超时限制。

如果判断结果还要供多个后续块复用,也可以先用 Decision Block 一次生成多个布尔变量(判断说明放在 Decision 块内),再在 If-Else 的比较条件中引用这些变量并与布尔值 true 比较。这些比较本身不会再请求模型。

AI Workflow Editor