跳到主要內容
Lab Grimoire
TW EN
請喝咖啡
LLM 原理

一次前向就給機率:決策模型的原理與訓練

決策模型不把答案逐 token 寫出來。讀完輸入後,它只取事先列好的選項 logit,用 softmax 一次變成各選項的機率,不必再解析文字。Jev 公開的訓練只到名稱 RLCD、自製資料與校準過的決策機率,架構與損失沒有公開。開源複製品則公開決策頭、LoRA 或正確計分規則的對照。

作者
CY
發表
更新
決策模型:只做選擇、不寫文字的 AI · 第 2/2 篇
一次前向就給機率:決策模型的原理與訓練

決策模型的輸入是一段狀態(state)加上事先列好選項的具型別問題,一次前向計算就回傳每個選項的機率,不生成自由文字,也不必再解析輸出。要判斷它適不適合做分類、路由或守門,得先看這組機率從哪裡讀出來,以及訓練被公開到什麼程度。

本系列第 2 篇|這篇回答:不生成文字的決策模型,如何一次給出每個選項的機率,又是怎麼訓練的?

為什麼不用生成也能給機率

語言模型讀完輸入之後,不必把答案逐 token 寫出來,只要對事先列好的選項取分數再正規化,就得到一個機率分布。把整段輸入讀完、還沒開始往外生成的步驟叫 prefill。prefill 結束時,最後一個位置會對整個詞表給出 logit:每個 token 的原始分數,可正可負,還不是機率。只留下題目裡那幾個選項對應的 logit,再用 softmax(把分數取指數後除以總和)變成加總為 1 的機率。

這比較像閱卷時只統計選項格子,而不是請考生寫一段理由。生成式的結構化輸出仍是逐 token 把答案寫出來,再靠格式約束或解析器保住形狀,信心也多半是模型自己寫進文字裡的數字。決策模型不生成答案,而是對每個選項直接讀出機率。這段對照來自官方文件,加上 LLM2Jev 這類實作的 prefill-only 做法,其中也有我們的解讀。

題型有三種:noul 是是非題,回傳該陳述為真的機率;choice 從具名選項裡選一個;score 是有序等級。「具型別」的意思是,選項和回答的形狀在發問前就定好。Jev 的文件寫明,choice 最多 255 個選項;超過時改成兩段式、先縮小範圍再問一次,是我們的建議。

輸出空間被 schema 限制,所以型別錯誤不會發生,這是文件對「不會幻覺」的說法。選項選得對不對仍是機率問題,要靠校準(回報的機率貼近真實發生比例)與信心門檻處理,這句是我們的解讀。

四種做法

公開材料裡看得到四種做法:不改權重、直接讀現成 logit;在因果語言模型上微調或加決策頭;用雙向 encoder 加決策頭;在底座上加聯合 schema 頭。下表的 git 專案依據其 README 與程式碼整理,我們沒有執行;Clef 那一列來自模型卡。

做法 機率從哪裡來 代表
讀現成 logit 一次前向,不把答案逐 token 生成 open-alternative-jev、LLM2Jev、SemIf
訓練後再讀分 決策頭,或 LoRA 之後讀候選 logit NanoJev、Kev、Nimble
encoder 模型 雙向 encoder 上的決策頭 Laya
聯合 schema 頭 每題每個選項一個 logit,各題分別 softmax Clef、Clef-flash

讀現成 logit。 open-alternative-jev 可以掛在任意開源權重的語言模型上,一次前向讀取選項字母的 logit,回答多題 choice,並附一個 temperature(調整分數尺度的係數)校準工具。LLM2Jev 把每個候選選項編成一個是非判斷,只讀下一個 token 的 yes 與 no 的 logit,計算 q = exp(yes)/(exp(yes)+exp(no)),再把各選項的 q 正規化成機率;信心也由程式算出:confidence = (n × p_max − 1)/(n − 1),限制在 0 到 1,n 是選項個數。作者寫明未獲 TypeSafe 認可。SemIf 原名 OpenJev,選項數 2 到 16,輸出明確標成 conditional/uncalibrated,也就是作者不把這些分數當成已校準;後端可以是 torch 或 Apple 的 MLX。

