open-jev / PROJECT STORY
A project in the making · 开放研究记录

Open-Jev是怎样做出来的

从 Jev 的一条发布帖和几段演示出发,我们把“小模型直接做决策”变成了可以训练、检查、评测和复现的开放项目。这一页记录它的起点、设计选择,以及下一轮正在解决的问题。

共享上下文、候选评分、决策概率 CONTEXT → CANDIDATES → DECISION 同一份上下文 + 问题 候选 A候选 B候选 C score s₁score s₂score s₃ 归一化为候选概率p₁ + p₂ + p₃ = 1
核心想法:把答案空间写进输入,
让同一个评分器处理不同的决策。
2B / 9B已公开 LoRA、决策头与校准参数
3 种接口Choice · Noul · Score
231 × 5五路公开 JevBench 基线,全部完成
一条发布帖,变成一个研究问题

如果模型直接给出决策概率呢?

最初的目标很直接:看完 Jev 的发布、jevinci 和社区游戏演示后,做一个开放版本,从 Qwen 2B、9B、27B 三个规模开始。

演示横跨客服、游戏、绘画和各种 agent 工作流。它们共享一个结构:先给出环境状态,再问一个明确的问题,最后从有限的动作或等级中作出判断。我们沿着这个结构,把每个场景拆成上下文、问题、候选、参考判据,逐步接上数据生成、训练、服务和回放。

同一个模型,能否在不同领域里,
对“下一步选什么”给出有用的概率?

仓库最早的记录先建立了 typed-decision 训练与校准流程,随后加入客服流程、可重放的 Doom 轨迹、Wiki 导航,以及本地游戏和工作流控制。功能扩展从一开始就伴随着数据切分、输入长度和 checkpoint 身份检查。

Open-Jev 是受 Jev 启发的独立实现。Jev 的私有 RLCD 方法、架构和训练数据未公开,因此这里不声称复现其内部算法或宣传中的加速倍数。

把候选放进输入,
让评分头跨领域共享

客服可以选“退款、补发、升级处理”,游戏可以选“左移、右移、开火”。候选集合会变,参数不需要随之增加一组分类头。每个模型规模内部使用一套 LoRA 和一个输出标量的线性头;不同候选的文字描述,让共享 backbone 产生不同的表示。

DYNAMIC CANDIDATES

从当前候选中选择

每个候选得到一个分数,再在同一道问题内归一化。候选可以是动作、文档、工具或其他明确的选项。

输入 状态 + 问题 + 候选 A/B/C
输出 各候选概率与所选候选
p = softmax([s₁, s₂, s₃] / T)

训练时,不同来源都转换为相同的决策行,保留各自的候选和目标分布,再混合、打乱。每行只在自己的候选集合内计算损失。最初的完整训练采用 NLL 加 Brier 项,之后在独立 calibration split 上拟合温度;测试标签不用于优化。

共同前缀,只算一次?实验功能

这个想法已经实现:复用请求与问题的 token 前缀,到候选处再分叉。Qwen 的混合注意力还需要隔离 KV、卷积和循环状态。H100 检查中,11 个工作负载有 9 个超过预先设定的概率误差阈值,虽然最终所选决策一致,缓存仍默认关闭

机制与边界:多领域训练说明 · 前缀复用与数值检查

“支持一个场景”,需要什么数据?

一个能调用的接口只是起点。我们需要把场景变成有标签、有来源、有切分、还能检查失败情况的训练与评测单元。

首轮围绕客服、Doom、Wiki 等演示准备任务,之后加入工作流、Snake、井字棋、runner、platformer、绘画几何和独立推理控制。扩展则继续覆盖浏览器、drone、引用、实体、金额、联系方式、上下文保留、检索和多语邮件处理。

RELEASE-V2 / 已训练80,816

每个发布模型的训练行数

2B / 9B 各完整训练一遍。对应数据集全 split 合计 115,821 行。

EXPANSION / 已准备408,884

更广的准备数据库存

25 个任务来源标识。准备完成不代表已被发布模型学会。

HARD V2 / 新训练配方148,639

新一轮实际选入训练的行

新社区控制 + WANLI + 有上限的旧任务回放;保留独立评测切分。

先按来源和场景分组

