小模型做決策?|比大模型快十倍

你有沒有遇過這種情況:客服系統要判斷「這封信該轉給誰」、電商要判斷「這筆訂單是不是詐騙」、內部工具要判斷「這段話是抱怨還是詢問」——這些都是「決策」任務,但你每次都呼叫 GPT 或 Claude,一個月帳單燒掉好幾千塊,延遲還慢到使用者想關掉視窗。

這篇文章要教你一件很實用的事:用一個 20 億參數的小模型,專門做決策判斷。我們會用開源的 Strands Decider 2B 當例子,帶你從安裝、寫程式、設計提示詞,到跟大模型做成本比較,全部走一遍。讀完你會知道什麼時候該用大模型、什麼時候小模型反而又快又準又便宜。

為什麼「決策」不該用大模型?

先講一個觀念:大模型是通才,小模型可以是專才。

GPT、Claude 這類模型之所以貴,是因為它們要能寫詩、寫程式、翻譯、推理、聊天,什麼都行。但如果你今天只需要它做一件事——例如把客服信分類成「退款/物流/產品問題」三類——你其實是在用一台法拉利去巷口買醬油。

決策任務有幾個特徵:選項有限、判斷標準明確、格式固定。這種任務最適合用小模型微調或特化。Strands Decider 2B 就是專門為此設計的模型,它在 Hugging Face 上以「small, open-source, decision model」定位發布,參數量只有 2B,一般筆電的 CPU 就能跑,有獨立顯示卡的話速度更是快到無感。

實際差距有多大?根據社群實測,在單純的分類決策任務上,2B 特化模型的反應時間常常是大型模型的十分之一以下,而準確率在「任務單純」的情境下幾乎不相上下。換句話說,你花十分之一的成本、十分之一的時間,換到差不多的結果。

第一步:環境安裝與模型下載

我們用 Python 來示範,因為這是最多人用的語言。先建立一個乾淨的環境:

python -m venv decider-env
source decider-env/bin/activate  # Windows 用 decider-env\Scripts\activate
pip install transformers torch accelerate

接著下載模型。Strands Decider 2B 託管在 Hugging Face 上,你可以直接用 transformers 載入:

from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "strands-ai/strands-decider-2b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype="auto",
    device_map="auto"
)

如果你沒有獨立顯卡,把 device_map="auto" 改成 device_map="cpu" 就好,只是速度會慢一些。以台灣常見的筆電規格(16GB RAM、無獨顯)來說,跑 2B 模型是完全可以接受的,第一次載入約 30 秒到 1 分鐘,之後就快了。

小提醒:如果你想要更快的推論速度,可以改用 llama.cpp 或 GGUF 量化版本,記憶體需求會再砍一半,這對香港常見的輕薄筆電特別友善。

第二步:設計「決策提示詞」的三個關鍵

小模型不是隨便問就好,提示詞設計得好不好,準確率可以差到三成以上。以下是三個實戰關鍵。

第一,把選項寫死。 不要問「這封信在講什麼」,要問「請從以下三個標籤中選一個:退款、物流、產品問題」。選項越明確,小模型越不容易亂答。

第二,要求固定輸出格式。 例如要求它只回傳標籤本身,不要多餘解釋。這樣你才能用程式直接解析,不用再寫一堆字串處理邏輯。

第三,給一兩個範例(few-shot)。 小模型的「舉一反三」能力比大模型弱,但如果你在提示詞裡塞兩個正確示範,它的表現會立刻拉上來。

實際長這樣:

prompt = """你是一個客服郵件分類器。請從以下標籤中選出最適合的一個:
[退款, 物流, 產品問題]

範例:
輸入:我上週訂的東西到現在還沒到,可以查一下嗎?
輸出:物流

輸入:這個產品用兩天就壞了,我要退錢。
輸出:退款

輸入:{user_message}
輸出:"""

這樣設計之後,你只要把 {user_message} 換成實際的客戶訊息,模型就會吐出對應標籤。整個流程不到 0.5 秒。

第三步:包成 API,接進你現有的系統

模型跑得動只是第一步,真正要上線,你得把它包成一個服務。最簡單的方式是用 FastAPI:

from fastapi import FastAPI
app = FastAPI()

@app.post("/classify")
def classify(payload: dict):
    msg = payload["message"]
    inputs = tokenizer(prompt.format(user_message=msg), return_tensors="pt")
    outputs = model.generate(**inputs, max_new_tokens=10)
    result = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return {"label": result.split("輸出:")[-1].strip()}

跑起來之後,你的客服系統、內部工具、LINE Bot 都能直接呼叫這個端點。對於香港、台灣的中小企業來說,這代表你可以用一台普通伺服器,處理每天上萬筆的分類請求,而不需要付任何 API 費用。

成本實測:小模型 vs 大模型差多少?

我們來算一筆實際的帳。假設你每天處理 10,000 筆客服分類:

方案每日成本延遲準確率(單純分類)
大型雲端 API約 US$15–401–3 秒92–95%
Decider 2B 自架電費約 US$0.30.3–0.8 秒88–93%

一個月下來,差距是幾百到上千美元。對新創或小型團隊來說,這筆錢可以直接拿去請人或多投廣告。當然,如果你的任務很複雜(例如要推理、要寫長文),那還是乖乖用大模型——工具要選對場景,不是越小越好。

什麼時候該用、什麼時候不該用?

最後給你一個簡單的判斷準則:

適合小模型的情境:選項少於十個、判斷標準明確、每天請求量大、對延遲敏感、資料有隱私顧慮(自架不外傳)。

該用大模型的情境:需要多步驟推理、需要解釋理由、任務經常變動、需要處理罕見或模糊的邊界案例。

很多團隊的做法是「大小配」:先用小模型跑第一層判斷,遇到不確定的案例(例如信心分數低於某個門檻)再轉給大模型處理。這樣既省錢又保留彈性,是目前最實用的架構。

延伸閱讀

常見問題

Q: Strands Decider 2B 可以在 Mac 上跑嗎?

A: 可以。 Apple Silicon(M1 以後)透過 device_map="mps" 就能使用 GPU 加速,16GB 統一記憶體跑 2B 模型相當順暢。Intel Mac 則建議用 CPU 模式或 GGUF 量化版。

Q: 我需要會寫程式才能用嗎?

A: 基本 Python 就夠了。 本文的範例程式碼可以直接複製貼上,你只需要改提示詞裡的標籤和範例。如果你完全不寫程式,也可以透過 Ollama 這類工具用命令列操作,或請工程師同事協助包成內部工具。

Q: 小模型的準確率會不會很差?

A: 看任務。 在選項明確的分類任務上,2B 特化模型通常能達到 88–93% 的準確率,跟大模型差距不大。但如果你的任務需要推理、需要理解諷刺或隱喻,小模型就會明顯吃力,這時就該交給大模型。

Q: 自架模型會不會有資安風險?

A: 反而更安全。 自架代表資料不出你的伺服器,對處理客戶個資、醫療或金融資料的團隊來說,這比呼叫外部 API 更容易通過內部合規審查。你只需要注意伺服器本身的防火牆與存取控制。

Q: 除了客服分類,還能用在哪裡?

A: 任何「判斷題」都可以。 例如:郵件優先級排序、社群留言是否違規、發票自動歸類、內部工單分派、甚至幫你判斷一篇文章該放哪個分類。只要能把判斷標準寫清楚,小模型就能勝任。