文档导航

Kev-4B

模型摘要

Kev-4B 是一个决策模型。它读取一份文档(状态)和一组关于它的带类型问题,并在一次前向传播里返回每个问题所带选项上的校准概率分布,不生成文本。它面向对文档做分类、路由、分诊或检查、并且需要可以设阈值的概率(例如把不确定的案例送人工复核)的开发者。它实现 TypeSafe 公开的 System One API(POST /v1/systemone),所以 TypeSafe SDK 可以原样对它使用。它是 Qwen3.5-4B-Base 上的一个 LoRA 适配器和一个指针头,小到能放进一张 24 GB GPU 或一台 32 GB 的 Apple Silicon Mac。本卡描述 Kev 1.0 中的这个 checkpoint,首次发布于 2026-09-24。

模型详情

开发者 Jared Palmer(github.com/jaredpalmer/kev)
模型类型 决策模型:把因果语言模型主干只做 prefill,配一个在选项上的指针头
主干 Qwen/Qwen3.5-4B-Base(revision 1001bb4d):32 层,24 个 Gated DeltaNet(线性注意力)和 8 个完全注意力,hidden size 2,560;冻结
适配器 LoRA,rank 16,α 32,作用于注意力、MLP 和 DeltaNet 投影(33.8M 参数)
指针头 指针头:两个投影把每个选项的收尾 token 与问题的末尾 token 打分;softmax 给出概率
精度 用 bf16 autocast 在 fp32 权重上训练;以 bf16 服务(加载时把适配器合并进基座);以 fp32 评测
上下文 服务最多 65,536 tokens 的 state,另外每个问题至少 8,192 tokens。训练 state 最多 7,552 tokens。
已验证上下文长度 8,192 tokens(见 长期文档)
校准 单个温度,T = 2.41,存在 head.pt 中,加载时施加
语言 英语
许可证 Apache-2.0(适配器与指针头);基座模型为 Apache-2.0
版本 Kev 1.0:jaredpalmer/kev-4b 的 main,revision 139fdd94(发布于 2026-09-24)
之前的版本 Hub tag r8-documents-release(仅文档阶段)、night2-du-release、v7-base 和 qwen3(Qwen3-4B 世代)

输入。 一个 state(文本,或渲染为带标签文本的 JSON 对象或数组)和任意数量的具名问题,每个问题属于三种类型之一:

类型 选项 输出
choice 1–255 个具名选项,每个带可选描述 每个选项一个概率、最可能的选项和一个置信度
score 1–255 个有序档位 每个档位一个概率和期望档位索引
noul 是 / 否,带可选描述 为是的概率

每个问题都作为它自己的一行作答,从共享 state 续接,所以问题之间不能相互影响;state 只计算一次并缓存。

预期用途

  • 几千 token 文档上的带类型决策:分类、路由、分诊、抽取选择、政策与资格检查,以及对照明示判据评判一个提议答案。
  • 依据置信度行动的工作流:自动化有把握的案例、把其余排队,阈值在用户自己工作负载的标注样本上冻结。
  • 在一般硬件上对 System One 端点做自托管、即插即用的替换,以及作为在用户自己标签上微调的起点(kev.train --init_from jaredpalmer/kev-4b)。

范围外用途

  • 文本生成、对话、摘要或开放式问答。模型只对它被给出的选项打分。
  • 未经人工复核、对人有法律、医疗、金融、雇佣或类似后果的全自动决策。
  • 答案依赖 state 里没有、也非常识的事实的问题,以及知识密集型考试(见 局限)。
  • 不使用 KEV_DATE_FACTS=1 预处理器时的日精度日期算术、超过 65,536 tokens 的 state,以及英语以外的语言。

如何使用

用 Kev 仓库服务它。在 CUDA 上它以 bf16 运行,带融合 DeltaNet 内核和 CUDA graphs(一张 L40S、H100 或任何有约 16 GB 空闲的 GPU);在 Apple Silicon 上同一命令会通过 MLX 服务它,自动选择。

git clone https://github.com/jaredpalmer/kev.git && cd kev && uv sync --extra serve
uv run --extra serve python -m kev.serve --run jaredpalmer/kev-4b --port 8008           # Kev 1.0 (this card)
uv run --extra serve python -m kev.serve --run jaredpalmer/kev-4b@v1.0 --port 8008      # the same weights, pinned
from typesafe_sdk import Choice, Noul, TypeSafeClient

