用 25 行 Python 实现 Jev

查看原文 HN 讨论

文章摘要

这是本地 LLM 推理库 NobodyWho 团队(作者 Duarte O. Carmo)9 月 22 日发的一篇短文,文末自称是”恶搞博文”,调侃的对象是那一周刷屏 Twitter 的 Jev。

先交代背景:Jev 是什么。 9 月 15 日,创业公司 TypeSafe AI 结束两年隐身期,发布了它称为”System One 模型”的新品类,首个公开模型就叫 Jev。创始人 Diogo Almeida 曾在 OpenAI 参与 ChatGPT 背后的指令跟随研究。按官方说法,Jev 放弃了生成字符串的能力,改为”非结构化状态进,带类型的概率决策出”:候选答案由开发者事先定义,模型一次并行给出每个选项的概率和置信度,所以”不会有类型错误,也不会幻觉”。它用一种叫 RLCD(面向校准决策的强化学习)的方法训练,官方宣称在”System One 形状”的查询上与前沿 LLM 智能相当,速度快 40 到 200 倍,端到端 70 到 500 毫秒,输入每百万 token 0.042 美元,输出免费。官方的定位是”智能 if 语句”:分类、路由、打分、抽取、给 LLM 输出做守卫。

NobodyWho 的回应是:我们不这么认为,这是 25 行 Python 版的 Jev。 全文就三段代码:

  1. 加载模型:用 llama-cpp-python 从 Hugging Face 拉一个 GGUF 模型(示例用 Qwen3-0.6B 的 8-bit 量化版),n_ctx=512,打开 logits_all=True 以便拿到每个位置的 logits。作者特意注明”其实任何 GGUF 模型都行”。
  2. 拼提示词、定义选项:标签 A/B/C 对应”正常邮件 / 垃圾邮件 / 钓鱼邮件”,待分类的邮件是”工资部门让你在一个非公司域名的登录页输入密码”。提示词手写成 Qwen 的 ChatML 格式,关键一步是在 assistant 段预先塞一个空的 <think>\n\n</think>,直接跳过思考阶段,然后对整个提示词做一次 eval。
  3. 把 logits 揉成概率:取最后一个位置的 logits,只看 “A”“B”“C” 三个 token 各自的 logit,用 logaddexp.reduce 做 log-softmax 归一化,再取指数得到概率。输出结果是:正常 0.031、垃圾 0.084、钓鱼 0.885。

作者写道:”就这样。这就是 Jev。”

接着是一段自嘲式的”但你不懂 Jev!”:是的我们知道,我们没把它叫作 System One 决策模型,没调 API,没造一堆合成数据,也没用 RLCD 去校准决策和概率(顺手附了一篇指出 Jev 的概率”并不总是对的”的第三方文章链接)。然后是”但没错,这就是 Jev”:它能分类,给一个带选项的提示词就输出概率;它快;它在本地跑;你的数据不会发到任何地方。最后一句落到自家产品——”我们喜欢不把你的数据发到别处,来看看 NobodyWho”。文末括号注明这是恶搞文,并推荐了更完整的开源复刻:OpenJev、openjev-sglang,以及基于 DiffusionGemma 的 OpenJev。

这篇文章的技术内核其实是一个老技巧:把分类问题变成”只读取候选 token 的下一个 token 概率”。因为模型对词表里每个 token 都会给出 logit,你只取自己关心的那几个再归一化,输出在类型上天然只能落在给定选项里,这就是它”不会格式错误”的来源。至于 Jev 真正声称的卖点(校准、并行回答几十个问题、前沿级准确率),文章基本没有触及,而这恰恰成了评论区的火力焦点。

HN 评论精华

212 条评论,682 分。讨论分成两派:一派认为这篇文章戳破了营销泡沫,另一派认为它是”用 FTP 就能做 Dropbox”式的偷换概念。中间夹着大量关于”怎样从 LLM 的 logprob 里拿到靠谱分类概率”的实战经验,这部分含金量最高。

“用 FTP 做 Dropbox”的既视感。 shawabawa3 的评论很有代表性:”浓浓的’你可以用 curlftpfs 挂载 FTP 再在上面跑 SVN 来轻松做出 Dropbox’的味道。你做出了像 Jev 的东西,但不是 Jev——Jev 被炒得这么热,正是因为它的输出够好。”ramon156 说这就是经典的”10 行代码实现 OneDrive”,技术上没错但根本不是一回事。baobabKoodaa 在多个子帖里反复开火:Jev 声称的是前沿智能,而这里拿一个 8-bit 量化的 0.6B Qwen 冒充,”没有哪个宇宙里这个说法在技术上成立”。他还批评文末虽然写了”恶搞”,却又在同一句里推荐那些”其实差不多的”OpenJev 实现,并未暗示它们也是玩笑。

但也有人指出 Jev 本身可能就没那么神秘。 c7b 提到,据传直到不久前,你让 Jev 拼出自己的身份它会拼成 Q-w-e-n,”所以我们大可以假设他们做的事至少和这篇博文差不多——只不过这位作者选择告诉了我们”。原本同情 Jev 团队的 dhsysusbsjsi 看到后回复:”如果属实,我收回原帖。”hbrn 说得更直接:”我们仍然没有一个又快又准的分类器,我们只有一家声称做出了它、却拿不出证据的公司。”thephyber 还翻出 TypeSafe 的服务条款禁止用模型输出开发竞品、做蒸馏或逆向,暗示竞争性基准测试也受限制,the_duke 补了一句 Oracle 数据库同样禁止公开发布基准测试。

