AI-LECTURER 速報課|2026-07-24|約 26 分鐘

讓小AI學會說「我不確定」:Cactus Hybrid 用信心分數幫手機模型省下雲端費

取材:Show HN: Cactus Hybrid: We taught Gemma 4 to know when it's wrong(Hacker News(AI 高人氣))
📍 真實場景
阿凱,一人接案的App工程師,最近幫連鎖診所開發一款「排隊查詢+症狀初篩」的手機App

正在把AI對話功能塞進App裡,讓病患不用等真人客服也能先問到基本問題,但診間地下室網路訊號常常忽有忽無

😖 卡住的地方:如果全部靠雲端大模型回答,訊號一斷整個功能就掛掉;但塞進手機裡的小模型雖然不用連網,卻常常一本正經地亂答,而且它自己完全分不出這次是答對了還是在瞎猜
💡 這課帶你看懂Cactus Hybrid怎麼讓小模型自己吐出一個「信心分數」——答得有把握就自己來,沒把握才連網求救,阿凱要的「離線能用、又不會亂答」終於有解法了

🧭 這到底是什麼(白話版)

這篇文章介紹的 Cactus Hybrid,是一套讓「端側模型直接裝在手機、筆電等你自己的裝置裡執行的AI模型,不用連網路就能回答問題」變聰明的方法——重點不是讓它變得更會答題,而是讓它學會「知道自己可能答錯」。開發團隊在訓練完模型之後,額外加裝了幾個小小的判斷器,也就是「探針額外訓練、嵌進模型權重檔裡的小型判斷器,專門負責評估目前這個答案有多可信」,讓模型在回答的同時,也吐出一個0到1之間的「信心分數模型對自己這次回答有多少把握的量化分數,0代表完全沒把握,1代表非常確定」。

這個信心分數不是模型自己嘴巴說的(那種常常是硬掰的),而是以結構化資料的形式直接回傳,程式可以直接拿數字來做判斷,不用再去猜模型講的話是真心話還是幻覺。運作邏輯很簡單:如果信心分數低於某個門檻(文章示範用0.85),系統就自動把這一題「轉手把問題轉交給另一個更強的模型來處理,原文用handoff或routing表達,也就是路由/轉交」給雲端上更強的大模型(Gemini 3.1 Flash-Lite)來答;如果信心分數夠高,就讓端側的小模型(示範用的是Gemma 4 E2B這顆超輕量模型)自己回答就好,完全不用連網。

這套機制還搭配了一個叫「量化把模型內部數字的精細程度壓縮,例如從16位元壓到4位元甚至3位元,讓模型檔案變小、跑得更快,但也可能讓答案的準確度打折扣」的技巧一起用——開發者可以依照手機的記憶體和算力,選擇壓縮程度不同的模型版本。文章用「基準測試用一組標準化的題庫來測試AI模型表現好壞的方法,方便不同模型之間互相比較,例如ChartQA、MMLU-Pro」數據證明,即使模型被壓縮到3-bit這麼小,只要肯多轉交一些題目給雲端(大約四到六成),整體表現依然能追上完全用雲端大模型的水準。

🎯 為什麼值得你花時間

省錢又保隱私,還能離線用大部分問題其實不需要動用最強的雲端模型,只有真正拿不準的題目才轉出去。這代表大多數對話留在裝置端處理,使用者資料不用上傳、雲端API帳單也大幅減少,網路斷線時系統也不會整個癱瘓。
拿benchmark數據說話,不是空口說白話文章附上的表格顯示,Gemma 4 E2B Hybrid只要轉交15%到55%的問題給雲端,整體分數就能追平Gemini 3.1 Flash-Lite——這種「用數據證明混合架構划算」的思維,比起單純比較『大模型比較準』更有工程說服力。
給開發者的啟示:問題不是選大模型或小模型,是學會混用這種「先自己試、沒把握再求援」的架構思路不只適用於AI模型,也可以套用在很多工程場景(例如先用便宜的規則系統過濾,複雜案例才交給昂貴的人工審核),是一種值得學起來的通用設計模式。

⚙️ 它是怎麼運作的