client = TypeSafeClient(api_key="local", base_url="http://127.0.0.1:8008", model="kev-latest")
response = client.system_one(
    state="I was charged twice for order 1182. Please refund one of the charges.",
    questions={
        "team": Choice(instructions="Which team should handle this?",
                       criteria={"billing": "Charges and refunds", "shipping": "Deliveries", "returns": "Exchanges"}),
        "urgent": Noul(instructions="Does this need a reply today?"),
    },
)
print(response.choices["team"].choice, response.nouls["urgent"].noul)

校准温度默认施加;KEV_TEMPERATURE=1.0 返回原始概率。KEV_DTYPE=fp32 选择用于评测的确切路径。KEV_DATE_FACTS=1 追加 state 中每一对日期之间的天数,模型被训练来使用它。超过 65,536 tokens 的 state 会被拒绝,返回 422 并给出其 token 数。

训练数据

阶段 记录数 内容与标签
基础配方(decision-v7) 12,576 来自十个公开分类数据集的 10,000 条记录(各 1,000,列在本卡的元数据里)及其原生标签;896 条覆盖九个模板家族的生成的策略最小对;1,680 条来自 60 个随机生成规则结构的记录,四种渲染;标签由代码计算
日期与缺失证据 1,425 生成:900 个带日期的政策案例(普通、带一句天数计数、或带 date_facts 字段);255 个去掉决定句并配均匀目标的案例,外加 270 个完整对照
真实文档(documents-v1 train) 5,219 美国消费金融投诉叙述(CFPB,最多约 7k tokens),配 7,488 个问题(产品、主要问题);标签在两个开放权重教师与消费者自己的申报一致时才保留
技能(hard-v1 train) 6,000 程序化标注的记录,分七个家族:带例外和分项限额的长政策文档、明示优先级下的权衡、概率与期望值、多跳推理、日期与算术、评判一个提议答案,以及缺事实弃答;生成器模板 0–3
开发者工具(devtools-v1 train) 5,320 CodeReviewer(评审者是否评论了某个 hunk)、CommitPackFT(commit 类型)、FlakeFlagger(不稳定测试)和 Aegis(内容安全),各用其数据集自身的标签

第一个之后的每个微调阶段都回放来自 decision-v7 的记录(2,000、2,000 和 4,000)。没有使用任何 Jev(TypeSafe 的托管决策模型)的输出。CodeReviewer 和 FlakeFlagger 来自 Zenodo;CFPB 叙述是美国政府作品;逐来源许可证和 revision 记录在套件 manifest 里。下面的评测专用套件(breadth-v1、tasksource-heldout-v1、transfer-v4、longdoc-v1,以及 devtools-v1 的 When2Call 和 prompt-injection 来源)从不进入训练。

训练流程

  1. 基础配方。 从基座在 decision-v7 上两个 epoch:LoRA rank 16,α 32;学习率 5e-5,one-cycle 调度;有效 batch 8(4 × 2 累积);bf16 autocast,梯度 checkpointing;seed 2。损失是在每个问题的选项上的交叉熵。选项顺序打乱,随机插入「none of the above」选项和干扰项,另有四分之一的 choice 记录产生一个最小对(带「none of the above」选项的那个问题,一次把正确选项放进去、一次把它移除)。
  2. 日期与缺失证据。 从阶段 1 起一个 epoch,学习率 2e-5,回放 2,000 条记录。
  3. 真实文档。 从阶段 2 起在 documents-v1 train 上一个 epoch,学习率 2e-5,回放 2,000 条记录;batch 2 × 4 累积;state 最多 7,552 tokens。
  4. 技能。 从阶段 3 起在 hard-v1 和 devtools-v1 train 上一起一个 epoch,学习率 2e-5,回放 4,000 条记录;batch 2 × 4 累积;state 最多 7,552 tokens;seed 1;1,915 个优化器步。
  5. 校准。 单个温度,T = 2.41,在阶段 4 试验的 decision-v7 开发行(1,264 个问题)上最小化负对数似然。这些是一个训练语料的留出条目。在留出数据集上的一次重拟合经过评测但未采用(见 校准)。

评测

方法。 除非另有说明,每个数字都是发布温度下的 fp32 评测路径。开发划分用于选择;测试划分为本 checkpoint 读过一次;transfer-v4 测试是锁定的(每个候选读一次),并对照事先固定的门槛评判。配对区间是 95 % bootstrap,重采样整条记录(2,000 次重采样),所以共享同一 state 的问题一起移动。差值以百分点(pp)计。Jev(TypeSafe 的托管模型,经 Vercel AI Gateway 查询)只在与它读过同一批条目的地方给出。套件如下:

  • breadth-v1:五个领域(知识、语言、检索、工具、艺术)的 14 个留出公开数据集,从未训练。
  • tasksource-heldout-v1:一个公开多任务集合的 24 个整任务家族,从未训练(家族名不公开)。
  • transfer-v4:来自六个从未训练的公开来源(QNLI、SciQ、TweetEval-offensive、PAWS、MMLU、Emotion)的域外决策,加上留出的政策和规则结构。
  • hard-v1:上述技能家族;测试划分留出已训练生成器的模板。
  • devtools-v1:来自六个经许可证核查的来源的开发者工具决策(四个训练,两个仅评测)。
  • documents-v1 / documents-v2:CFPB 投诉叙述;v2 是私有的留出测试集。
  • longdoc-v1:CUAD 商业合同和生成的协议包,state 4k 到 64k tokens。

