Jeff:0.8B 决策模型跑在你的 Mac 上,一次前向 22 毫秒

9 月中旬 TypeSafe 发布 Jev 时,它带来的定价结构比模型本身更引人注意:输入每百万 token 0.042 美元,输出免费,因为 Jev 根本不生成文本。这个模型接受一段状态描述和几个问题,返回每个选项的概率分布,官方公布的单次响应在 70 到 500 毫秒之间。两周之后,一个名叫 Jeff 的独立项目把同样的能力搬到了本地:基于 Qwen3.5 和 Gemma 4 微调出的 0.8B 到 2B 小模型,权重放在 Hugging Face 上以 Apache 2.0 许可开放下载,在 RTX PRO 6000 上单次决策 22 毫秒,在 Apple M4 Max 上用 MLX 后端 28 毫秒。

Jeff 仓库:Qwen3.5 与 Gemma 4 微调的零样本分类决策模型

项目代码在 GitHub 仓库 firelex/jeff,训练配方从 Denis Yarats 的开源项目 AutoJev(MIT 许可)继承而来,作者明确标注与 TypeSafe 没有隶属关系。模型不生成任何文字:输入状态和选项,输出直接是概率。这个设计决定了它的速度上限、部署成本,也决定了它的能力边界。

决策模型在解决什么问题

现有 LLM 的输出是字符串。软件要消费这个字符串,需要解析、校验、重试,还要承担模型跑偏的风险。TypeSafe 把这类任务称为 System One 任务,取 Kahneman《思考,快与慢》里"快思考"的意象:不写文章、不做多步推理,只在高频出现的判断场景里给出选项级别的结论,比如客服工单该路由到哪个组、这条用户消息是否在要求退款、这段内容属于哪个审核标签。

Jev 的训练方法被称为 RLCD(Reinforcement Learning for Calibrated Decisions),优化目标绕开了人类偏好,直接对准校准过的决策:模型给出的概率要如实反映正确率,说 0.9 置信的判断就应该九成是对的。输出结构在推理前就定义好,模型不可能输出类型错误的结果。Jev 的三项题型由此而来:choice(从最多 255 个选项中选一个,附带完整概率分布)、Noul(是/否判断,返回 0 到 1 的浮点数,名字来自伯努利分布)、score(沿自定义等级给出一个分数)。多个独立问题可以放进同一次请求并行求值。

这个形态的适用面由两个约束划出来。一是模型只做选择,不做预测:官方实测让 Jeff 预测"两回合后会发生什么",结果与随机猜测无异。二是题目描述的方式对结果影响极大:官方对照实验里,同一局 Frogger 游戏,把目标选项的措辞改成与其他前选项一致的句式,单局过马路次数从 15 次跌到 3 次;改回描述后果的写法,成绩恢复。

Jeff 的做法:把读答案变成一次前向

Jeff 复刻的是接口格式,实现路径是标准的微调。基座模型是 Qwen3.5-0.8B、Qwen3.5-2B 和 Gemma 4 E2B,训练管线分四步:

  1. 构建混合训练集:27.1 万条问题,来源包括转成判断题形式的公开数据集(蕴含、问答、情感、安全、事实核查)、WinoGrande 训练集 4 万条、RAGTruth 1.5 万条、ContractNLI/CUAD/ConditionalQA 等真实长文档、1 万条程序化生成且带精确答案的概率题、约 3.1 万条由本地教师模型(Qwen3.8-Flash-Next,跑在两台 DGX Sparks 上)合成并抽检的问题。3% 的问题里埋了注入攻击样本,5% 加了"以上都不是"选项。
  2. 泄漏过滤:每条训练题对照评测集和 JevBench 做近似重复检测,共移除 50 条。
  3. 全量微调:单卡 RTX PRO 6000(96GB),一个 epoch,batch 256,学习率 0.8B 用 5e-6、2B 用 1e-5,损失函数是对选项字母位置的交叉熵,之后拟合一个标量温度用于校准。checkpoint 在开发集上挑选,评测集从不参与任何选择。
  4. 服务化:jeff-serve 提供 HTTP 接口,请求格式与 Jev 相同,MLX 后端覆盖 Apple Silicon。

推理时模型读提示词末尾答案槽位置上每个选项字母的 logits,一次前向经 softmax 得到全部选项的概率。因为没有逐 token 生成的过程,延迟基本不受选项数量影响,这正是 0.8B 模型能压到 22 毫秒的原因。

成绩:分类打平,推理仍有代差

官方在五个公开基准共 4599 题外加 JevBench 公开困难档(105 题,单独计分)上对比了三个 Jeff 模型与 Jev 的公开成绩:

基准0.8B 未训练Jeff-0.8B2B 未训练Jeff-2BGemma4 E2B 未训练Jeff-Gemma4-E2BJev 公开成绩AutoJev-27B
总体(5 基准)45.379.146.583.162.581.683.084.9
BBH39.564.046.068.051.366.494.382.8
Financial PhraseBank36.096.453.496.386.096.177.084.2
JudgeBench56.662.657.464.646.960.678.678.9
RAGTruth49.186.135.988.963.887.477.388.9
WinoGrande49.268.652.279.051.077.490.783.3
JevBench 困难档36.247.645.753.341.048.673.370.3

五基准加 JevBench 困难档的准确率对比

数据里有三条清晰的分界线。Financial PhraseBank(金融语句情感)和 RAGTruth(引用真实性核查)这两类分类与 grounding 任务上,0.8B 的 Jeff 已经超过 Jev 的公开成绩:96.4 对 77.0,86.1 对 77.3。BBH、JudgeBench、JevBench 困难档这些推理密集型基准上差距仍然完整:0.8B 在 BBH 上拿到 64.0,Jev 是 94.3;困难档 47.6 对 73.3。官方模型卡把这一点写得很明确,并注明 Jev 与 AutoJev 的公开数字测自同一批基准的不同样本。

延迟与体积是另一组对照。0.8B 的 16-bit 权重只有 1.7GB,M4 Max 上 28 毫秒一次决策;Jev 的公开 Doom 对局里单次调用 212 毫秒(含网络,测自加州笔记本到官方服务)。两套数字没有在相同硬件上对齐,但量级差距说明了本地部署省掉的东西:没有网络往返,没有按 token 计费的账单,也没有速率限制。

游戏实测:基准分不能预测真实对局

项目用 Doom、Frogger、Pac-Man 做零样本测试,每回合把局面和合法动作写成文字,选项只描述后果("这个方向会被车撞掉一条命"),不提示哪个是对的。20 局、固定种子 1234:

模型Doom 击杀数Frogger 过街次数Pac-Man 豆子(满 98)
随机动作−0.05011.2
手写规则机器人6.5510.2594.1
Qwen3.5-0.8B 未训练5.01.025.8
Jeff-0.8B6.5510.357.0
Qwen3.5-2B 未训练0.550.0572.1
Jeff-2B−0.96.041.2
Gemma4 E2B 未训练−0.5503.2
Jeff-Gemma4-E2B0.550.1553.2

两个反直觉的结果值得单独看。第一,2B 全面强于 0.8B 的基准分数没有迁移到游戏里:Jeff-2B 在 Doom 上是负分(方向感完全丢失),Frogger 和 Pac-Man 都不如 0.8B 版本,官方推测未训练的 2B 本就更保守,而训练放大了这一倾向,Pac-Man 里掉头频率达到未训练版的 3.5 倍,官方标注"需要进一步研究"。第二,未训练的 Gemma 4 E2B 基准分最高(62.5),对局表现却是三个基座里最差的,多数时候选对但不可靠,而实时循环里偶发错误会复合放大;训练修好了它的 Pac-Man(3.2 到 53.2),没修好 Doom 和 Frogger。这组数据对"拿基准分选模型"的惯常做法是一个直接的提醒。

另一个细节来自对照实验:Jev 官方 Doom 提示词(一个方位角数字加一条瞄准规则)在 Jeff 全部模型上失效,无论训练与否;把后果写成文字的选项描述才是有效格式。

边界与上手

官方的使用建议里最关键的一条是"推理交给代码,判断交给模型":它是一个分类器,不是规划器,描述每个选项导向什么后果可以,让它预测未来不行。校准是按开发数据拟合的,换到差异大的领域需要重新校准。目前只支持英文文本。

上手路径只需要四步:克隆仓库、uv sync(Apple Silicon 加 --extra mac)、从 HuggingFace 拉权重、设 JEFF_BACKEND=mlx 启动 jeff-serve。0.8B 权重 1.7GB,16GB 内存的笔记本装得下,请求格式与 Jev 完全一致,应用从 API 版迁到本地版不需要改请求结构。零样本精度不够时,官方给的参照是:约 1.1 万条领域样本微调半个多小时(单 GPU),语音导航任务的保留集准确率从 31.7% 提到 95.8%,单次决策约 40 毫秒(M4 Max)。

这条路线的可复现性是它和订阅一个 API 的本质区别。训练数据构成、泄漏过滤记录、每个基准的选择过程全部公开,训练脚本在仓库 scripts/train_all.sh 里;数据的每个来源带着各自的开源许可(部分 CC BY-SA),官方发布权重与代码但不发布训练数据。同样的思路在开放权重社区不止一家:Simon Willison 在 9 月 21 日的评论里列出了同期出现的 Kev(Qwen 3.5 的 0.8B/4B/9B 版本)等一批复刻项目,JevBench 也已经出现在公开评测里。决策模型这个类目正在从单一的商业 API 变成一组可以自己跑、自己训、自己校准的本地组件,Jeff 把这条路的最低门槛拉到了一张消费级显卡或者一台 M 系列笔记本的高度。

来源: