Hacker News 中文摘要

RSS订阅

Kev:基于Qwen3.5构建的微型Jev式决策模型系列 -- Kev: Tiny Jev-like family of decision models built on top of Qwen3.5

凯夫(kev)是一系列类似Jev的小型决策模型,用户可以自己在本地训练并运行这些模型。此项目由贾里德·帕尔默(jaredpalmer)开源发布,基于通义千问3.5(Qwen3.5)构建,包含不同参数规模的权重供选择。开发者能够获得可定制的决策能力,在不连接云服务的情况下完成模型推理。

正文

你可以自行训练和运行的小型 Jev 类决策模型。

Image 1: CI

Kev 是一系列基于 Qwen3.5 构建的小型决策模型,架构源自《Jev's Architecture Unmasked》。你可以使用预训练权重或自己训练。其 API 与 TypeSafe 的 System One 一致,因此可将他们的 Python SDK 指向你的本地服务器。

Image 2: Weights: Kev-0.8B · 4B · 9B

亮点

Image 3: Frozen eval suites

Image 4: Research log

  • 提供 0.8B、4B 和 9B 模型,附带训练代码和评估数据。
  • 同一请求支持是非题(noul)、选择题(choice)和评分题(score)。
  • 各问题共享输入文本,但彼此不可见。
  • 支持 CUDA 和 Apple Silicon。4B 和 9B 模型在 bf16 下可装入 32 GB Mac;具体表现见“服务性能”。
  • 提供网页 playground,可试用输入并查看选项顺序如何影响答案。

Image 5: License: Apache-2.0

Kev playground

快速开始

需要 Python 3.12+ 和 uv。运行 git clone https://github.com/jaredpalmer/kev.git && cd kev,执行 uv sync --extra serve,再用 KEV_DTYPE=bf16 uv run --extra serve python -m kev.serve --run jaredpalmer/kev-4b --port 8009 在本地启动 Kev-4B。首次运行会下载适配器和基础模型。--run 也接受本地检查点目录或 Hub 修订,如 jaredpalmer/kev-4b@qwen3 代表上一代。

在另一终端发送工单,例如 state 为“鞋子晚到两周且尺码不对,卡上还有两笔扣费”,问题含 department(choice,选项 returns/shipping/billing)、escalate(noul)、frustration(score,标准 Calm/Frustrated/Very angry)。Kev-4B 在 Apple M5 bf16 上的返回示例:department 概率 returns 0.47 最高(shipping 0.28, billing 0.25),escalate noul 0.93,frustration score 1.44(概率 1:0.56, 2:0.44),延迟 495ms。工单同时提及退货、延迟和账单,概率分布体现了这点,这正是返回概率而非单一标签的意义。

Python

通过 uv sync --extra serve 已包含 TypeSafe SDK。示例:创建 TypeSafeClient 指向 http://127.0.0.1:8009,调用 system_one 传入 state 和 questions(用 Noul、Choice、Score 构造),即可打印各答案的 noul、choice、score。

Playground

服务器运行时,另开终端需 Node 20.9+:进入 playground 执行 npm install 与 npm run dev -- -p 3001。打开 localhost:3001 加载预设并编辑文本和问题,按 ⌘↵ 运行。“Packed vs separate”比较同时问与分开问;“Permute”用六种选项顺序跑选择题;还有测试问题隔离的预设。另含国际象棋 demo:棋盘为输入,合法走法为 Choice 选项,Score 题评局面,可人机或自对弈,棋局存 localStorage。

Kev 国际象棋

模型

建议从 Kev-4B 开始。准确与校准优先用 Kev-9B,最小用 Kev-0.8B。三者基于 Qwen3.5 同数据同设置。

| 模型 | 基础 | 训练源准确率 | 新源准确率 | 新源 Brier | 模型卡 | | --- | --- | --- | --- | --- | --- | | Kev-0.8B | Qwen3.5-0.8B-Base | 0.829 / 0.827 | 0.643 / 0.668 | 0.513 / 0.473 | 详情 | | Kev-4B | Qwen3.5-4B-Base | 0.877 / 0.870 | 0.794 / 0.832 | 0.316 / 0.266 | 详情 | | Kev-9B | Qwen3.5-9B-Base | 0.876 / 0.873 | 0.812 / 0.837 | 0.291 / 0.243 | 详情 | | Jev | Hosted | 0.845 / – | 0.857 / – | 0.211 / – | – |

每格为开发/测试。“训练源”指训练集留出样本,“新源”指未训练的数据集与规则类型。所有模型在同开发测试集各评估一次。Kev-9B 新源开发集落后 Jev 约 4.5 点,但因不知 Jev 训练数据,非受控比较。

Kev 和 Jev 按来源的准确性

权重在 Kev collection 和 GitHub release(含 tarball 与 SHA-256)。

上一代(Qwen3)与原型:第一代用 Qwen3 同数据设置,权重仍发布且在 Mac 更快但不再开发。