标为「audited(审计)」的头条面板排除标签审计认为不健全的条目¹;每次排除都会从比较双方移除相同的行。

留出数据(从未训练)。

面板(问题数) Kev-4B Jev
留出公开数据集,breadth-v1 开发,审计,10 个数据集(2,475) 0.768 –
breadth-v1 开发,全部 14 个数据集(3,075) 0.696 0.757
breadth-v1 测试,全部 14 个数据集(3,089) 0.690 0.757
breadth-v1 测试,随机校正指数² [95 % CI] 38.0 [35.5, 41.3] 54.0 [51.2, 57.0]
留出任务家族,tasksource-heldout-v1 开发,审计,17 个家族(1,993) 0.677 –
tasksource-heldout-v1 开发,全部 24 个家族(2,788) 0.632 –
域外,transfer-v4 开发(656):准确率 / Brier 0.817 / 0.243 0.857 / 0.211
域外,transfer-v4 锁定测试(656):准确率 / Brier 0.838 / 0.224 –
transfer-v4 锁定测试:ECE / 自信错误(p ≥ 0.9 且答错) / ≤ 5 % 误差下的覆盖率 0.017 / 1.5% / 0.701 –
MMLU-Pro,10 个选项(transfer-v9 开发) 0.565 0.840
以 p ≥ 0.9 作答的无法回答条目(越低越好) 0.00 0.09

已训练家族(留出条目与模板)。

面板(问题数) Kev-4B Jev
hard-v1 开发(1,083) / 测试(1,088) 0.786 / 0.803 0.777 / –
devtools-v1 开发,审计来源(772) 0.780 –
devtools-v1 开发(1,072) / 测试(1,071),全部来源 0.739 / 0.756 0.713 / –
documents-v1 开发(920) / 测试(936) 0.891 / 0.903 0.868 / –
decision-v7 开发(1,264) / 锁定测试(1,200) 0.873 / 0.865 0.845 / –
生成决策的留出领域,ood-v2(4,988) 0.864 –

Jev 的 devtools-v1 数字是在全部 1,074 个开发问题上;Kev 的行去掉了一个被套件构建器复用到两条记录(2 个问题)上的 CodeReviewer id。

对照上一版本(文档阶段 checkpoint,tag r8-documents-release,在其自身温度 2.96 下;注册的判据,每个测试读一次):

面板 Δ [95 % CI]
hard-v1 测试 +26.3 [+23.3, +29.5]
devtools-v1 测试 +13.4 [+10.1, +16.1]
hard-v1 + devtools-v1 测试,合并 +19.9 [+17.8, +21.8]
documents-v1 开发 −0.3 [−1.5, +0.9]
transfer-v4 锁定测试 +0.3 [−1.8, +2.3]

长期文档。

  • 已验证上下文长度:8,192 tokens,即训练长度。16k 桶超出容差:其下界为 −3.4 pp,低于 −3 pp,所以没有更长的长度被验证。
  • 规则,读数之前固定:已验证长度是从 16,384 tokens 起向下的最大桶的名义大小,使得它以及它与 8,192 之间的每个桶都在容差内。在容差内意味着与 8k 桶(state 6,553–7,618 tokens,即训练长度)相比 CUAD 准确率差,在同一合同、重复和问题上配对,其 95 % 下界至少为 −3 pp,且每条记录都被作答。若 16k 桶失败,已验证长度为 8,192 tokens。

按名义 state 长度的 CUAD 准确率、ECE 和与 8k 桶的配对差(longdoc-v1 开发):

名义 state 长度 CUAD 问题数 准确率 ECE 相对 8k 的 Δ,pp [95 % CI]
4k 443 0.847 0.047 –
8k 453 0.837 0.048 参考
16k 452 0.823 0.057 −1.1 [−3.4, +1.2]
32k 454 0.788 0.022 −5.8 [−9.0, −2.8]
64k 452 0.781 0.035 −5.2 [−8.2, −2.0]

