本节摘要:Choice 是 Jev 的归堆原语:从你定义的选项里挑一个,返回三件东西——胜出项
choice、全选项的概率分布probabilities、整体把握confidence。四条设计准则:选项描述写给"阅卷老师"看(具体情形而非抽象程度词);永远留一个other逃生门,否则语义模糊的输入会被硬塞进错误选项且概率虚高;选项之间要可判别,高度重叠会让概率抖动、置信度下降;上限 255 个选项但实践建议 ≤ 20,更多时分层两次 Choice。Choice 是分类与路由(第 6 章)的主力原语。
阅读完本节,你应当能够:
语义:criteria 把选项名映射到描述,模型从中选一个。
{ "route": { "type": "choice", "instructions": "这条客服工单应该路由到哪个团队", "criteria": { "billing": "计费、扣款、发票、订阅价格问题", "technical": "产品故障、报错、无法登录、功能异常", "sales": "询价、方案咨询、购买意向", "other": "以上都不符合,或语义不明" } } }
响应:
{ "choice": "billing", "probabilities": { "billing": 0.84, "technical": 0.10, "sales": 0.02, "other": 0.04 }, "confidence": 0.6 }
if 分支的取值;结构保证:模型不可能产出 criteria 之外的选项——0% 类型错误由构造成立;但选错选项、给错分布是可能的(形状 vs 判断,第 10.2 节)。
| ❌ 抽象程度词 | ✅ 具体情形 |
|---|---|
| "好的反馈" | "明确表达满意、点赞、感谢" |
| "与钱有关" | "计费、扣款、退款、发票、价格疑问" |
| "高风险" | "涉及支付、身份验证、数据删除的操作" |
阅卷细则写得越具体,两个"阅卷员"(模型与你未来的回归集)之间的一致性越高。
other 逃生门没有逃生门时,语义模糊的输入必须被塞进某个错误选项,而且概率看起来还挺高——模型被迫在你划死的空间里选边。有了 other,模糊输入有了体面的去处,你还能用 other 的占比监控"选项表是否覆盖了真实流量":
other 占比 > 15%?→ 该细分选项表了(分层 Choice:先粗分再细分)
两个选项描述高度重叠("technical" 和 "product_issue" 都写着"功能异常")时,概率会在两者间抖动、confidence 下降。先审自己的选项表,再怀疑模型——把两个候选合并,或给各自补上排他性描述("technical:产品自身故障;product_issue:用户不会用产品")。
API 上限 255,但选项越多判别越难。超过 ~20 个时改用两次 Choice:
第一次:粗分(账务类 / 技术类 / 商务类 / other) 第二次:在账务类里细分(billing / refund / invoice / other)
两次调用的总成本仍远低于一次 LLM 分类(第 5.1 节)。
意图分类(第 6.1 节)、模型路由(第 6.2 节完整代码)、工具选择(Agent 从注册的工具表里挑一个)。
归堆之外还有第三种形态:在一条有序的标尺上落位——严重度、风险级、相关度,Score 登场。