Jeff 是一组 0.8B 到 2B 的小模型,只做选择题。它不生成文本,一次前向传播就把每个候选选项的概率算出来,0.8B 在 RTX PRO 6000 上的中位延迟是 22 毫秒,在 Apple M4 Max 上是 28 毫秒。要把分类、打分、路由这类判断嵌进本地流水线的团队可以直接用。它不理解指令,也不做多步推理,这部分仍要交给大模型。
它能覆盖三类问题。choice 从最多 255 个自然语言描述的选项里选一个,noul 给出是或否的概率,score 在给定刻度上打分。一次请求可以带多个独立问题,返回的是各选项的校准概率,项目文档称不需要再解析生成结果。
它和让大模型做分类有什么区别
老路有两条。为每个任务标注数据训练专用分类器,成本押在数据上;调大模型做分类,慢在生成和解析上,而且要防它输出不在候选集里的答案。Jeff 把选项写进提示,一次前向出概率,选项不要求出现在训练数据里,这是零样本的用法。
已发布的权重有三个。Jeff-Qwen3.5-0.8B 的 16 位权重 1.7 GB,2B 版本 4.2 GB,Gemma4-E2B 存了 4.6B 参数、有效约 2B,文件 9.3 GB。代码 MIT,权重 Apache 2.0,自己再微调没有许可障碍。
数字停在什么位置
五项基准的综合分,0.8B 是 79.1,2B 是 83.1,Gemma4-E2B 是 81.6。0.8B 在一个金融情绪数据集上拿到 96.4,在 RAGTruth 上 86.1,都高于同榜的闭源决策模型。换到 BBH、JudgeBench、WinoGrande 这类需要推理的任务就落后。
训练花得起钱。全参数微调,1 个 epoch,batch size 256,对选项字母做交叉熵,另 fit 一个温度做校准。合成数据由更大的模型在两台 DGX Spark 上生成,一张 RTX PRO 6000 训 0.8B 约两小时,训 2B 约三个半小时。
领域迁移的例子是 1.1 万条语音导航样本,单卡半小时微调完,留出集准确率从 31.7% 到 95.8%,M4 Max 上每次决策约 40 毫秒。
检查点只在留出集上选,不在基准面板上选。这一步是在防把评测数据集当成训练目标,自己复现时别省。
游戏测试能看个大概。同一个种子各跑 20 局,Doom 拿到 6.55 次击杀,Frogger 过了 10.3 次街,吃豆人吃到 57 颗豆。成绩不高,这一步验证的是延迟能不能跟上交互,不是在比强弱。
怎么接进自己的项目
- 用
uv sync装依赖,Apple 芯片加--extra mac。 - 把权重下载到本地目录。
- 用
JEFF_CHECKPOINT=<路径> PORT=8765 uv run jeff-serve起服务,Apple 芯片设JEFF_BACKEND=mlx。 - 向
/v1/systemone发 POST 请求,JSON 里带state和questions,每个 question 指定 choice、noul 或 score,并写清选项描述。 - 要自己的领域模型,先用合成脚本造数据,再按训练脚本的参数微调,最后在留出集上评估。
什么时候不要用它
需要多步推理的任务不要用,0.8B 到 2B 这个量级没有推理能力。只有 CPU 的场景也要掂量,32 线程下中位延迟 463 毫秒,已经靠近无 GPU 的可用边界。输入限英文文本,图像和音频都不在范围内。
提示词不能照抄。项目文档写明,闭源决策模型的 Doom 提示词在 Jeff 上全部失效,换提示词要重新调。基准分同样预测不了实际表现,2B 的基准分高于 0.8B,零样本玩 Doom 的成绩反而更低。
发布里没有量化版本,只有 16 位权重,显存紧张的机器要先把体积算清楚。
常见问题
0.8B 和 2B 怎么选。先跑留出集,2B 在推理类基准上明显更好,代价是权重翻倍、延迟上升。任务只是稳定分类,0.8B 通常够。
训练数据开源了吗。没有,放出来的是权重和代码,数据不含在内。
能上生产吗。它适合放在延迟敏感、失败可回退的决策点上,比如路由、去重、打分。要留兜底逻辑,别让一次错误判断直接变成用户可见的结果。