Choice 适用于「声明选项中应恰有一个胜出」的场景。设计重点不在选项标签,而在选项描述:每个判据必须说明,什么样的证据能把该结果与相邻结果区分开。像 research、write、review 这样的标签方便代码处理,但描述才赋予它们含义。
只要现实中可能存在清单之外的状态,封闭菜单就需要一个逃逸出口(escape hatch)。没有 none、other、stop 或 escalate,概率质量就会被强行分配到「最不差」的选项上——结果在类型层面合法,在运行层面却可能是错的。逃逸结果保住了不确定性,也给执行框架留下一条安全路径。
Choice 适合工作器路由、模型选择、队列分派、从当前界面控件集合中挑选、选择重试策略,以及决定哪个检索候选得以幸存;它不适合发明菜单中未声明的标识符、URL、数字或名字。
Score(criteria: [ "no direct support" "partial support, important gaps" "strong support from independent sources" ]) -> ordered value + interpolation
当决策处于一个有序语义量表上时,使用 Score。量表等级应当是文字描述,而不是含义模糊的数字。例如证据质量量表可以从「无直接支持」推进到「部分支持但存在重要缺口」,再到「来自多个独立来源的强支持」。
输出可以落在等级之间,但插值不会把有序量表变成精确测量。1.6 只是两个描述之间的一个位置——它并不自动意味着「80% 好」「1.6 倍优」,也不意味着可以跨契约直接比较。
量表等级应描述证据的可观测差异,而非情绪强度。相邻等级必须存在有意义的分界。如果人类评审者对样本归类都无法保持一致,就不能指望 Jev 仅凭描述学到一个稳定的次序。
三到五个区分良好的等级优于更多。等级过多会制造精确的假象,同时降低评审间一致性。把等级描述原样保留在回执(receipt)中,后续分析才能区分「模型行为变化」与「契约变化」。
Noul 表示一个是或否的概率。接近 1 意味着「很可能是」;接近 0 意味着「很可能否」;接近 0.5 意味着现有证据不足以做出有信心的区分——它不表示「中等严重性」或「部分许可」。有序的风险类别应当使用 Score,而不是 Noul。
Noul( "Is this proposed action purely read-only?" ) -> probability near 0 or 1
Noul 适合完成度检查、审批通过可能性、证据充分性、请求是否含糊,以及拟议动作是否存在外部副作用。应用仍须自行决定:哪些概率区间触发自动化、补充证据,或人工审查。
| 答案形态 | 原语 | 设计要求 |
|---|---|---|
| 唯一胜者 | Choice | 描述每个选项;加逃逸出口 |
| 有序质量 | Score | 定义文字锚点;避免虚假精度 |
| 是或否 | Noul | 解读的是不确定性,而非严重程度 |
| 未知自由字符串 | 非 Jev | 使用抽取或生成 |
| 精确算术 | 非 Jev | 使用确定性代码 |
Jev 保证答案符合声明的输出类型,但不保证所选的合法答案在语义上正确。错误的证据、过期的选项、含糊的判据或不完整的菜单,都可能产出一个类型层面完全合法、结果却错误的选择。
因此生产系统需要代表性样本、置信度阈值、确定性检查、决策回执与审查路径。类型安全消除了解析与 schema 故障,但不会消除对「决策含义」的测试需求。
原语之间可以组合。路由器可以在同一次调用中用 Choice 问「下一个工作器」、用 Score 问「紧急度」、用 Noul 问「审批通过的可能性」——前提是它们考察同一份状态快照。若后一个问题依赖前一个答案产生的新证据,就不能在同一次请求中链式串联(见第 Ⅵ 章)。
不要把多标签问题塞进 Choice——如果多个选项可以同时为真;不要在类别无序时使用 Score;不要把 Noul 的概率解读成严重程度量表。每一种错配都会产出看似合理、却被应用按错误语义读取的数字。
当所需输出无法干净地映射到单一原语时,拆分问题。一个风险工作流可以是:Noul 判断「是否存在外部副作用」,Score 评估「后果有多严重」,Choice 选择「允许的路由」。