在发布温度 T = 2.41 下的 ECE。Δ 在两种长度上问及同一合同的 445–447 个问题上配对。4k 桶装着不同的合同,不是该规则的参考。来源:runs/r28-readout/context.json(第 28 轮注册的读数,runs/r28-4b-r10-longdoc)。

校准(期望校准误差,ECE,在发布温度 T = 2.41 下;越低越好):

面板 ECE
breadth-v1 开发,审计 / 全部 14 个数据集 0.021 / 0.028
breadth-v1 测试,全部 14 个数据集 0.029
tasksource-heldout-v1 开发,审计 0.042
transfer-v4 开发 / 锁定测试 0.042 / 0.017
hard-v1 开发 / 测试 0.095 / 0.084
devtools-v1 开发,审计 0.072
documents-v1 开发 / 测试 0.093 / 0.101
decision-v7 开发(拟合行) 0.013
ood-v2 0.084

发布的温度是在一个训练语料的留出条目上拟合的,项目规则已不再允许用于新发布。在来自留出数据集的 648 个问题上的一次注册重拟合(transfer-r3 的校准划分,八个来源,加 200 个 MMLU-Pro 问题)给出 T = 2.30(90 % bootstrap 区间 [2.05, 2.52])。在 4,468 个审计过的 breadth-v1 和 tasksource-heldout-v1 开发问题上它没有改善发布值:Brier 两者都是 0.368,差 −0.0001 [−0.0005, +0.0003],ECE 0.025 对 0.024。规则要求 Brier 区间低于零且 ECE 更低,所以 T = 2.41 保留。答案不依赖 T。

其他结果。

套件 Kev-4B Jev
日期算术,deadline 政策(transfer-v9 开发) 0.65 0.95
MMLU,4 个选项(transfer-v9 开发) 0.725 0.90
When2Call / prompt 注入(devtools-v1 开发,仅评测来源) 0.660 / 0.753 – / 0.893
SemIf(144 个手写决策;接近饱和,仅报告) 0.889 0.965
JevBench 公开条目,全部 231 / hard 档 111(ECE) 0.758 / 0.541 (0.112) –

服务。 CUDA,bf16 配融合内核和 CUDA graphs;每个请求的模型时间(20 次中位数),新 state / 重复 state:

GPU 短 state 六个问题 2,200-token state 五个问题 请求/s,64 客户端
L40S 41.5 / 27.7 ms 145.2 / 43.0 ms 51.4
H100 18.1 / 12.9 ms 89.4 / 22.5 ms 100.8

常驻 GPU 显存 14.3 GB。在 280 个问题上,服务的概率与 fp32 评测路径保持在 0.017 以内,没有答案改变。在 fp32 评测路径(H100)上,16k / 32k / 64k token 的 state 用时 3.0 / 6.8 / 17.2 s,权重之上占用 4.3 / 8.6 / 17.2 GiB。

Apple Silicon(MLX,bf16,32 GB 的 M5;三个问题,其中一个问一个种在 60 % 深度的事实;state 以 1,024-token 块预填充):

state tokens 新 state 缓存 state MLX 峰值(8.4 GB 权重) 进程占用 种入事实 (p)
8,192 6.6 s 354 ms 10.2 GB 11.9 GB 正确 (0.97)
16,384 14.0 s 427 ms 11.0 GB 12.8 GB 正确 (0.95)
32,768 30.5 s 533 ms 11.9 GB 13.7 GB 正确 (0.96)
65,000 84.5 s 716 ms 13.0 GB 14.1 GB 正确 (0.94)

在 60 个短 state 问题上,MLX 路径与 fp32 评测路径保持在 0.018 以内,没有答案改变。

¹ 从审计面板中排除:四个 breadth-v1 数据集(routerbench,其 state 缺少所问的信息;cfcolor 和 humicroedit,对每个系统都处于随机水平;chessbench,对每个系统都处于下限);七个标签无效或无法恢复的 tasksource-heldout-v1 家族(名字不公开);两个 state 无法决定其标签的 devtools-v1 任务(flakeflagger、commit 变更类型)。

² 社区 Decision Index 0.2 的随机校正指数:每个数据集 (score − chance) / (1 − chance),在每个领域内取平均,然后 100 × 五个领域的均值。Jev 的指数来自对同一批测试条目的单独一次读取。