聯合 schema 頭。 Clef 在 Qwen 底座之上放一個小型 transformer head,讀底座最後的 hidden states,把 state 裡的證據分派給各題,對所有題目的選項一起評分;每題每個選項一個 logit,各題分別 softmax,一次前向完成。模型卡寫明,Clef 是 27B 的多模態決策模型,由 Qwen3.8-27B 後訓;Clef-flash 是 9B,由 Qwen3.5-9B 後訓。兩者授權 Apache-2.0,權重公開在 Hugging Face,並接受與 Jev 相同形狀的 /v1/systemone 請求。

我們沒有 Jev 的憑證,也沒有做 Jev 與 Clef 的頭對頭比較。本系列的實測用的是開源權重的 Clef-flash:一台 Mac 以 MLX 4-bit 執行,一台 NVIDIA 工作站以 llama.cpp 執行 GGUF Q4_K_M 版。

Jev 的訓練公開了什麼、沒公開什麼

Jev 公開的訓練資訊是名稱 RLCD、回傳校準過的決策機率而不是生成文字、資料由 TypeSafe 自製,以及不用使用者輸入訓練;架構、參數量、base model、訓練資料內容、獎勵與損失函數的具體形式都沒有公開。RLCD 是 Reinforcement Learning for Calibrated Decisions 的縮寫。公告另稱 Jev「neither small nor an LLM」,資料是「all ourselves」。缺的部分本系列一律寫成未知。

隱私政策寫明不會用使用者輸入訓練或微調模型,但輸入仍會送到託管服務處理。這和權重能不能下載是兩件事。

Clef 與 Clef-flash 的模型卡也只寫由 Qwen3.8-27B 與 Qwen3.5-9B 後訓,沒有公開訓練資料來源與訓練細節。我們的解讀是:權重開源,不代表外人可以照著把訓練重做一遍。

開源複製品怎麼訓練

這些是第三方專案公開的讀分方式、資料或權重,不是 TypeSafe 公開的 Jev 訓練配方。以下依各專案的 README 與程式碼整理,我們沒有執行這些專案。我們把 NanoJev、Kev、Nimble 的流程整理成共同的五步:準備有標準答案的題目、選一個 backbone、加決策頭或 LoRA、以計分規則為訓練目標、同時評估準確率與校準;各專案的細節不同。

NanoJev 在 Qwen3-0.6B 上加一個專門讀出選項分數的決策頭,公開資料生成、訓練程式與權重,並把 cross-entropy、Brier 與 paired proper-reward(成對的正確計分獎勵)三種訓練目標拿來對照。作者不宣稱這是官方 Jev 配方。

Kev 以 Qwen3.5 Base 加 LoRA(只訓練外加低秩權重的微調)與 pointer head,做成 Jev 形狀的本機決策模型,並實作 /v1/systemone。它用 block-causal 遮罩,讓每一題都讀得到共同的 state,但讀不到其他題。權重有 0.8B、4B、9B,授權 Apache-2.0;作者自報 new-source 測試準確率約 0.684、0.837、0.852,不是我們的測量。

Nimble(Bespoke Labs)公開資料、模型與訓練配方:以對比式資料策展,用 LoRA 微調 Qwen3.5-9B、只訓練答案 token,推論時讀候選 logit。作者寫明不是從 Jev 蒸餾。訓練集 2,676 筆、評估集 324 筆已放進 repo。

Laya 用雙向 encoder ModernBERT 加決策頭;依其 repo 說明,English 版 421M 參數、multilingual 版 322M 參數。第三方 MLX 移植版的作者自報,在 M3 Max 上短問題的 P50 是 13.42 ms(English)與 7.39 ms(multilingual)。Cloudflare 模型卡的 Decision Index 表(廠商自報)給出 Laya 中位延遲 5.8 ms,但多數任務的準確率明顯落後。

d1-3B(LiquidAI)建在 LFM2.5-VL-3B 上,一次前向回傳具型別答案,輸出 token 為 0;卡面自評 Decision Index 0.2.1 為 48.57(廠商自報)。依模型卡(廠商自報),授權是 LFM Open License v1.0,年營收 1,000 萬美元以上的商業使用不在授權內。我們沒有實跑這個模型。

