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 來源)從不進入訓練。
訓練流程
- 基礎配方。 從基座在
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」選項的那個問題,一次把正確選項放進去、一次把它移除)。 - 日期與缺失證據。 從階段 1 起一個 epoch,學習率 2e-5,回放 2,000 條記錄。
- 真實文件。 從階段 2 起在
documents-v1train 上一個 epoch,學習率 2e-5,回放 2,000 條記錄;batch 2 × 4 累積;state 最多 7,552 tokens。 - 技能。 從階段 3 起在
hard-v1和devtools-v1train 上一起一個 epoch,學習率 2e-5,回放 4,000 條記錄;batch 2 × 4 累積;state 最多 7,552 tokens;seed 1;1,915 個最佳化器步。 - 校準。 單個溫度,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(tagv7-base);日期night2-4b-du/00-trial-0(tagnight2-du-release);文件第 8 輪r8-small/00-trial-0(tagr8-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;介面卡 sha25690e81735…,head.ptsha256dd633435…(T = 2.4061)。 - 釋出歷史:2026-09-24 作為第 10 輪確認的候選釋出;在 Kev 1.0 中原樣包含。它是如何被選出的記錄,包括此後作為不健全而退役的套件(scienthoon、WANLI-v2、TypeSafe),是 Hub revision
139fdd94上的 README 和 git tagresearch-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。