波斯豪格(PostHog)发布的吉夫斯(Jeeves)是一个带有扩散草稿器的推理型杰夫(Jev)风格分类器,使用 SFT 与 CISPO 方法完成训练。该项目包含一个 9B 参数的杰夫类模型,其基于通义千问(Qwen)3.5-9B 架构,结合 LoRA 与 pointer head,能够在做出决策之前先进行思考,同时配有 block-4 扩散草稿器、全部训练代码以及对应的训练、开发、测试数据集。
正文
一个带扩散草稿器的推理型 Jev 风格分类器,使用 SFT 和 CISPO 训练。

亮点
- 一个 9B 的 Jev 类模型(Qwen3.5-9B,LoRA,指针头),在决策前先思考,配有块 4 扩散草稿器以及完整的训练代码和训练/开发/测试数据。
- 在未训练过的测试数据上优于 Kev-9B 和 Jev(0.889 对比 0.822 和 0.857),在 JevBench 公开层级上同样领先(0.935 对比 Jev 的 0.866)。
- 通过兼容 Jev 的 API,在同一请求中支持是/否(
noul)、多选(choice)和评分(score)问题。 - 在单张 H100 上,不思考时每次请求约 0.3 秒,思考时中位延迟 3.3 秒,可通过截断思考链加速。
- 运行于 CUDA(FP8 内核需 Hopper)。
问题
Jev 类模型能给出校准过的决策概率,但准确率偏低,因此许多管线依赖推理模型作为后备。Jeeves 用 CISPO 训练一个 Jev 类的 Qwen3.5-9B(LoRA 加指针头),让它在决策前先推理。这在域外任务上表现更好,并在 JevBench hard(公开)上超越 Jev。
结果
开启思考、贪婪解码、2560 token 上限下的准确率。Kev-9B 和 Jev 列为 Kev 发布的数据。
| 基准 | Kev-9B | Jev | Jeeves | | --- | --- | --- | --- | | 测试总体(域外与留存,按项加权) | 0.822 | 0.857 | 0.889 | | 迁移总体(MMLU-Pro 与埋藏状态) | 0.579 | 0.800 | 0.746 | | JevBench 总体(231 公开项) | 0.715* | 0.866 | 0.935 | | QNLI | 0.925 | 0.925 | 0.913 | | SciQ | 0.963 | 0.988 | 0.991 | | TweetEval offensive | 0.775 | 0.813 | 0.813 | | PAWS | 0.763 | 0.788 | 0.875 | | MMLU | 0.738 | 0.900 | 0.793 | | Emotion | 0.600 | 0.588 | 0.647 | | 留存规则结构 | 0.896 | 0.885 | 1.000 | | 对比策略 | 0.900 | 0.963 | 1.000 | | MMLU-Pro (10选) | 0.515 | 0.840 | 0.739 | | 埋藏状态 | 0.740 | 0.700 | 0.759 | | 不可知项在 p≥0.9 回答(越低越好) | 0.000 | 0.090 | 0.055 | | JevBench hard(111 公开项) | 0.451* | 0.730 | 0.865 | | JevBench ECE(公开项) | | 0.049 | 0.037 |
- Kev 未发布 9B 的 JevBench 结果,此为 Kev-8B(Qwen3)。
所有 JevBench 数字基于公开易、标准、难三层(231 项),不含密封评判层,且 Kev/Jev 数字仅限于相同公开项。
不思考时,同一检查点在我们的测试切分(2962 项)上得 0.804,思考时 0.840。
快速开始
要求 Python 3.12 与 CUDA GPU。先执行 pip install -r requirements.txt。下载发布权重并服务:运行 hf download PostHog/jeeves --local-dir jeeves-weights 然后 python -m inference.serve --model jeeves-weights --drafter jeeves-weights/drafter_k4.safetensors --port 8009。也可融合自训检查点:python export.py runs/cispo/final --out runs/fused 再启动服务。随后用 Jev 格式发请求,例如 curl 至 localhost:8009/v1/systemone,JSON 中含状态“鞋子晚到且尺码错、卡上两笔扣费”,问题包括 department 多选、escalate 是/否、frustration 评分。单卡 H100 FP8 上三问题并行思考的响应返回 model 为 jeeves-latest,answers 中 department 选 billing(概率 0.46),escalate noul 0.72,frustration score 1.5(概率 0.04/0.43/0.54),usage 含推理 token 1536,延迟 8141.6 毫秒。
Python
sdk/ 是 Jev 的 Python SDK(typesafe-sdk)的直接替代品,pip install ./sdk 后可用 TypeSafeClient 发送 systemone 请求,状态如“我被重复扣费”,问题含 billing 的 Noul、tone 的 Choice、urgency 的 Score,设 maxthink=768 并返回推理。客户端默认连 http://127.0.0.1:8009(或 JEEVESBASEURL),无需 API key,等待最多 120 秒。
选项
options 可选,Jev 客户端忽略,服务器默认值用 serve 标志设。
| 选项 | 默认 | 效果 | | --- | --- | --- | | think | true | false 时仅从提示回答(约 0.3 秒) | | maxthink | 2560 | 每推理链截断 token 数 | | nothinkthreshold | null | 无思考置信度达此值则不思考回答 | | return_reasoning | false | 响应加每问题推理文本 |
325 开发题上的表现:
| 设置 | 准确率 | 平均推理 token | 中位 / p90 延迟 | | --- | --- | --- | --- | | 全思考 | 0.825 | 1138 | 3.3 秒 / 17.1 秒 | | maxthink 768, nothinkthreshold 0.9 | 0.806 | 344 | 2.0 秒 / 5.6 秒 | | 无思考 | 0.775 | 0 | 约 0.3 秒 |
工作原理
问题、状态和答案载入 Qwen 聊天模板,如 指令
指令
训练
- SFT:2 epoch,8 卡 596 步。Qwen3.5-9B 所有投影加指针头 LoRA r=16,训练于 12 个公开数据集和合成策略数据的 19126 个问题,半数带基模型采样推理链。
- CISPO:624 步计划止步 402 步。9992 个 RL 问题,每题温度 1 下 8 次 rollout,思考 token 上限 2560。
- 校准:开发集拟合单温度,存于检查点。
步 402 止步保最佳校准与开发分,过后头部在饱和 RL 池过锐。
扩散草稿器
冻结模型的扩散视图(drafter/),受 Orthrus 启发。不同于仅支持注意力模型的 Orthrus,它支持 Qwen3.5 的 Gated DeltaNet 层,让掩码 token 交叉注意力至那些层的卷积后键值。
| | 链 token 每秒 | | --- | --- | | 普通图贪婪解码,单问题 | 109 | | 块 4,单问题 | 176(1.6×) | | 块 8,单问题 | 193(1.76×) | | 块 4,八问题批处理 | 共约 960 |
块 4 为默认,因多问题批处理时成本低。
复现
数据
可用 prep 脚本本地建数据集:python -m prep.prep 从 Hugging Face 下载固定版本公开数据。各公开数据集遵其许可。
训练
8 卡数据在 data/,bash run.sh 跑全流程:torchrun --nprocpernode 8 train.py sft --run-dir runs/sft,随后 cispo、test、jevbench、export、drafter.gen、train drafter 等。
仓库
| 路径 | 内容 | | --- | --- | | model/ | Qwen3.5(Gated DeltaNet + 门控注意力)、LoRA、指针头 | | loader/ | 提示格式、分词、批处理 | | prep/ | 数据集构建与合成生成 | | trainer.py, train.py | SFT、CISPO、草稿器训练 | | test.py, jevbench.py, calibrate.py | 评估、JevBench、温度拟合 | | export.py | 融合 LoRA 为独立模型 | | drafter/ | 草稿器模型、链采样、融合投机解码 | | inference/ | FP8 内核、批投机引擎、Jev 兼容服务 | | sdk/ | jeeves_sdk,带推理选项的 Jev SDK 替代 |
局限
- 知识题落后 Jev(MMLU 0.793 对 0.900,MMLU-Pro 0.739 对 0.840)。
- 思考尾延迟慢:全链 p90 17 秒,延迟敏感时用 maxthink 和 nothinkthreshold。
- Kev/Jev 非 JevBench 比较用同源不同项。
- 无语言一致奖励,思考链难解释。
评论
多数人对这类“先推理再决策”的新模型持保留态度,争论主轴是它为了准确率牺牲掉 Jev 式模型又快又便宜的核心优势到底值不值;少数人认为按任务性质混合编排才是正解。与此同时,社区相当一部分精力花在了命名玩梗上,Ask Jeeves 三十年后绕回来成了共同笑点。
认为牺牲速度换取准确率不划算
- 关键质疑在延迟:一旦 p90 到十几秒,用它就不如直接上大模型;Jev 的立身之本正是极低的成本和极快的速度。(较多人) > p90 都 17 秒了,那还不如直接用大模型,Jev 的美妙之处就是便宜到离谱、快得离谱。(@sharih)
- 有用户实测:在 48GB 内存的 M5 Pro 上判断 100 条德语足球推文的反讽,跑了 30 多分钟,正确 68 条,低于 Jev 的 79 条,但高于他试过的其他开源决策模型。(较多人)
怀疑推理前置会抵消 Jev 式模型的价值
- 如果模型在决策前做自回归推理,那单次前向传播、廉价的校准概率这些好处基本就没了;也许意图只是保留类型化输出和概率接口,同时提升难题准确率。(少数人) > 如果模型先做自回归推理再决策,那 Jev 式模型最大的好处——单次前向传播和廉价校准概率——岂不是大部分都放弃了?(@hjun1052)
认为评测与报告方式回避了关键取舍
- 既然声称 Jev 类模型能给出校准概率但准确率偏低,就该把两者的准确率和概率一并列出,否则看不出真正的权衡;此外 9B 这个体量对轻量场景太大、对 LLM 级决策又太小,也缺少与更小和更大模型的横向对照。(较多人) > 既然说 Jev 类模型能给出校准概率但准确率低,那为什么不把两边都摆出来?(@esafak)
认为推理期算力扩展是符合规律的正常演进
- 从思维链提示到 LLM 推理,本质都是推理阶段的算力扩展,因此推理换准确率并不意外。(较多人) > 大模型推理以及更早的思维链提示,本质上都是推理阶段的算力扩展。(@woadwarrior01)
认为按任务性质混合编排才是出路
- 一部分流程走 Jev 式模型,另一部分交给传统 LLM,取决于具体工作性质,这种混合方案才现实;同时也有人调侃 Jev 似乎不到两周就被抢了午饭。(较多人) > 看来这就是方向:按工作性质把流水线拆成 Jev 式部分和传统大模型部分。(@swader999)
对命名和项目历史玩梗
- 这是社区情绪最集中的玩笑:Jeeves 这个名字久违了,Ask Jeeves 三十年绕回原点,还有人惊讶居然还没出现叫 Jehovah 的同类,以及“noul”这个词的来源被吐槽到连作者自己都说讨厌它。(少数人) > 从 Ask Jeeves 到现在,我们花了三十年才绕回原点。(@thm)
有价值的补充
- “noul”做的是一次伯努利试验式判断:不直接选是或否,而是返回陈述为真的校准概率,范围 0.0 到 1.0。
- 有用户追问这类 Jev 式模型的跨领域泛化能力是否真被广泛评估过,以及是否存在支持图像输入的同类分类器。
- 仍待解决的问题包括:是否有基于 Gemma-4、可用自有数据训练的开源决策模型;以及这类模型能否在 Pokémon 基准上击败 Jev。