Kev-0.5B — 原型(已被取代)
Kev-0.5B 是一個決策模型。它接收一份文件(狀態)和一組帶型別的問題,在一次前向傳播裡為每個問題返回一個機率分佈。它不生成文本。
它是在 Qwen/Qwen2.5-0.5B 之上的一個 LoRA 介面卡加一個小指標頭。它復現了 Archer Hume 在 Jev’s Architecture Unmasked 裡為 TypeSafe 的 Jev 推斷出的架構,並服務 TypeSafe 公開的 /v1/systemone API 契約。
這個 checkpoint 是最早的原型,2026 年 9 月在一臺筆記本上訓練,用來證明這個機制能跑通。它已被 Kev-0.8B、Kev-4B 和 Kev-9B 取代,後者使用 Qwen3.5 基座、凍結且帶校驗和的套件,以及一套經過約 110 次受控試驗找到的配方;在同一批域外條目上(transfer-v4 dev),本模型得 0.561,而它們分別為 0.643 / 0.794 / 0.812.620 / 0.790 / 0.796。它留在 Hub 上供參考和復現;其他用途請用當前家族。
- Hub:jaredpalmer/kev-0.5b(tag
v0.1) - 程式碼、訓練配方、評測與演示:github.com/jaredpalmer/kev
- 權重:GitHub release
v0.1.0,kev-0.5b.tar.gz(38 MB;LoRA 介面卡adapter_model.safetensors、指標頭head.pt、tokenizer 檔案、eval.json、訓練日誌)。SHA-25615639f79…6e12f8,完整摘要在 sidecar.sha256裡。解包到runs/kev/。權重不提交進 git。
模型詳情
| 開發者 | Jared Palmer,與 Devin (Cognition) 合作 |
| 模型型別 | 因果 transformer,只做 prefill,塊因果分支掩碼,指標讀出 |
| 基座模型 | Qwen/Qwen2.5-0.5B(494M 參數,凍結) |
| 介面卡 | LoRA rank 16,alpha 32,dropout 0.05,作用於 q_proj k_proj v_proj o_proj gate_proj up_proj down_proj(全部 24 層) |
| 指標頭 | 兩個線性對映 896 → 256(query 來自 <decide>,key 來自每個 </opt>),縮放點積,在選項上做 softmax |
| 可訓練參數 | 9.3M(LoRA 8.8M + 指標頭 0.46M),佔主乾的 1.9% |
| 精度 | fp32(在 Apple MPS 上訓練與服務) |
| 訓練時使用的上下文 | ≤ 384 個 state token,每個問題分支 ≤ 1,024 tokens |
| 服務時允許的上下文 | 每個分支 8,192(主幹支援 32k) |
| 問題型別 | noul(是/否)、choice(2–255 個選項)、score(2–255 個有序檔位) |
| 語言 | 英語 |
| 許可證 | 介面卡與指標頭為 Apache-2.0。基座模型在 Qwen 許可證下(Qwen2.5-0.5B 為 Apache-2.0)。資料集各有自己的許可證。 |
| 版本 | Kev-0.5B v0.1,訓練於 2026-09-17 |
預期用途
預期。 決策模型研究:直接機率讀出的校準、共享 state / 隔離問題的注意力、選項順序敏感性,以及與 TypeSafe 的 System One 契約在 API 層面的相容性。本地演示與教學。
非預期。 任何會影響人的生產決策:內容稽核、欺詐、信貸、招聘、醫療或法律路由。模型的知識受限於一個 0.5B 主幹,其校準只在該訓練分佈上驗證過,在不熟悉任務上的輸出尚未測量。
模型如何使用
輸入是一條打包的 token 序列:
<state> …state… <q> instr <opt> o1 </opt> <opt> o2 </opt> … <decide> <q> … <decide> …
- 注意力掩碼讓一個問題 token 只能看到 state 和它自己的分支。問題之間互相看不到。
- 每個分支在 state 之後重新開始 position id。
- 對每個問題,指標頭把每個
</opt>隱狀態與<decide>隱狀態打分,再做 softmax。 - 應用程式碼把分佈轉成 API 答案:Choice 給
choice/confidence,Noul 給p(yes),Score 給期望檔位。
保留 token 是 Qwen 已有的特殊 token(<|fim_prefix|>、<|fim_middle|>、<|box_start|>、<|box_end|>、<|fim_suffix|>)。使用者文本會被清洗,無法產生它們。
用 python -m kev.serve --run runs/kev 服務並呼叫 POST /v1/systemone,或用 typesafe-sdk 配 base_url="http://127.0.0.1:8009"。
訓練資料
六個公開資料集,轉換成 TypeSafe 形狀的請求,並用與服務時相同的程式碼路徑渲染(api.to_record())。從標準的 train 劃分裡每個來源取樣 1,500 條記錄,共得 9,000 條記錄和 13,500 個問題(4,500 個 Choice、6,000 個 Noul、3,000 個 Score)。
| source | split | 轉換為 | 備註 |
|---|---|---|---|
| Banking77 | train | Choice,K = 77 | 意圖名作為選項鍵;模板化描述,50% 為 null |
| BoolQ | train | Noul | 段落作為 state;40% 帶 true/false 判據 |
| AG News | train | Choice K = 4 + 2 個 Noul | 派生的是/否問題與主題問題打包在一起 |
| MNLI | train | Choice K = 3 | 前提作為 state,假設放在指令裡 |
| SST-5 | train | Score,5 個檔位 | |
| Yelp Review Full | train | Score 5 個檔位 + Noul | 文本截斷到 220 詞;recommend = 星級 ≥ 4 |
轉換時施加的渲染變化:約 30% 的選項描述為 null,約 10% 為結構化 {"what": …} 描述,約 15% 為結構化 {"question", "focus"} 指令,約 32% 的 state 包成物件或陣列({"document"}、{"ticket": {"channel","body"}}、[{"role","content"}])。
編碼前對每條記錄施加一次增強:選項順序打亂;以 0.10 的機率把真選項替換為 other: None of the above;以 0.15 的機率加入一個無關的干擾選項。
沒有 LLM 生成的資料。除原始資料集外沒有人標註。
訓練流程
| 目標 | 在選項上做交叉熵,對一條記錄內的問題取平均 |
| 最佳化器 | AdamW,lr 2e-4,weight decay 0.01,OneCycle 排程(10% 預熱) |
| Batch | 每步 1 條記錄,梯度累積 8,梯度裁剪 1.0 |
| Epoch | 2(2,250 個最佳化器步) |
| 硬體 | Apple M5,32 GB 統一記憶體,PyTorch 2.8 MPS 後端 |
| 牆鍾時間 | 約 1h45m(每條記錄約 0.29 s) |
| Seed | 0 |
| 最終訓練損失 | 0.27 |
這個 checkpoint 早於兩個現在是 kev/train.py 預設值的損失項:Score 的 ordinal 項(--ord_w)和 Choice 的置換一致性 KL(--perm_kl)。要精確復現這個 checkpoint:
uv run python -m kev.train --n_per_source 1500 --epochs 2 --accum 8 --perm_kl 0 --ord_w 0 --out runs/kev
注意,增強現在是每個 epoch 重新施加,而不是在編碼時固定,所以重跑不會逐 bit 相同。
評測
同一批六個來源的留出 test / validation 劃分,每個來源 150 條記錄,1,350 個問題,seed 1。完整結果在 runs/kev/eval.json。
準確率與校準
| source | K | zero-shot 基座 | zero-shot Instruct | Kev-0.5B |
|---|---|---|---|---|
| acc / ECE | acc / ECE | acc / ECE / NLL | ||
| banking77 | 77 | – | – | 0.860 / 0.057 / 0.56 |
| agnews | 4 | 0.813 / 0.069 | 0.787 / 0.160 | 0.940 / 0.028 / 0.22 |
| agnews yes/no | 2 | 0.780 / 0.103 | 0.853 / 0.062 | 0.960 / 0.017 / 0.10 |
| boolq | 2 | 0.427 / 0.274 | 0.607 / 0.084 | 0.753 / 0.136 / 0.63 |
| mnli | 3 | 0.460 / 0.225 | 0.433 / 0.390 | 0.747 / 0.100 / 0.63 |
| sst5 | 5 | 0.373 / 0.083 | 0.447 / 0.344 | 0.533 / 0.121 / 1.17 (MAE 0.59 levels) |
| yelp | 5 | 0.313 / 0.043 | 0.353 / 0.078 | 0.553 / 0.118 / 0.95 (MAE 0.54 levels) |
| yelp yes/no | 2 | 0.833 / 0.129 | 0.833 / 0.066 | 0.887 / 0.084 / 0.33 |
| 全部 | 0.799 / 0.065 |
基線:Qwen/Qwen2.5-0.5B(原始)和 Qwen/Qwen2.5-0.5B-Instruct(chat 模板),同樣的渲染文本,在選項字母 A–H 上取下一 token logits;K = 77 未跑。ECE 在最高機率上用 10 個等寬分箱。
溫度縮放
在偶數索引記錄上擬合,在奇數索引記錄上測試:T = 1.47。留出 NLL 0.505 → 0.481,ECE 0.057 → 0.031。模型在縮放前輕微過度自信。
機制測試
| 測試 | 結果 |
|---|---|
| 隔離(秘密置於兄弟問題 / 缺失 / 置於 state) | p = 0.03 / 0.03 / 0.99 |
| 打包 vs 分開,最大機率絕對差 | 3.7e-6(打包快 2.0×,每請求約 2.7 個問題) |
| 置換,4 種順序,Choice K ≥ 3 | argmax 翻轉 7.4%;p(correct) 平均離散 0.065,p90 0.25 |
| IIA,追加一個無關選項 | top-2 的 |Δ log-odds| 均值 = 0.13,p90 0.34 |
| 邊界偽造,選項文本帶假分隔符 | 選項數不變;偽造選項 p ≤ 0.09 |
侷限
- 僅限分佈內。 上面所有數字都在訓練資料集的留出劃分上。這個 checkpoint 的跨來源泛化尚未測量。
- 主幹小。 0.5B 參數。在 TypeSafe 文件的結構化判據示例上,模型選
return_policy,而 Jev 選return_status。閱讀理解(BoolQ 0.75、MNLI 0.75)遠低於當前水平。 - 任務覆蓋窄。 六個資料集和約十個指令模板。程式碼、表格、多輪對話、算術和多步條件均未訓練。
- 順序敏感性仍在。 選項重排下 argmax 翻轉 7%,p(correct) 的 p90 離散 0.25。接近決策邊界的閾值可能改變動作。
- Score 置信度由服務程式碼計算,不由 checkpoint 計算。寫這張卡時它是
1 − E|level − mode| / (L − 1);現在是max(0, 1 − E|level − mode| / D),D 是檔位上均勻分佈的絕對平均偏差,與 TypeSafe 的參考介面卡(system-one-adapter0.2.1)一致。 - 校準不是保證。 在這些來源上溫度縮放後 ECE 0.03,並不能說明在新工作流上的校準。合適的評分規則給出正確的激勵;它們不能消除對結果資料的需求。
- 繼承的侷限來自 Qwen2.5-0.5B 和資料集,包括其標籤噪聲、人口偏斜(如 Yelp、銀行意圖)和僅英語覆蓋。
偏見、風險與建議
訓練集帶著其來源的偏見:以美國為中心的新聞類別、英語銀行術語、餐廳評論和眾包 NLI 標籤。模型會照搬它們。
直接的機率輸出看起來很有權威。這個模型給出的 confidence: 0.92 是關於它自己在三個選項上分佈的一個統計量,不是為正確的已驗證機率。在沒有先在你自己的標註結果上測量校準之前,不要對有後果的決策拿它設閾值。
問題隔離這一性質是真實的安全特性(一個問題的文本無法操縱另一個問題的答案),並且已驗證。分隔符偽造防護已針對五個保留 token 驗證。通過 state 文本進行的其他 prompt 注入路徑尚未研究。
環境影響
一次訓練:在單臺 Apple M5 筆記本 SoC 上約 1.75 小時,功耗約 30–40 W,即約 0.06 kWh。評測和冒煙執行再加相近的量。這很小。
引用
@software{kev2026,
title = {kev: a laptop-scale reconstruction of a Jev-style decision model},
author = {Palmer, Jared},
year = {2026},
url = {https://github.com/jaredpalmer/kev}
}
@misc{hume2026jev,
title = {Jev's Architecture Unmasked},
author = {Hume, Archer},
year = {2026},
url = {https://archerhume.com/posts/jevs-architecture-unmasked}
}
聯絡
在 github.com/jaredpalmer/kev 開 issue。