這些專案多數只能從 git 安裝,PyPI 上還有同名但無關的套件,例如 openjev、llm2jev,安裝前要核對來源。

為什麼正確計分規則會帶出校準

log loss 與 Brier score 都是嚴格正確的計分規則(proper scoring rule):回報機率等於真實機率時,期望分數才最佳,所以拿它們當訓練目標,會把模型推向在訓練分布上校準。這是統計學的標準結果,出處是 Brier(1950)以及 Gneiting 與 Raftery(2007),JASA 102:359–378。

就像降雨機率要和後來真正下雨的比例對得上,模型說出的機率也要和訓練分布裡的發生比例對得上。正確計分規則管的是這個期望分數,不保證換一批資料之後仍然貼得上。

RLCD 名字裡的 Calibrated,以及 NanoJev 拿 proper reward 對照 cross-entropy 與 Brier,都指向同一個想法:用正確計分規則當獎勵。TypeSafe 沒有公開獎勵的形式,這段是我們的推論,不是 Jev 的配方。

還有一個容易混淆的地方:回應裡的 confidence 欄位不一定等於最高類別的機率。在 2026-10-11 的一手實測中,NVIDIA 工作站上的同一篇摘要,confidence 是 0.884,最高類別機率是 0.897。第 3 篇會用 77 篇 PubMed 論文說明兩者的差別,並附校準檢查器,在瀏覽器內計算 Brier、ECE 與 reliability diagram,不送出資料。

最後一點同樣是我們的推論:每一個判斷各自校準,不代表把多個判斷串成管線之後整體仍然校準。守門若連問好幾題,不能把單題的校準直接當成整條管線的校準。

參考文獻

  1. https://docs.typesafe.ai/introduction.md
  2. https://docs.typesafe.ai/concepts/system-one.md
  3. https://docs.typesafe.ai/introduction/machine-learning-primer.md
  4. https://typesafe.ai/blog/introducing-system-one-models-and-jev
  5. https://typesafe.ai/legal/privacy-policy
  6. https://huggingface.co/Cloudflare/clef
  7. https://huggingface.co/Cloudflare/clef-flash
  8. https://github.com/ikermoel/open-alternative-jev
  9. https://github.com/Yinsongxu/LLM2Jev
  10. https://github.com/TheoLeeCJ/SemIf
  11. https://github.com/TianyuCodings/NanoJev
  12. https://huggingface.co/LiquidAI/d1-3B

常見問題

不生成文字,是不是就不會選錯?

輸出空間被 schema 限制,型別錯誤不會發生,這是文件對「不會幻覺」的說法。選項選得對不對仍是機率,要靠校準和信心門檻,這句是我們的解讀。System One 模型不寫回覆、不產生程式碼、也不產生推理說明,所以寫作、摘要、萃取、開放式推理、多步規劃,或需要解釋理由的工作,都不在這個設計裡。

Jev 的 RLCD 公開到能讓外人重做嗎?

公開的是名稱 RLCD、目標是校準過的決策機率而不是生成文字、資料由 TypeSafe 自製,以及不會用使用者輸入訓練或微調。架構、參數量、base model、訓練資料內容、獎勵與損失的具體形式都沒有公開,因此外人無從照著重做。隱私政策同時寫明,輸入仍會送到託管服務處理。

這些開源複製品可以直接裝來當官方 Jev 用嗎?

根據這些專案的 README/程式碼,它們公開的是讀 logit、決策頭或 LoRA 配方,屬於第三方做法,不是 TypeSafe 公開的 Jev 配方。SemIf 把輸出標成 conditional/uncalibrated,選項是 2 到 16 個。LLM2Jev 的作者寫明未獲 TypeSafe 認可。多數只能從 git 安裝。PyPI 上的 openjev、llm2jev 是同名但無關的套件,安裝前要核對來源。我們沒有實跑這些專案。

訓練用了 Brier 或 log loss,confidence 就等於最高類別的機率嗎?

