Decision 决策判断 Block
对判断说明里的材料逐题做类型化判断:不生成自由内容,由决策模型(jev / nanojev,capabilities 含 decision)直接返回概率化的决策结果。是 Structure Block 在判断场景的专用替代——功能上是它的子集,配置形态却是「逐题判断」而非「自由 Schema」。
2026-09-26 起:判断依据不再读整段上文,只来自块内判断说明(详见下文)。存量旧格式块打开时自动迁移为
@上文(行为与改造前一致)。
与 Structure 的区别
| Structure | Decision | |
|---|---|---|
| 用途 | 按 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] 标头之后的引用块区(逐行 > 前缀;空说明是单个 > 行;不写引用块区 = 旧格式):
<!-- 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 同样接受:
"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 注释。
详见 决策模型与额度池(渠道配置、凭证池与上架说明)。