1
訓練完成後,額外嵌入探針團隊拿已經訓練好的Gemma 4模型,再做一次post-train(後續加訓),讓模型除了產生答案之外,還多練出一組專門評估「這次答案可不可信」的探針模組,一起打包進同一個checkpoint(模型權重檔)裡。
2
使用者發問,端側模型先接手手機App收到使用者的問題後,先交給裝在裝置裡的Gemma 4 E2B處理,這個過程完全不用連網,回應也快。
3
探針同步算出信心分數模型產生答案的同時,探針會輸出一個0到1的信心分數,並且是以結構化資料(不是文字)回傳,方便程式直接讀取判斷。
4
跟門檻比大小系統把這個分數拿去跟預設門檻(範例用0.85)比較,這一步就是整套設計的關鍵開關。
5
分數不夠高,自動轉交雲端如果信心分數低於門檻,代表小模型自己也「心虛」,系統就把同一個問題轉手給雲端上更強的Gemini 3.1 Flash-Lite重新回答,使用者不會感覺到中間切換過模型。
6
開發者可依裝置條件調整量化等級手機規格好一點,就用4-bit量化版本,轉手雲端的比例可以壓低;規格差一點就用3-bit版本,雖然檔案更小更省資源,但需要轉手的比例也會提高,這是開發者要自己拿捏的取捨。
不同量化等級下,Gemma 4 E2B Hybrid要追上Gemini 3.1 Flash-Lite的表現,需要轉交雲端的題目比例
測驗項目FP16(原始精度)4-bit量化3-bit量化
ChartQA(圖表理解)15–20%25–30%40–50%
MMBench(多模態能力)30–35%40–45%50–55%
LibriSpeech(語音辨識)25–30%35–40%55–65%
MMLU-Pro(綜合知識推理)45–55%約90%不適用

🔍 程式碼漫遊(點有 ● 的行看白話講解)

這段程式碼是文章附的官方範例,示範怎麼用cactus-compute套件載入Gemma 4 E2B模型、發問,並且直接讀出這次回答的信心分數——重點不在模型多厲害,而在最後一行『confidence』是怎麼被取出來的。

import json
💬 之後要把max_tokens、auto_handoff這些設定包成JSON字串傳進模型
from cactus.bindings.cactus import cactus_complete, cactus_init
💬 匯入Cactus提供的兩個核心函式:初始化模型、以及生成回答
from cactus.cli.download import download_bundle
💬 這支函式負責把模型權重檔從網路下載到本機硬碟
lm = cactus_init(str(download_bundle("Cactus-Compute/gemma-4-E2B-it")))
💬 先下載Gemma 4 E2B模型包,再把下載路徑丟給初始化函式,把模型載入記憶體、準備好可以推論
result = cactus_complete(
💬 呼叫生成函式,把對話內容、參數,還有兩個進階選項一起傳進去,回傳一包結果
lm,
💬 剛剛初始化好、已經載入記憶體的模型物件
[{"role": "user", "content": "What is the capital of France?"}],
💬 對話紀錄,格式跟常見聊天機器人API很像:一串帶有角色與內容的訊息
json.dumps({"max_tokens": 512, "auto_handoff": False}),
💬 重點在auto_handoff設成False——代表先不要讓套件自動幫你轉交雲端,這樣我們才能自己看到信心分數再決定
None,
💬 這個範例沒有用到的參數,先留空
lambda *_: None,
💬 這是一個「什麼都不做」的callback函式,通常用來即時接收模型一個字一個字生成出來的內容(streaming)
)
💬 結束函式呼叫
print(result["response"].strip())
💬 印出模型回答的文字內容
print("confidence:", result["confidence"])
💬 這是全篇的重點——直接從回傳的資料結構讀出信心分數,完全不用自己去解析回答文字裡有沒有『我不確定』這種字眼

🛠️ 動手做:信心分數轉手模擬器

  1. 把信心門檻滑桿留在預設的0.85,看看目前10題裡有幾題本地回答、幾題轉交雲端
  2. 把門檻拉到接近1(幾乎要非常確定才敢自己回答),觀察轉交雲端的比例怎麼飆升
  3. 再把門檻拉到接近0(幾乎什麼都自己回答),感受一下『沒把握也硬答』會發生在哪些題目上
  4. 按下「重新出10題」,同一批問題的信心分數每次會有一點隨機浮動,模擬真實世界裡同一題目每次問起來把握度也會有些微差異
  5. 想一想:如果這是阿凱的診所App,症狀初篩問題你會把門檻設高一點還是低一點?為什麼?
👇 下面是活的,直接操作

🧠 工程思維透鏡(資深工程師看到的是什麼)