不等於。log loss 與 Brier score 是嚴格正確的計分規則,會把模型推向訓練分布上的校準,這不自動延伸到另一批資料。我們的推論是,單題校準也不代表把多個判斷串成管線之後整體仍然校準。另外,2026-10-11 一台 NVIDIA 工作站以 llama.cpp 執行 GGUF Q4_K_M 版 Clef-flash,同一篇摘要的第 1 列,confidence 是 0.884,最高類別機率是 0.897。第 3 篇才說明這兩個欄位為什麼不同。

覺得有幫助? RSS · X · 請我喝杯咖啡

模型讀完一整段輸入,停在最後一個位置,看它對各選項的分數。

只讀選項的分數,不往下寫
1 / 4
模型先讀完整段輸入
模型讀完輸入後,最後一個位置對每個候選都有分數;只取列好的選項做 softmax,就得到機率。數字為示意。
  1. 這一步叫 prefill:輸入一次全部算過,還沒有產生任何新字。
  2. 聊天模型會從這裡開始一個字一個字往下寫;決策模型只在這裡讀分數。
  3. 分數叫 logit。只取選項對應的 logit 做 softmax,就是一組加總為 1 的機率。
  4. 答案直接是機率最高的選項,不必生成,也不必解析。

逐列看四種做法:要不要訓練、代表專案;各自的特點在右邊的步驟說明。

四種做法,差在要不要訓練、訓練哪裡
1 / 4
讀選項 logit:不改權重
代表專案依其 README 或模型卡歸類;第三方專案我們沒有實際執行。
  1. 直接拿現成模型讀選項分數,不另外訓練,最省事;SemIf 自己把輸出標成 uncalibrated。
  2. NanoJev 加決策頭、Kev 加 LoRA 與 pointer head、Nimble 只訓練答案 token。機率由訓練目標塑形。
  3. Laya 用雙向 encoder 加決策頭,依 repo 有 322M 與 421M 兩版;廠商表中延遲很低,多數任務準確率落後。
  4. Clef 在 backbone 上加一個小 transformer,把 state 的證據分派給每一題,一次前向回答全部問題。

左欄是官方說過的,右欄是沒有公開的。

Jev:公開了目標,沒公開做法
1 / 3
名稱與目標已公開
左欄來自 TypeSafe 的公告、文件與隱私政策;右欄是查不到公開資料的部分,本系列不做推測。
  1. 訓練方法叫 RLCD,目標是回傳校準過的決策機率,而不是生成文字。
  2. 公告說資料全部自製,隱私政策說不用使用者輸入訓練或微調。
  3. 架構、參數量、base model、資料內容、獎勵與損失的形式都查不到,所以文中一律寫「未公開」。

從資料到評估,這是我們從三個開源專案整理出的共同五步。

開源複製品的訓練流程
1 / 5
準備有標準答案的題目
依 NanoJev、Kev 與 Nimble 公開的程式與說明整理;各專案的細節不同,這是共同的骨架。
  1. NanoJev 公開資料生成程式;Nimble 做對比式策展,並把 2,676 筆訓練與 324 筆評估資料放進 repo。
  2. NanoJev 用 Qwen3-0.6B,Kev 與 Nimble 用 Qwen3.5 系列。
  3. Kev 用 block-causal 遮罩,讓每題都看得到共同的 state、但看不到其他題。
  4. NanoJev 把 cross-entropy、Brier 與 paired proper-reward 三種目標放在一起比較。
  5. 只看準確率不夠;機率要拿來設門檻,就要另外量校準。

橫軸是模型回報的機率 q,縱軸是期望 Brier 分數,越低越好。

說實話的機率,期望 Brier 最低
1 / 3
真實機率 0.7 的期望分數
若事件真實發生的機率是 0.7,回報 q 的期望 Brier 分數在 q = 0.7 時最低;換成 0.4 時,最低點也跟著移到 0.4。曲線依公式計算。
  1. 期望分數 = 0.7 × (1 − q)² + 0.3 × q²。回報得太高或太低都會被扣分。
  2. 這就是「正確」計分規則:只有誠實回報真實機率,期望分數才最好。
  3. 最低點跟著移到 0.4。用這類規則當訓練目標,模型會被推向在訓練分布上校準。