TypeSafe AI 的 Jev 引起热烈关注,是因为它抓住了一个真实需求:Agent 和软件工作流中,有大量节点需要模型作出结构化决策,而不是生成一段文字。大部分决策问题可以抽象为(或者转化、规约为)多选一的选择题:给定上下文,从有限的候选项中选出最合适的一项,并提供可供后续流程使用的分数。

通用大模型本身已有相当强的判断能力。因此,一个自然的问题是:不从头训练专用模型,能否在现成 LLM 之上增加一个简单的读出层,把它变成实用的 decision model?

通常的做法是要求 LLM 按 JSON schema 输出选择结果。但对单选决策而言,逐 token 生成完整 JSON,再解析和校验,会带来不少额外开销,其中大部分 token 只是 JSON 结构本身。用一个简单的 prompt protocol,就可以免去 JSON 输出,大幅减少自回归生成的步数。一种基本的 protocol 是:给出问题及标为 A、B、C 等的候选项,要求模型只回复一个标签;另设 U 表示无法回答。

这已经可以算是一个基本的决策模型。但这样我们只能得到一个结果,得不到模型给出的概率分布或排序,也就无从做进一步的处理。

一个直接的想法是读取模型在决策位置上、各候选标签对应的下一 token logit。这样还可以在程序上把允许输出的 token 限定在候选标签集合内,从而避免不合法输出。然后只对这些分数做 softmax,得到一个覆盖有效选项及 U、总和为 1 的分布。我们把这套协议和读出逻辑称为 V0,也就是基线。这里的 layer 是功能上的读出层,并不是新增一层需要训练的神经网络。

需要强调:softmax 只保证分布在数学上归一化,本身不做任何概率校准;分数是否可信,完全取决于底层模型。

我们用不开 thinking 的本地 Gemma 4 12B,在 Banking77 的 20 候选项开发题上测试了 V0。两组共 153 题,V0 做对 107 题(69.9%);正确答案落在首轮前两名的有 123 题(80.4%)。这说明即使第一名不正确,模型通过 logit 给出的排序仍包含有用信息。我们还发现,仅仅交换候选项的顺序,就可能改变模型的选择。这说明模型不满足选项重排不变性;反过来说,改善重排不变性,就有可能改善模型的表现。

我们的第一个想法是集成。把同一道题以不同的选项顺序多问几遍,再把概率映射回原选项后融合,就有机会抵消一部分位置偏差。实验中,这种方法确实改善了准确率或 log loss,AnyJev 也更早地独立指出了这一点。但这种方法不经济:对于 20 个选项的选择题,即便采用高度剪枝的循环重排,也要推理 20 次。这就失去了 decision model 经济、低延迟的优势,计算成本已接近直接让基础模型开 thinking。

我们也试过更便宜的捷径:先用空白、无信息,或与正式协议同形但没有选项内容的问题,测出模型对各标签和顺序的"先验偏好",再从真实题目的 logit 中扣除。结果并不理想。真正空白的 prompt 测到的偏好,与决策题中的偏好不是一回事,直接相减反而使准确率下降;同形无内容 prompt 的部分校正在个别指标上有帮助,但没有带来稳定的准确率提升。这提示我们:顺序和标签偏差并不是一个与题目内容无关、可以统一扣掉的常数,而是高度语义相关的。因此,要在不损失性能的前提下从根本上解决这一问题,需要在训练中、至少在后训练中处理,正如 TypeSafe 在其宣言中所说。我推测,用领域数据(例如打乱选项顺序的 Banking 题)做简单的 LoRA,难以获得可泛化的收益。

于是,我们尝试一种更轻量的集成思路:既然首轮常能把正确答案排进前两名,就让这两名再进行一次"决赛"。这就是 V1:先运行 V0;当首轮信心低于固定阈值时,取分数最高的两个有效选项,让模型重新阅读原题,并只在这两个原有标签之间再选一次。第二轮不会被告知谁是首轮第一名,也不是回答一个额外的是/否问题。它相当于从同一个模型中提取第二种、聚焦于两名候选的判断。严格说,我们并没有把两轮概率简单平均,而是用第二轮的选择来裁决低信心的题目。

在上述 153 题上,V1 做对 113 题(73.9%),其中 55 题(35.9%) 进入决赛。在另外 462 道 Banking77 开发集留出题上,使用事先固定的阈值,正确数从首轮的 338/462(73.2%) 提高到 347/462(75.1%),只对 133 题(28.8%) 调用第二轮。这给出了一个明确的准确率与计算量折中。不过,"约 30% 触发"只是这组 Banking 题的结果;在我们的合成算术题上,要取得相应收益,决赛调用比例明显更高。

决定是否进入决赛的信心分数,经过了一个小的数值映射。它改变的是阈值所对应的分数尺度,不改变首轮选项排序,自身也不能提高 V0 的准确率。

在推理实现上,第二轮可以复用第一轮题目部分的 KV cache,只需处理追加的短问题,再读取一次候选标签分数。本地实验中,第二轮新增延迟的 p50 约为 0.22 秒。它不是零成本,但比重新生成一份完整回答轻得多。

这样,我们得到一个不改动基底模型权重的 Simple Decision Model:V0 通过协议和一次读出完成决策,V1 在低信心时追加一次 Top-2 裁决。现有实验显示,它在我们测试的有限数据集上带来了可复现的收益,并在留出集上得到验证。这当然远未达到复现 Jev 的程度,但这些实验仍给了我们两点重要提示:

  1. 未经概率校准后训练的基础 LLM 存在明显的概率校准问题(我们把选项重排不变性也视为广义的概率校准问题);我们推测,解决这一问题可以提升其决策表现。
  2. 我们提出的 Top-2 决赛,本质上是一种简单、轻量的集成方法。它能带来稳定且相当有意义的收益,说明开发简单、轻量的集成方法可能是一条有效的短期到中期路径。这类方法需要结合 prompt protocol 和模型架构仔细设计,也留下了很多缓存优化和并行优化的工程空间。

在实验过程中,我们利用 GPT-6 生成了一系列 nonsense probability dataset。例如:一枚理想硬币抛 100 次,正面朝上的次数会落在哪个区间?选项 A 到 G 各对应一个区间。这类题目的真实概率可以精确算出,因此可以作为一个具备基本概率性质的训练集。我们尚未进行后训练。用这些 nonsense dataset 做非常有限的后训练,能否在不损失性能的前提下改善基础 LLM 的概率校准,是下一个有趣的问题。