NanoJev 与 Kev 对比
NanoJev 与 Kev 对比
NanoJev:https://github.com/TianyuCodings/NanoJev
一个 0.6B 并行决策模型:输入状态与问题,直接得到完整概率分布,无需生成答案 token。
Kev:https://github.com/jaredpalmer/kev
一个基于通义千问3.5构建的、类似Jev的小型决策模型家族,你可以在自己的设备上进行训练和运行。
本文所有关键结论均可在两仓库的代码与文档中回溯。引用 kev 文件时使用相对其仓库根目录的路径。
1. 摘要
两者是同源不同路的关系:
- kev:“Small Jev-like decision models you can train and run yourself” —— 面向生产文本决策的模型家族(0.8B / 4B / 9B),主打”可自行训练与部署”,API 与 TypeSafe System One 完全兼容;
- NanoJev:“A nano replica of Jev” —— 单一 0.6B 尺寸的 nano 复刻,主场是游戏决策(Maze / Snake / ViZDoom Basic / Predict Position),用游戏成功率直接对标 Jev API 与未微调 Qwen。
两者都复刻 Jev 的 System One 范式:因果 LM 只做前向(prefill-only)、零输出 token 解码、一次前向直接返回完整概率分布。
2. 共同点:同一范式
| 共同点 | NanoJev | kev |
|---|---|---|
| 范式来源 | Jev(System One) | Jev 架构公开分析(”Jev’s Architecture Unmasked”)+ TypeSafe API |
| 生成方式 | 零 token 解码,直接输出概率 | 零 token 解码(代码注释:we never generate text) |
| 主干处理 | 只取 AutoModel 的 .model,切掉 lm_head |
同样只取 .model,词表头不参与 |
| 题型 | Choice / Boolean / Score | Choice / Noul(yes-no) / Score |
| 底座 | Qwen3 系 | Qwen 系(Qwen3.5 / Qwen3 / Qwen2.5) |
| 概率语义 | 候选集合上的归一化分布,校验总和为 1 | 选项上的 softmax 分布,含校准温度 |
| 控制解耦 | 模型只出分布,排序/采样由控制器负责 | 同样只出分布,题型答案由调用方规则装配 |
3. 项目名片对比
| 维度 | NanoJev | kev |
|---|---|---|
| 定位 | Jev nano 复刻 + 游戏评测场 | 可训练的通用决策模型家族 |
| 尺寸 | 单一 0.6B | 0.8B / 4B / 9B(当前代) |
| 底座 | Qwen3-0.6B | Qwen3.5(0.8B/4B/9B,混合 Gated DeltaNet) |
| 微调方式 | 全参数(两阶段) | LoRA rank 16(底座冻结) |
| 头部 | 自研决策头(含集合注意力) | PointerHead(指针读出) |
| 服务接口 | 自研 /api/evaluate |
TypeSafe System One 兼容 /v1/systemone |
| 许可 | MIT | Apache-2.0 |
4. 定位与任务域
NanoJev
- 主战场是游戏闭环决策:Maze(50×50 迷宫)、Snake、ViZDoom Basic(瞄准射击)、ViZDoom Predict Position(移动靶预判);
- 另保留业务域 toy 示例(客服工单),但评测与演示以游戏为主;
- 核心叙事:证明 0.6B 小模型能学到 Jev 式”状态+问题 → 完整动作分布”的能力,并用同一控制器做三方硬碰硬对比(NanoJev / 真实 Jev API / 未微调 Qwen3-0.6B,见
research/nanojev_comparison_protocol_zh.md)。
kev
- 主战场是文本业务决策:工单路由、升级判断、情绪评分、NLI/政策规则等;
- 核心叙事:把 Jev 架构做成”任何人都能自训练”的开源家族——提供公开权重、微调配方、增量微调入口(
--init_from)、一键部署与 TypeSafe SDK 直连; - 附带知识类评测(MMLU-Pro)用于观察能力边界(知识题明显弱于 Jev,主因是底座)。
5. 模型家族与底座
kev 的代际结构
| 代际 | 底座 | 尺寸 | 状态 |
|---|---|---|---|
| 原型 | Qwen2.5-0.5B | 0.5B | 仅存档参考 |
| 第一代 | Qwen3 | 0.6B / 4B / 8B | 已发布、停止开发(Mac 延迟更优) |
| 当前代 | Qwen3.5 | 0.8B / 4B / 9B | 活跃开发(2026-09-21 更新) |
NanoJev
- 单一尺寸 0.6B,底座 Qwen3-0.6B(revision 固定
c1899de2…); - 一个 checkpoint 统一服务四款游戏。
值得注意的对位
kev 第一代 Kev-0.6B 与 NanoJev 使用同一底座 Qwen3-0.6B、同尺寸,但路线不同:kev 用 LoRA + PointerHead 在文本域达 0.642(新源测试准确率);NanoJev 用全参 + 决策头在游戏域达 128/128(Basic 测试)。任务域不同,数字不可直接横比。
6. 核心架构差异
6.1 头部结构
kev PointerHead(kev/model.py):
1 | |
- 读出位置:
<decide>与每个选项边界</opt>的交叉点积; - 每个 checkpoint 内建校准温度(0.8B 2.41 / 4B 2.14 / 9B 2.30),eval 模式下 logits 除以温度;
- 底座冻结,只训 adapter + 该头。
NanoJev 决策头(scripts/train_toy_decisions.py 的 DecisionModel):
1 | |
- 读出位置:每条候选完整路径的末 token;
- Choice 额外用集合注意力感知候选个数(log K 特征),支持 2–255 动态候选;
- Boolean 取
[0, z]两 logit,Score 取加权期望; - 头部参数量约 20 万,随全参数训练一起更新。
6.2 序列组织与问题隔离
kev:掩码级隔离 + 前缀缓存
- 序列布局:
<state>…<q> 指令 <opt> 选项1 </opt> <opt> 选项2 </opt> … <decide>,用 Qwen 冷门特殊 token(<|fim_prefix|>等)充当分隔符; - block-causal 掩码:token 只能看 state 与本问题分支,不能看其他问题,position id 在 state 后重启;
- 服务端 state 前缀 KV 缓存:重复文档只付问题分支的算力;
- Qwen3.5 混合底座(Gated DeltaNet 递归层不服从掩码)改用”行形式”(每问题一行)+ 同样的前缀缓存;
- 训练上下文:state ≤ 384 token、问题分支 ≤ 1024、整包 ≤ 2048;服务上限 8192。
NanoJev:批处理级隔离,无前缀共享
- 每条候选路径是完整独立序列:
State:…\nQuestion:…\nCandidate:\n{候选}\nDecision:+ EOS; - 一次前向批量处理独立 state / 问题 / 候选路径(32 states、96 questions、256 paths 为演示服务上限);
- 候选路径重复 state 前缀,明确声明 batching does not imply shared-prefix computation(
docs/TYPESAFE_CONTRACT.md); - 隔离来自”路径之间无 cross-attention”,而非掩码技巧。
6.3 微调方式
| 项 | NanoJev | kev |
|---|---|---|
| 方式 | 全参数两阶段:head warmup(冻结主干,lr=1e-3)→ full(主干 lr=1e-5、头 lr=1e-4) | LoRA rank 16 + 头联合训练,底座冻结 |
| 优化器 | AdamW、weight_decay 0.01、grad clip 1.0 | 训练脚本默认(LR 0.8B 1e-4 / 4B·9B 5e-5) |
| 轮次 | 按 step 控制(如 step-400 checkpoint) | 2 epochs |
| 领域增量 | 无公开的”从已发布权重再训”入口 | --init_from 从已发布 checkpoint 热启动,lr ≤ 2e-5 |
| 硬件 | 单卡 GPU(BF16 实验线) | H100(0.8B 约 20 分钟 / 4B 约 1 小时),Modal 云训练 |
7. 训练数据与监督来源
| 项 | NanoJev | kev |
|---|---|---|
| 主体 | 18,760 条游戏决策问题/数据变体(训练分区 10,898,过滤后 10,893) | decision-v7:10,000 条来自 10 个公开数据集 + 896 条生成 policy + 1,680 条规则结构 |
| 专家数据 | 896 局 Predict Position 专家回合(17,498 决策步) | — |
| 监督形态 | ① Jev API 软目标 ② 专家动作 ③ 专家分布 ④ 观测结局 | 交叉熵硬标签(选项标签) |
| 与 Jev 的关系 | 有一条训练线直接使用 Jev API 输出分布做软目标(v3_teacher_coords_multi_seed17) |
明确 “No Jev outputs were used for training”;Jev 仅用于评测对比 |
| 分区 | train / dev / calibration / test / OOD 五分区 | train / calibration / development / test 四分区,manifest 记录 sha256 |
8. 概率校准
- kev:每个 checkpoint 内建单一温度(~2.1–2.4),在分布内开发集上拟合,推理时自动应用;改变温度不改变 argmax,只改变置信度;提供 ECE 审计与分组交叉验证(OOF)复核。
- NanoJev:输出原始分布(T=1),不做温度校准;概率本身是分析对象(如迷宫评测统计最优动作上的概率质量 p_optimal),校准数据用于评估而非改写输出。
9. 服务与生态
| 项 | NanoJev | kev |
|---|---|---|
| 端点 | /api/evaluate(POST)、/api/health |
/v1/systemone、/v1/models、/v1/systemone/permute、/v1/systemone/separate |
| 协议 | 自研 JSON 协议 | TypeSafe System One 兼容(typesafe_sdk 可直连,模型名 kev-latest/jev-latest) |
| 认证 | 无(仅禁跨源) | 可选 KEV_API_KEY(Bearer) |
| 请求结构 | state + questions + criteria(choice 2–255 / boolean / score 2–10) | state + questions(choice 1–255 / noul / score 1–255),含 confidence 字段 |
| 加速 | 批处理;model_loaded_once,权重加载一次 |
state 前缀 KV 缓存;H100 上 5 问题几十毫秒 |
| 部署形态 | 本地 HTTPServer + 静态 web 演示 | FastAPI + Next.js playground + 象棋 demo + HF Space(ZeroGPU)+ MLX(Apple Silicon) |
10. 评测体系
NanoJev:游戏闭环成功率 + 三方对比
274 案例测试集(同观察接口、同候选动作、同种子 ε-greedy 控制器):
| 模型 | Maze | Snake | Basic | Predict Position |
|---|---|---|---|---|
| NanoJev | 4/10 | 8/8 | 128/128 | 27/128 |
| Jev(API) | 7/10 | 8/8 | 56/128 | 11/128 |
| 未微调 Qwen3-0.6B | 2/10 | 0/8 | 56/128 | 11/128 |
kev:公开数据集指标 + OOD + 同题 Jev 对比
- 指标:accuracy、Brier、ECE、选择性覆盖/AURC、选项置换敏感性、问题隔离;
- 内源/新源分开报告(新源 = 未参与训练的数据集与规则类型):
| 模型 | 训练源(dev/test) | 新源(dev/test) |
|---|---|---|
| Kev-9B | 0.872 / 0.874 | 0.822 / 0.852 |
| Kev-4B | 0.872 / 0.871 | 0.797 / 0.837 |
| Kev-0.8B | 0.825 / 0.834 | 0.652 / 0.684 |
| Jev | 0.845 / – | 0.857 / – |
- 外部集:WANLI(Kev-9B 0.703 vs Jev 0.758)、TypeSafe 102 题(89 可答行上 agreement Kev-4B 0.856 vs Jev 0.891)、SemIf、scienthoon;
- 差距声明:Kev-9B 新源仍落后 Jev 3.5 个点,且两者训练数据不同、不是受控对比。
11. 工程与研究风格
| 项 | NanoJev | kev |
|---|---|---|
| 研究记录 | research/ 目录:协议、审计、回执、SHA256 核验(中文为主) |
PLAN.md 142KB 活体研究日志(英文) |
| 证据纪律 | 三方对比协议冻结、逐局模拟器回放核验、媒体清单 | 冻结 eval suites + manifest 哈希、claims.json + CI 校验所有公开数字 |
| 实验设施 | 定向实验线(APPO 监督、RLCD 后训练、Predict Position 专家) | kev.experiment 配置化实验 + kev.autoresearch 自动搜索 + Modal 队列 |
| 视觉资产 | 三面板同步回放、GIF/MP4、本地 web 播放器 | playground、象棋 demo、HF Space |
| 许可 | MIT | Apache-2.0 |
12. 速查表
| 问题 | NanoJev | kev |
|---|---|---|
| 我要做文本业务决策(路由/分类/评分)落地方案 | 有 toy 示例,但非主战场 | 首选:TypeSafe 兼容 + 公开权重 + 微调入口 |
| 我要看 0.6B 小模型与 Jev 的硬碰硬证据 | 首选:四游戏测试集三方对比 | 相关:Kev-0.6B(Qwen3)文本域对照 |
| 我要自己训练(少显存/少数据) | 全参两阶段,需要完整反向传播 | LoRA 更省,--init_from 支持领域增量 |
| 我要 Apple Silicon 上跑 | 未提供 MLX 路径 | MLX 后端(DeltaNet Metal 内核) |
| 我要复现整套评测 | 游戏闭环 + 模拟器回放 | 冻结 suites 一键 benchmark |
| 我关心概率校准 | 原始分布 + 离线分析 | 内建温度校准 + ECE 报告 |
| 我想接 TypeSafe SDK | 契约研究文档(未提供兼容端点) | 直接兼容 |
13. 结论
- 目标不同:kev 是把 Jev 范式做成”可生产、可自训练”的通用模型家族;NanoJev 是把 Jev 范式缩到 0.6B 并用游戏闭环验证能力边界的复刻研究。
- 方法不同:kev = LoRA + PointerHead + 掩码级隔离 + 前缀缓存;NanoJev = 全参 + 决策头(集合注意力)+ 完整路径批处理。
- 与 Jev 的关系不同:NanoJev 部分训练线以 Jev 为教师;kev 训练完全不用 Jev 输出,仅在评测中对比。
- 互补性:kev 的工程化生态(SDK 兼容、MLX、Modal、冻结 suites)适合落地与持续迭代;NanoJev 的审计式对比(同控制器、模拟器回放、三方同步)适合做能力验证与证据链。
14. 证据索引
NanoJev
| 内容 | 位置 |
|---|---|
| 项目定位与四游戏成绩 | README.md |
| 决策头定义与训练循环 | scripts/train_toy_decisions.py |
| 统一训练脚本 | scripts/train_unified_games.py |
| 推理与 checkpoint 结构 | scripts/predict_toy_decisions.py |
| 本地服务 | scripts/serve_decisions.py |
| TypeSafe 契约对照(含”无前缀共享”声明) | docs/TYPESAFE_CONTRACT.md |
| 三方对比协议 | research/nanojev_comparison_protocol_zh.md |
| 监督实验线 | docs/APPO_SUPERVISION.md、docs/RLCD_EXPERIMENT.md |
kev
| 内容 | 位置 |
|---|---|
| 项目定位、模型表、How It Works、训练配方、评测与局限 | README.md |
| PointerHead / DecisionModel / block-causal 掩码 / 前缀缓存 | kev/model.py |
| TypeSafe 兼容服务端点 | kev/serve.py |
| 校准温度与代际信息 | AGENTS.md |
| 研究日志 | PLAN.md |
| 冻结评测 suites | evals/ |
NanoJev 与 Kev 对比
http://www.horus-space.cloud/posts/f6fade02.html