Skip to content

Decision 决策判断 Block ​

对判断说明里的材料逐题做类型化判断:不生成自由内容,由决策模型(jev / nanojev,capabilities 含 decision)直接返回概率化的决策结果。是 Structure Block 在判断场景的专用替代——功能上是它的子集,配置形态却是「逐题判断」而非「自由 Schema」。

2026-09-26 起:判断依据不再读整段上文,只来自块内判断说明(详见下文)。存量旧格式块打开时自动迁移为 @上文(行为与改造前一致)。

与 Structure 的区别 ​

StructureDecision
用途按 JSON Schema 提取/生成结构化数据对判断说明逐题做是否/候选/评分判断
字段任意类型、可嵌套仅三种原语、单层
模型structured output 的普通 LLM仅 decision 家族(jev-latest / nanojev)
判断依据上文(提示词)块内判断说明(@ 引用变量)
输出标识手写字段名系统生成(q1/q2/…),可改别名

判断说明(必填) ​

块内第一个区域,只放「材料」:文字 + @变量引用。模型只读这里解析出的文本——

  • 需要前文输出时,用 @ 引用具体变量(如 @{gen_1.__default__})
  • 需要全部上文时,用系统变量 @上文(解析为累计上文的纯文本部分)
  • 引用图片/音频/文件变量会明确报错、不调用模型;引用密钥(@{secrets.…})同样拒绝
  • 空说明运行前被拒绝(不外呼模型);旧格式(无说明)打开/导入时自动迁移为 @上文,建议改写为明确说明

三种判断原语 ​

  • 是否(boolean):返回 true/false(概率 ≥ 0.5 判真);可逐题填「判是/判否标准」(发给模型)
  • 候选(select):自定义 2-255 个非空不重复选项,返回选中项;可逐候选填「含义」(作为该候选的判断标准,不填则含义=候选名)
  • 评分(score):自定义 2-10 个非空不重复有序等级,返回 0 到 N-1 之间的连续期望值,并附概率最高的等级名

每个判断项的判断问题必填(就是字段描述)——空问题的判断项会在编辑器标红、运行前被拒绝。

硬性约束(运行前/运行时都会拦截) ​

  • 单层:字段不允许嵌套对象/数组
  • 输出标识不得占用保留输出键(__default__ / error / __error__ / raw / thinking / tool_calls)
  • 必须选择 decision 家族模型(普通 LLM 会被拒绝);Structure 配置决策模型的旧路径已禁用(运行时报错,lint 警告提示改用 Decision 块)
  • 字段改名后,下游引用不会自动更新(lint E112 会在写作时标出失效引用)

输出与引用 ​

输出名 = 判断项标识 ∪ 包装键。下游用 @{decision_1.q1} 引用各题值;__default__ 是整个结果对象,error / __error__ 是失败降级信号(配合「错误时继续」开关)。

逐题详情 __jev__(lint E112 支持嵌套路径引用):

题型__jev__.题名 形状
是否{kind:'noul', value:布尔, probability:概率, probabilities:{true:0.xx, false:0.xx}}(probabilities 恒有;TypeSafe 单概率渠道派生 {true:p, false:1-p})
候选{kind:'choice', value:候选, confidence?:置信度, probabilities?:{候选:概率}}(分布键与候选完全一致、总和 1;上游没给的字段不出现)
评分{kind:'score', value:期望值, confidence?:置信度, level?:等级名, probabilities?:{等级名:概率}}(level = 概率最高等级,并列取等级列表顺序靠前)

引用示例:@{decision_1.__jev__.q2.probabilities.轻松}(单选 q2 候选「轻松」的概率)。

配合 If-Else ​

可以在一个 Decision 中一次判断多个是否问题,随后在 If-Else 的比较模式中引用对应字段,与布尔值 true 比较,按顺序执行首个满足的分支。这适合后续多个块还要复用判断结果的场景。若结果只用于当前分支选择,可直接使用 If-Else 的 AI Prompt 判断模式(判断说明放在 If-Else 容器块级,见 If-Else Block),系统会整组批量判断,无需额外 Decision。

Markdown IR 写法 ​

判断说明编码为 [!DECISION] 标头之后的引用块区(逐行 > 前缀;空说明是单个 > 行;不写引用块区 = 旧格式):

markdown
<!-- wn:decision {"id":"dec_1","name":"review","generation":{"modelId":"jev-latest"}} -->
> [!DECISION] — `review`
>
> 判断材料:@{gen_1.__default__}
> 客户投诉内容如上,请逐题判断。

```json
{
  "type": "object",
  "properties": {
    "q1": {"type": "boolean", "description": "上文是否包含风险提示?"},
    "q2": {"type": "string", "enum": ["正式", "轻松", "幽默"], "description": "上文语气属于哪种?"},
    "q3": {"type": "number", "x-jev-score-levels": ["低", "中", "高"], "description": "上文内容质量评分"}
  },
  "required": ["q1", "q2", "q3"],
  "additionalProperties": false
}
```

<!-- /wn:decision -->

判断标准字段(x-jev-criteria / x-jev-option-criteria)由编辑器 UI 写入 schema 注解,手写 IR 同样接受:

json
"q1": {"type": "boolean", "description": "是否退款?", "x-jev-criteria": {"true": "用户明确要求退款", "false": "仅在咨询退款政策"}}

分阶段开放(运维) ​

创建入口沿用 VITE_FEATURE_DECISION_BLOCK(前端构建期)与 DECISION_BLOCK_CREATE(后端)双开关;判断说明/判断标准两类新格式另有独立写入闸门 DECISION_PROMPT_WRITE(含标准字段 DECISION_CRITERIA_WRITE)与协同门禁 DECISION_PROMPT_GATE,前端对应 VITE_FEATURE_DECISION_PROMPT,按三阶段开闸(部署 → gate on → write on)。开关未开启的环境中,导入/粘贴含新格式内容(判断说明、x-jev-* 标准字段、容器级说明)的文档会被嗅探拒绝载入——旧格式不受影响,打开/导入会自动迁移为 @上文。完整开关表与开闸顺序见 docs/features/decision-models/README.md 与 .env.example 注释。

详见 决策模型与额度池(渠道配置、凭证池与上架说明)。

AI Workflow Editor