| 模型 | 基础 | 训练源准确率 | 新源准确率 | 新源 Brier | | --- | --- | --- | --- | --- | | Kev-0.6B (Qwen3) | Qwen3-0.6B-Base | 0.801 / 0.808 | 0.620 / 0.642 | 0.536 / 0.483 | | Kev-4B (Qwen3) | Qwen3-4B-Base | 0.854 / 0.856 | 0.790 / 0.806 | 0.328 / 0.294 | | Kev-8B (Qwen3) | Qwen3-8B-Base | 0.863 / 0.870 | 0.796 / 0.780 | 0.337 / 0.327 |

仅基础变化使两代受控比较:开发集精度差在噪声内;测试集 Kev-9B 领先 Kev-8B 7.3 点(95% CI +2.8~+11.7)Brier 低 0.08,Kev-4B 领先 2.9 点,Kev-0.8B 领先 4.8 点。原型 Kev-0.5B 基于 Qwen2.5 供参考。

API

POST /v1/systemone

state 为待评估文本。每问题含 instructions 及所需答案集。

| 类型 | 条件 | 回答 | | --- | --- | --- | | noul | 可选 true/false 描述 | noul: yes 概率 | | choice | 1–255 选项名+描述/null | choice: 最可能项; probabilities, confidence | | score | 2–255 描述有序 | score: 均值索引从0; legend, probabilities, confidence |

Choice 选项 K>1 时 confidence 为 (p_max − 1/K) / (1 − 1/K),单选项 conf=1。Score conf 近似 TypeSafe 私有公式,非实测准确率。对象数组转标签文本,用户输入分隔符转义,无效请求 422。output_tokens 计序列化答案 token 而非生成 token。

| 方法 | 路径 | 用途 | | --- | --- | --- | | GET | /v1/models | 已载模型与检查点信息 | | POST | /v1/systemone/permute | 不同选项顺序跑单选择题 | | POST | /v1/systemone/separate | 每问题独立前向 |

服务器绑 127.0.0.1 无认证,需自管安全。

工作原理

每检查点为秩 16 LoRA 适配器与指针头。注意力基模型(Qwen3)中 state 与 questions 进同一序列:<state> …state… <q> instructions <opt> option 1 </opt> <opt> option 2 </opt> … <decide>。注意力掩码允许读 state 与自身问题,不可读其他或未来 token。各问题 position IDs 在 state 后重启,使模型算一次 state 独立答每问。

Qwen3.5 混注意力与 Gated DeltaNet(循环忽略掩码),每问独立成行复用 state 缓存,隔离精确。两形式概率一致。指针头对 </opt> 与 <decide> 隐状态打分 softmax 得概率。训练用交叉熵,适配器与头同训,基础固定,格式同 API,未用 Jev 输出。

同/分问概率差小于 4e-6(fp32),但选项顺序仍可能互影响。

服务性能

CUDA 装 flash-linear-attention,H100 五问请求数十毫秒。Apple Silicon 无 DeltaNet 快核,M5 bf16 五问三选项~230 token 中位时间:

| 模型 | 时间 | 上代同请求 | | --- | --- | --- | | Kev-0.8B | 329 ms | Kev-0.6B (Qwen3): 123 ms | | Kev-4B | 779 ms | Kev-4B (Qwen3): 174 ms | | Kev-9B | 约 2 s | Kev-8B (Qwen3): 约 300 ms |

Mac 低延迟暂用 Qwen3。MLX 后端在计划内。注意力模型服务器合并 LoRA fp32、用 SDPA、MPS 填充 64-token、缓存 state 前缀;重复 772-token state 下 Kev-4B(Qwen3) 242ms 而非 861ms。环境变量可关这些优化,bf16 与 fp32 概率差至多 0.017 且最高概率答案不变。

训练

发布模型用 decision-v7:10,000 公开样本、896 生成策略、1,680 生成规则,两 epoch LoRA16 交叉熵。lr 0.8B=1e-4,4B/9B=5e-5。Qwen3.5 适配器覆盖 DeltaNet 投影。命令如 uv run python -m kev.train --suite evals/v7/decision-v7 --base Qwen/Qwen3.5-4B-Base ... 训练 4B 约 1 小时(H100)。

在自己的数据上微调

若问题不同(自有路由、规则、语言),数百标注样本微调常优于改 prompt。JSONL 格式同 API 加 label:choice 为选项名,noul 为 true/false,score 为位置(从0)。留 10–20% 评估。

用 --init_from 从发布检查点起训:如 uv run python -m kev.train --data train.jsonl --base Qwen/Qwen3.5-4B-Base --init_from jaredpalmer/kev-4b ...。基准报告准确率等。--init_from 保留已有知识;从基模重训差(例:836 支持决策,基模微调得分 0.33 vs 发布 0.84,init_from 在新域 0.88)。学习率用小(2e-5),base 匹配检查点。--batch 1 --accum 8 bf16 使 0.8B 上 4GB GPU。Mac 一次一作业,长作业用 Modal。

Modal