局限与取舍

  • 它最大的增益在分布内。 hard-v1、devtools-v1 和 documents-v1 的训练划分就在其训练数据里,而一个 hard-v1 测试条目是已训练生成器的一个新模板。在留出数据集上它落后 Jev 16 个点(breadth-v1 指数),而在 JevBench 公开 hard 档这个分布外检查上,技能阶段的增益约为在 hard-v1 上的三分之一(+9.0 pp [+2.7, +15.3],111 个条目)。
  • 一些 devtools-v1 标签是代理。 训练前,每个被打分的模型(包括 Jev)在 CodeReviewer 和 FlakeFlagger 上都接近随机;在这些来源上训练后,它在开发上达到 0.633 和 0.693,这可能是学到了标注启发式而非决策本身。
  • 知识由基座决定。 MMLU-Pro 是 0.565,对 Jev 的 0.840。
  • 日期算术是它最弱的家族:在 deadline 政策问题上 0.65,对 Jev 的 0.95。KEV_DATE_FACTS=1 预处理器有帮助(在它所源自的更早 checkpoint 上,0.60 → 0.85);它没有在本 checkpoint 上重新测量。
  • 校准是一个分布内温度。 它在留出数据集上校准良好(breadth-v1 测试 ECE 0.029),在已训练技能与文档家族上较差(ECE 0.084–0.101),而单个温度无法重排置信度顺序:域外 ≤ 5 % 误差下的覆盖率为开发上的 0.620,对 Jev 的 0.70。
  • 未训练的长度。 训练 state 最多 7,552 tokens。更长的 state 可服务到 65,536 tokens;准确率保持多远就是上面的已验证上下文长度。
  • 选项顺序可能改变答案;问题隔离并不能阻止这一点。

偏见、风险与伦理考量

  • 校准概率可能制造不当的信任。温度是在训练分布的开发行上拟合的,不迁移到每个工作负载;在设阈值之前,在你自己的标注样本上测量准确率与校准,并在那里重拟合温度(python -m kev.calibrate)。
  • 准确率和校准会随领域变化而偏移。请监控生产错误率,而不是依赖上面的数字。
  • 未经人工复核,不要用它做关于人的有后果的自动决策。基座模型和训练数据的偏见(包括其他模型产生的标签)未被测量。
  • state 可能包含个人或机密数据。自托管把输入留在你自己的硬件上;除非设置了 KEV_API_KEY,服务器是开放的,所以请应用你自己的访问控制与数据处理策略。

算力

  • 基础配方:在一张 NVIDIA H100 上约 56 分钟(峰值 24.6 GB)。日期阶段:一张 H100 上 9 分钟。
  • 文档阶段:在一张 NVIDIA H200 上 43 分钟。技能阶段:一张 H200 上 1.4 小时(峰值 47.7 GB)。
  • 评测与服务检查:Modal 上的单张 H100 / H200 / L40S GPU;MLX 测量在一台 Apple M5 上。

溯源与可复现性

  • 代码、套件与评测报告:github.com/jaredpalmer/kev。发布数字:runs/release/kev-4b-r10.json(scripts/release_numbers.py --release kev-4b-r10),锁定读数 runs/locked/kev-4b-r10-ungated/,2026-09-30 家族读数 runs/fam-4b-breadth/、runs/fam-4b-breadthtest/、runs/fam-4b-docs1test/ 和 runs/fam-breadth-test-report/,校准重拟合 runs/r28-readout/round28.json,服务 runs/serve-4b-l40s/、runs/grouping-4b-h100/、runs/long-state-4b-h100/、runs/mlx-long-states/、runs/mlx-full-4b/。
  • 阶段:基础试验 q35-4b-s23/00-trial-0(tag v7-base);日期 night2-4b-du/00-trial-0(tag night2-du-release);文档第 8 轮 r8-small/00-trial-0(tag r8-documents-release);技能第 10 轮 r10-skills/00-trial-0(experiments/round10/skills.json,规则 experiments/rounds/r10.json)。校准重拟合:第 28 轮臂 4b-r10(experiments/rounds/r28.json)。
  • 发布的权重:Hub revision 139fdd94;适配器 sha256 90e81735…,head.pt sha256 dd633435…(T = 2.4061)。
  • 发布历史:2026-09-24 作为第 10 轮确认的候选发布;在 Kev 1.0 中原样包含。它是如何被选出的记录,包括此后作为不健全而退役的套件(scienthoon、WANLI-v2、TypeSafe),是 Hub revision 139fdd94 上的 README 和 git tag research-archive-2026-09-24 上的 PLAN.md。

引用

@misc{palmer2026kev4b,
  title        = {Kev-4B: a calibrated decision model on Qwen3.5-4B},
  author       = {Palmer, Jared},
  year         = {2026},
  howpublished = {\url{https://huggingface.co/jaredpalmer/kev-4b}},
  note         = {Kev 1.0}
}

联系

问题与 issue:github.com/jaredpalmer/kev/issues。