同一文档、轨迹或反事实家族保持在同一 split,避免把近似重复当作泛化。

模型只看必要输入

state、question、kind、options 进入模型;标签、来源、oracle 和审计字段留在外面。

区分行数与独立样本

一个场景可产生多个问题、像素或候选视角。行数不能直接解释为独立文档或游戏局数。

最初 2B / 9B 各完成 26,452 条 test + OOD 评测。硬标签 test 准确率分别为 94.71% / 97.54%,OOD 为 86.02% / 91.97%。这些数字属于当时的 release-v2 留出集,不能替代后面的外部 JevBench 结果。

把研究过程,做成能查看的项目

代码进入公开仓库,数据与 2B / 9B 模型组件放到 Hugging Face,项目网站承载结果、方法和视频。模型发布包包含 LoRA、决策头和校准参数,运行时仍需下载锁定版本的 Qwen 基座。

客服与工单安全与 agent 轨迹发票与抽取游戏决策概率绘画浏览器动作检索与 RAG多语邮件

游戏演示,改成完整的过程

前往视频画廊 ↗

从难以读懂的总览,改为连续呈现已保存的游戏状态与最终目标。以下图形仅作章节图示,实际视频和证据位于画廊。

Doom / ViZDoom

完整重放 11 次已保存决策,原生引擎核对观测、奖励与终局,记录 1 次击杀。

T-Rex runner

连续展示到达终点的 episode;所选回放避开了全部 12 个障碍。

Wiki navigation

按保存的状态与动作,连续经过两次链接选择,到达目标页面。

接口可运行快照判断正确完整任务成功率

这些是早期 pilot 的已核验成功 episode,不是后来完整训练 checkpoint 的游戏胜率。公开画廊精选成功回放,并明确标识接口讲解;失败记录仍保留在评测报告中。浏览器和 drone 的状态快照判断也与完整任务成功分开记录。播放时长不代表推理延迟。

已发布的项目与对比长帖 ↗

外部难题,把下一步变得更明确

我们先做了固定工作负载的质量与延迟对比,再加入 JevBench 的全部可用公开任务。结果说明:开放小模型已经能做不少决策,更难的推理仍有明显差距。

JevBench 公开子集 · 五路均已完成并审计72 original + 48 easy + 111 hard = 231
模型总体正确 / 231总体准确率Hard 正确 / 111Hard 准确率
Open-Jev 2B已发布 checkpoint150 / 23164.94%46 / 11141.44%
Open-Jev 9B已发布 checkpoint179 / 23177.49%66 / 11159.46%
Jev 1.13.0原生概率 API200 / 23186.58%81 / 11172.97%
GPT-5.6 Lunareasoning: none206 / 23189.18%89 / 11180.18%
GPT-6 Astrareasoning: low231 / 231100.00%111 / 111100.00%

窄屏可横向滑动表格。这是 231 道公开题的成绩,不是完整 534 题 benchmark。Open-Jev 与 Jev 返回原生概率,GPT 按约束 JSON 输出口述概率。上游两类适配器在 139 道 Choice 中有 119 道候选顺序不同,因此它们采用相同任务和评分协议,但并非完全同序、同请求字节的对照。

为什么单独看 Hard?

2B 和 9B 在 48 道 easy 题上都全对,但在 hard 上分别为 46 / 111 和 66 / 111。下一轮因此集中补多条件组合、否定与例外、冲突证据、时间范围和缺证据时的弃权。

结果如何确认?

五路各 231 次请求均成功完成。审计重放原始响应、请求记录和评分,并校验模型身份。Jev 有 1 个向量采用上游允许的舍入归一化;其余四路均通过严格概率校验。

效率也取决于问题的形状

下面来自另一组重复延迟实验:完整响应 P50,单位 ms。每条路径先预热 3 次,再测量 20 次,并发为 1。

客服请求 · 8 个 Noul 问题

短决策的部署延迟

Open 2B
85
Jev
295
Luna
918
Astra
1,938

1,024 state tokens · 32 候选

候选规模扩大后的部署延迟

Open 2B
1,016
Jev
301
Luna
690
Astra
1,388