每 trial 独享 H100,断连继续。uv run modal token new 后 modal run modal_app.py::smoke 端到端检查;modal deploy 后 modal run modal_app.py::study 跑研究,pull 取结果。锁定测试 locked_test 仅读一次。

评估

evals/ 数据冻结,哈希校验。命令如 uv run python -m kev.benchmark --run jaredpalmer/kev-4b --suite evals/v4/transfer-v4 跑开发数据(测试需 --allow-test)。报告准确率、Brier、校准、自动化占比、顺序变化、隔离。transfer-v9 加 MMLU-Pro 等,Kev-9B 对不知项仍 0.9 置信占 5%(Jev 9%)。发布数字用 fp32。

evals/external/ 含他项目测试:SemIf 144 决策(Kev-9B 0.917, Jev 0.965),scienthoon 900 工单(路由 0.952, tone 0.911)。kev.jev 跑 Jev,kev.compare 比较两次运行。

限制

  • 新源概率校准差:Kev-4B 8.2% 错答赋≥0.9概率(9B 7.5%),需自测阈值。
  • 微调可能损基模任务:日期算术 Qwen3.5-9B 0.82 → Kev-9B 0.72;知识 MMLU 0.74 vs Jev 0.90。
  • Apple Silicon 慢,需 transformers >= 5.17。
  • 选项顺序可变答案,隔离不防此。
  • 训练至多 384 state token +1024 state+1问;服务允 8192,更长未训。
  • 服务器单请求,缓存重复 state 但不批量。

开发

测试:uv run --extra serve python -m pytest tests/test_unit.py tests/test_research.py -q 无需权重;API 测试需运行服务器;playground 跑 lint 与 tsc。

排错:MPS 训练内存不足因多作业;playground 用 localhost:3001;数据集报脚本不支持用 legacy-datasets/banking77。

评论

讨论整体是"看好的同时又急着追问定义":一边有人立刻盘算把 Jev 式决策模型搬到 Qwen3.5 上做路由、样式约束和垃圾过滤,另一边怀疑它跟存在多年的文本分类器、跟基于 RLHF 训练的 Qwen 到底是不是一回事。分歧主轴不在"能不能跑",而在"什么才算 Jev-like"。

认为它最适合替代大模型做高频、低延迟的快速判断

  • 有人希望用它简化内部请求路由逻辑;有人盯上前端开发,想用决策树强制执行样式与组件规则,避免每个新功能都产生样式漂移和重复代码;也有人一直用 27B 级模型过滤垃圾内容,效果近乎完美,唯一短板是算力开销(较多人) > 把样式指南和样式技能都扔掉,改成强制执行的决策树,就不会再出现漂移和重复问题——而这正是我现在最浪费时间的地方。(@nullbio)

怀疑它不过是早就存在的文本分类模型换了个壳

  • 有人直接发问:这跟普通做分类的神经网络有什么区别?他的理解是输入文本、一次性分类、不需要训练数据;另一人补刀说分类模型存在已久,这波 Jev 热潮也许只是让人回到更好理解的简单时代。还有人虽然认可开源社区的热情,却在问除了编程 agent 之外,这类模型到底还有哪些用例(较多人)

认为真正的门槛在训练数据与训练方法,套一个 Jev 式 API 是误读

  • 有观点指出,Jev 的可贵之处在于训练数据和训练方式,架构本身大概率没什么特别,无非文本编码器加并行预测分支;那些只在普通 LLM 上写个 Jev 式接口的项目都抓错了重点,实测多个开源 Jev-like 模型在语言任务上远不如 Jev(少数人,但被这类讨论反复呼应) > 让 Jev 特别的是它的训练数据,是它怎么被训练的;架构本身大概平平无奇。(@andy12_)

质疑在 RLHF 基座上做不出真正的 Jev-like 模型

  • 有人提出范式冲突:如果 Jev 本质上用 RLCD 训练,而你要基于 RLHF 训出来的 Qwen 模型来构建,那结果凭什么算 Jev-like(少数人)

担心没有工具调用会让知识截止变成长期维护负担

  • 决策模型不支持工具调用,知识截止就成了硬伤:本地部署得持续训练,用闭源方案则差不多每个月就要换到新版本(少数人)

乐观的一面:热潮会推动更多应用改用自托管的小决策模型

  • 同一人认为 Jev 走红的好处,是让更多公司和个人意识到自己的应用用一类"系统一"模型就够了,进而选择在本地跑开源或微调版本(少数人)

有价值的补充

  • 有人在本地旧机器上用 12B 稠密模型跑贪吃蛇,单步决策约 220 毫秒,200 步内拿到 16 分,据此推断换更强的机器延迟还能更低,说明这条路在消费级硬件上已经可用(@faangguyindia)
  • 有人顺手指出了两个同类开源项目:logan-markewich 的 jeff 和 bespokelabsai 的 nimble(@webprofusion)
  • 还有冷知识:Jev 作者 Jared 此前做过 After 和 Razzle(@ingen0s)