🔭 為什麼不乾脆全部都用雲端大模型回答,準確度不是更穩嗎?
資深工程師會先算成本結構:多數問題其實不需要動用最強模型,全部走雲端等於為了少數難題,讓每一題都付出最高的延遲、頻寬與API費用。混合式架構的關鍵洞察是「用便宜的手段先過濾大多數簡單案例,貴的手段只留給真正需要的少數」,這是資源分配的基本功,不是AI獨有的招數。
🔭 信心分數為什麼要靠額外訓練的探針算出來,而不是直接問模型『你有把握嗎』?
如果直接讓語言模型自己說『我有八成把握』,這句話本質上也是模型生成出來的文字,一樣可能是幻覺、一樣可能跟實際準確度沒關聯,而且格式也不穩定,程式很難穩定解析。獨立訓練一組探針、輸出結構化的數字,等於把『判斷可信度』這件事從『生成文字』的任務裡切出來獨立訓練與驗證,可以被校準(calibrate)、被量測,也才能安心讓程式拿去做if/else判斷。
🔭 量化等級跟轉手比例成正比,這個數據透露了什麼工程取捨?
量化壓縮模型是用準確度換取體積與速度,數據顯示壓得越兇(3-bit比4-bit),轉手雲端的比例就跳得更高,代表『裝置成本』與『雲端依賴』兩者是可以互相交換的兩端。這給開發者一個具體的決策依據:如果目標裝置記憶體吃緊、只能塞下3-bit模型,就要在設計時把雲端依賴和額外的API成本一併算進成本估算,而不是只看模型檔案變小了很開心。
🔭 文章示範的0.85門檻是寫死的常數,這樣的設計實際上線後會有什麼風險?
固定門檻假設了信心分數的『校準品質』在各種題型、各種使用情境下都一樣可靠,但實務上探針可能在某些領域(例如醫療影像判讀)系統性地過度自信或過度保守,這種現象叫校準漂移。工程上通常需要依應用的風險等級動態調整門檻——高風險場景(例如文章提到的X光片判讀)應該把門檻設得更保守、更容易觸發轉手;低風險的閒聊場景則可以放寬門檻,讓端側模型多扛一點,這正是這次瀏覽器demo讓你動手體會的部分。

📝 隨堂考(點選答案,立即回饋)

Q1. Cactus Hybrid讓端側小模型多做了什麼,才有辦法決定該不該轉交雲端?
✅ 文章的核心設計是post-train時嵌入探針,讓模型在回答的同時輸出結構化的信心分數,而不是靠硬體或使用者手動決定。
Q2. 根據文中benchmark表格,量化壓縮得越激進(例如3-bit相比4-bit),通常需要轉交雲端的比例會怎麼變化?
✅ 表格中每一項測驗,3-bit欄位的轉手比例都比4-bit和FP16高,說明壓縮得越小,模型自己扛得住的題目就越少。
Q3. 信心分數為什麼要以『結構化資料』回傳,而不是讓程式去解析模型回答的文字內容?
✅ 文章特別強調confidence是『回傳結構化資料(never parsed out of the answer text)』,就是為了避免從不穩定的生成文字裡硬解析數字。
Q4. 這篇文章示範的混合式架構,本質上是在哪一組取捨之間找平衡?
✅ 端側模型省成本、保隱私、能離線,但單獨表現有限;雲端大模型準但貴又要連網。信心分數轉手機制正是在這兩端之間動態取捨。
Q5. 範例程式碼裡把auto_handoff設成False,最可能是為了什麼?
✅ 程式註解說明這個範例要示範怎麼直接讀result["confidence"],所以先關掉自動轉交,讓開發者能看到原始信心分數再自行處理。

🃏 翻牌記憶卡(先想答案,再點開對答)

什麼是「端側模型」(on-device model)?點我翻面
直接安裝並執行在使用者裝置(手機、筆電)上的AI模型,不需要連網路就能運作
Cactus Hybrid裡「信心分數」的用途是什麼?點我翻面
判斷端側小模型這次的答案可不可靠;分數低於門檻就自動轉交給更強的雲端模型
「量化」(quantization)是什麼?點我翻面
把模型內部數字的精細程度壓縮,例如從16位元壓到4位元,讓模型檔案變小、跑得更快,但可能犧牲準確度
「探針」(probe)在這套系統裡的角色?點我翻面
額外訓練並嵌入模型checkpoint裡的小型判斷器,專門負責評估目前這次答案的可信程度
為什麼壓縮到3-bit的小模型還能追上雲端大模型的benchmark分數?點我翻面
因為困難的題目會轉交雲端處理,簡單題目本地就能答對,整體平均表現才追得上

✅ 離開前自測(全勾=這課真的學會了)

0%