2B 使用本地单张 H100 与 loopback HTTP,其他模型走托管 HTTPS API;硬件和网络不同。85 ms 不能外推为所有任务的速度,也不能解释为同硬件加速比。上述重复延迟实验与 JevBench 的异质任务单次计时分开记录,前缀缓存均未用于这些 Open-Jev 对照。

再看一点评分与概率的细节

采用锁定版本的上游 JevBench scorer:严格概率和容差为 0.001,舍入容差为 0.02;并列最大值按标签字典序处理。Score 准确率比较 argmax 等级与参考等级,期望值的 ordinal MAE 单独报告。原生概率与 GPT 口述概率的校准指标只描述此协议下返回的分布。完整方法、各子集与审计链接都保留在公开报告。

把难场景带入下一轮训练

下一轮沿着已核验的社区用例扩充数据:客服、受约束检索、合同条款、RAG 证据、浏览器与工具、shell-history 选择、游戏规划、显式 rubric 判断。重点放在会改变决策的条件,而不是简单地替换人物或候选名称。

多条件组合否定与例外时效与冲突近似困难负例多跳证据缺证据与弃权

社区控制集新增 51,200 行:8 个 domain、80 个原创 policy family,来自 6,400 个基础场景和 25,600 个不同上下文。每组反事实只改变一个可见事实,并且改变决策。独立审计器直接解析可见规则,核对了全部标签和 19,200 条反事实边。

为补充结构化规则数据,另引入 WANLI 的自然语言推断:保留原始 premise、hypothesis 与人工审核标签,转换为支持、矛盾、未知三个候选。转换后保留 101,207 行,其中 82,045 行进入训练;官方 test 的相连 seed / premise 组提前隔离。

新社区控制
30,720

完整 family 留出;新数据全 split 共 51,200 行。

WANLI 推断
82,045

一个英文自然语言来源,保留 CC BY 4.0 归属。

旧任务回放
35,874

每个旧来源至多选 1,500 训练行,保留既有能力。

训练合计 148,639 行;保留各来源 holdout 后,整个混合数据全 split 共 328,672 行。社区原始数据为 CC0,WANLI 为 CC BY 4.0,混合数据保留各自许可。数据中的不同任务视角仍然相关。

这些新社区数据是显式规则与结构化属性控制。它们不等同于 CUAD 标注、自然合同审阅、人类偏好数据或真实赛车/UT99 轨迹;中、日、韩部分是配合英文规则的混合语言问题。它们用于训练新的判断模式,效果要由随后独立的外部评测回答。

下一轮线索还在扩充:已核验的社区方向还包括 skills / model routing、SQL 审计、CMS 多标签分类,以及是否需要审批的判断。我们正在继续整理这些用例与来源,准备相应的数据和留出评测;它们尚不代表已训练能力,也没有新增模型成绩。

新 27B 训练阶段

已在 N1-1 前四张 H100 开始参数更新;2026-09-21 07:31 UTC 核验到第 616 步,loss 与梯度均为有限值。训练过程正常不代表效果提升,最终评测尚未完成。

训练中
初始化
旧阶段第 26,500 步权重
训练数据
148,639 行
计划步数
37,160 steps
训练资源
4 × H100 · GPU 0–3

从旧 LoRA / head 权重初始化,新建 optimizer、随机流与数据游标。完成后依次校准、重载验证,再使用同一套 231 道公开 JevBench 任务评估最终 checkpoint。

JevBench 与 JF100 保持评测用途,没有作为本轮生成器的素材。词法重叠检查未发现匹配,但不能排除语义改写或基座预训练接触。未来的新 27B 与发布版 9B 比较还同时改变了模型规模和早期训练经历,不能单独归因于这一批新数据。

下一版社区数据已冻结并通过完整 tokenizer 检查,队列正等待当前训练与评测结束:真实意图路由、可执行 SQL、审批与 CMS 共 129,288 条新决策,其中 74,921 条用于训练;加上 21,928 条旧任务回放,训练集为 96,849 条。另设 1,280 条专项 test / OOD 评测,含 840 个原始分组,与训练、校准和验证集隔离。相同合成规则下的保留集仍可能偏乐观,需结合外部 JevBench 判断。内部评测方法

从演示里发现问题,
用开放的数据、模型和证据继续回答。

Open-Jev 的故事还在继续。下一次更新,应当带着新的可复核结果。