性能到底能不能对标? ricardobeat 挑战道:你能在 200 毫秒内同时回答 45 个问题、零格式错误、还有像样的基准吗?davide 算了一笔账:45 个问题约 1300 个 token,按 5500 token/s 的预填充速度约 0.24 秒,每个问题只需预测一两个 token,可以一批并行算完;零格式错误”很简单,只有允许的输出可以被选中”。他的判断是 Jev 本来就是低垂的果实,”几周后大概没人在乎了”。WithinReason 补充说还可以巧妙操纵注意力掩码让多个问题共享上下文。onion2k 则提醒,说”快”必须是相对的:如果比 Jev 慢 100 倍,就不该叫快。

关于从 logprob 里拿分类概率的实战经验,这是本帖最有价值的部分。 sigmoid10 指出直接读 logprob 在聊天模型上”总是有点恶心”:它们被训练来写散文,模型可能其实想说”A phishing attempt seems likely, so answer (C)”,结果第一个 token 的 “A” 反而概率最高。他更推荐结构化输出直接生成 “Legitimate”/”Spam”/”Phishing” 这样的多 token 序列。dTal 分享了自己去年把这套方法调到”极其可靠”的四条经验:

  1. 必须检查选项 token 的概率之和占据主导(至少 95%,最好 99%),否则说明模型没按指令走,受约束解码也有同样问题;
  2. 要多次询问并轮换选项与字母的对应关系再取平均,因为 LLM 在拿不准时出人意料地偏爱 “A”;
  3. 把提示词伪装成测验中间的某一题效果更好,”第 1 题”带着”第 12 题”没有的包袱;
  4. 对分词要极其小心。

他强调自己用 “Answer: (“ 这种格式后选项覆盖率稳定在 99%,而模糊情况下对 A 的偏好可高达 70%,远远盖过那不到 1% 的格式违规。

ainch 的经验更悲观:神经网络普遍存在校准问题,他几年前用 GPT-4 做分类,那些本该升级给人工的模糊样本,模型经常给出 99.8% 的概率,正确样本则是 99.99%。porridgeraisin 强调这正是 Jev 的核心卖点:即使用 NLL 这类恰当的评分函数,也不足以保证深度网络的校准,需要好的后训练。关于 Jev 的”置信度”,wongarsu 查了官方文档,发现它只是概率分布的一个函数;kantahayashi 给出了公式:N 个选项时为 (N × 最大概率 − 1) / (N − 1),”也就是说置信度只是最大概率换了个算法,不是独立信号”。

antirez 贡献了一个被大量讨论的小技巧: 由于 LLM 的注意力是带掩码的,把选项放在待分析的正文(邮件)之前,模型读正文时就已经知道要找什么,能用更多 token 去构建针对这一任务的状态(BERT 没有掩码所以无此问题)。另一个有效技巧是把问题重复两遍:”为清晰起见我重复一下任务和标签……”。jf 当场验证:用 Gemma4-26B-A4B 对一封”工资部门发来一个 YouTube 链接、点开放的是一首歌”的邮件分类,选项放在正文后时”钓鱼”和”Rickroll”几乎五五开(47 比 51),选项放在正文前时 Rickroll 以 94 比 1 胜出;换成 Gemma4-12B 则对顺序不太敏感。stellalo 附上了相关论文《Prompt Repetition Improves Non-Reasoning LLMs》。这条引出了一长串关于”重复”的文字游戏接龙,ThePhysicist 的感慨是:”活在这个时代真好,把问题对模型重复两遍来提高准确率。”

“System One”这个说法本身也被拿来辩论。 alun 认为人类做分类任务用的其实是 System Two,所以这是营销叙事;xg15 和 perlgeek 反驳说物体识别、”一看就知道”这类判断明明是 System One;alun 回应 Jev 自己列的用例是安全事件分诊、发票审批、客服升级,这些在人类那里需要 System Two;int_19h 的解释是:它们在人类身上是 System Two,只是因为我们没进化出相应的硬件电路,而模型可以被训练成不经语言推理就回答。hadlock 补充了一段行业八卦:Laya 比 Jev 早一年上市,却因为没人懂怎么用、营销不力而失败,Jev 靠这套叙事没有失败。

其他值得一提的角度。 iLoveOncall 讨厌”X 行代码实现 Y”却导入几十万行库的标题党,program_whiz 反驳说用现成工具展示核心原理恰恰能祛魅,就像有人发明”回归估计验证器”而你指出它就是 nn.Linear(d_in, 1)。jorisw 和 recallingmemory 直言这就是内容营销,”他们的产品就是笑点,这是广告”。visarga 介绍了自己基于嵌入 + 岭回归的 semlabel:用编码代理给样本打标签,训练不到一秒,还能用保形预测校准置信度,比 Jev 快二三十倍、免费、跑在 CPU 上。olooney 说他本想写一篇以 Jev 为引子讲校准指标、Dutch book 论证和保序回归事后重校准的博文,但因为讨论氛围太不健康——要么嘲讽 Jev,要么狂灌迷魂汤,要么只谈炒作和品牌而不谈数学——大概不会写了;随后他发现两天前已经有预印本做了几乎一样的案例研究,结论不出所料:重校准帮助巨大。