模組 01 · 第 6 課

怎麼選模型

排行榜告訴你模型的平均水平,卻不能告訴你它在你的任務上怎麼樣。用 20 道題比較四種模型配置的準確率、速度和花費,學會用自己的小測試集做選擇。

  • 約 40 分鐘
  • 難度:入門
  • 實測:2026-09-14 deepseek-flash,deepseek-v4-pro

程式碼和執行結果保留原樣(簡體中文),與實際執行時完全一致。

新模型幾乎每週都有,每一個都說自己在某個排行榜上拿了第一。選模型時看排行榜,就像招人時只看學歷:有參考價值,但決定不了這個人能不能幹好你這份活。

這一課講一個更可靠的辦法:準備 20 道你自己任務裡的題,讓候選模型都做一遍,看誰答得對、誰快、誰便宜。花不了多少錢,半小時就能出結果。

選模型時要看什麼

維度 要問的問題
質量 在我的任務上答得對不對?
價格 按我的真實用量,一個月多少錢?
速度 使用者要等多久?首字出來要多久,整段寫完要多久?
功能 支援工具呼叫嗎?支援 JSON 輸出嗎?能看圖嗎?上下文夠長嗎?
部署方式 能不能呼叫雲端 API?資料能不能出公司?需不需要本地部署?
穩定性 限流嚴不嚴?出過幾次故障?模型會不會突然下線?

質量排第一,但不是唯一。一個準確率 95% 但要等 10 秒的模型,放在聊天窗口裡使用者會嫌慢;一個準確率 90% 但便宜十倍的模型,對每天呼叫幾十萬次的後臺任務可能更合適。

模型大致分幾類

閉源和開放權重。閉源模型只能通過 API 呼叫,你拿不到模型本身。開放權重的模型把參數公開發布,你可以下載到自己的伺服器上執行,資料不出門,但要自己準備顯示卡和運維。第 10 模組會講怎麼在本地部署開放權重的模型。

思考和不思考。以前通用模型和推理模型是分開的兩個模型,現在很多模型用一個參數就能切換。DeepSeek 的 deepseek-flashdeepseek-v4-pro 都支援思考和非思考兩種模式,預設開啟思考。思考模式更準,但更慢更貴。

大和小。同一家的產品線裡,通常有一個便宜快速的型號和一個更貴、能力更強的型號,比如 DeepSeek 的 flash 和 pro。直覺上貴的一定更好,但下面的實驗會告訴你,不一定。

截至 2026 年 9 月,國內能直接用的主要選擇有 DeepSeek、阿里雲百鍊(通義千問系列)、Kimi 等,第 00 模組第 2 課列了它們的介面地址。具體型號更新得很快,這裡不列清單,去各家的文件裡看最新的就好。重要的是下面這套比較方法,它不會過時。

實驗:20 道題比較四種配置

我準備了 20 道有標準答案的題:算術、單位換算、數字母、數漢字、簡單推理、古詩、Python 常識。然後讓四種配置都做一遍:deepseek-flashdeepseek-v4-pro,各自開思考和不開思考。

程式的核心部分是這樣的(完整程式碼在 code/01-llm-basics/model_eval.py,費用計算用的是第 4 課寫的 cost_usd):

QUESTIONS = [
    ("17 乘以 23 等于多少?", ["391"]),
    ("9.11 和 9.9 哪个大?", ["9.9"]),
    ("“秋天的叶子一片片落下”这句话有几个字?", ["10"]),
    ("如果今天是星期三,100 天后是星期几?", ["星期五", "周五"]),
    ("鸡兔同笼,共 35 个头,94 只脚,兔子有几只?", ["12"]),
    # ……一共 20 道
]


def normalize(text):
    # 去掉空格和标点,再去掉结尾的单位和"大"这类多余的字,只比较核心答案。
    # 注意不能去掉小数点,否则 9.9 和 99 就分不清了。
    text = re.sub(r"[\s,。,!!??::“”\"'、]", "", text.lower()).rstrip(".")
    return re.sub(r"(个字|个|人|只|天|平方厘米|厘米|摄氏度|度|次|大)$", "", text)


def run_one(model, thinking, question):
    start = time.time()
    response = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": "只回答最终答案本身,不要写单位以外的任何解释。"},
            {"role": "user", "content": question},
        ],
        extra_body={"thinking": {"type": "enabled" if thinking else "disabled"}},
    )
    return response.choices[0].message.content.strip(), time.time() - start, response.usage

每種配置用 10 個執行緒併發做完 20 道題,統計答對幾道、平均每題幾秒、一共花多少錢,並把答錯的題打印出來。我執行的結果:

deepseek-flash(不思考): 答对 19/20,平均 0.8 秒/题,20 题共 0.0002 美元
    答错:9.11 和 9.9 哪个大? → 9.11
deepseek-flash(思考): 答对 20/20,平均 0.9 秒/题,20 题共 0.0026 美元
deepseek-v4-pro(不思考): 答对 16/20,平均 0.9 秒/题,20 题共 0.0009 美元
    答错:9.11 和 9.9 哪个大? → 9.11
    答错:“秋天的叶子一片片落下”这句话有几个字? → 9
    答错:一个正方形的周长是 24 厘米,它的面积是多少平方厘米? → 9
    答错:单词 raspberry 里有几个字母 r? → 2
deepseek-v4-pro(思考): 答对 20/20,平均 2.1 秒/题,20 题共 0.0114 美元

讀結果

思考模式把錯題全部糾正了。兩個模型開了思考都是 20 題全對。不思考時出錯的都是需要"一步一步來"的題:比較小數、數字數、先算邊長再算面積。

貴的模型不一定更好deepseek-v4-pro 關掉思考,只答對 16 道,比便宜的 flash 還少 3 道。在正方形那道題上,它回答"9",大概是把"周長 24"錯當成了面積的線索。價格高的模型通常在更難、更開放的任務上有優勢,但在你的具體任務上,它完全可能不如便宜的那個。這正是要自己測的原因。

同樣全對,價格和速度差很多。flash 開思考和 pro 開思考都是 20/20,但 pro 貴了 4 倍多(0.0114 對 0.0026 美元),還慢了一倍多(2.1 對 0.9 秒)。對這組題來說,flash 開思考是明顯更好的選擇。

不思考的 flash 價效比最高。19/20 的準確率,花費只有開思考時的十分之一。如果你的任務裡沒有"比較小數"這類陷阱,它可能就夠用了。

這個實驗的侷限

說完結論,也要說清楚這個實驗靠不住的地方。

20 道題太少。答對 16 道和 17 道的差距,可能只是運氣。我前後運行了兩次,deepseek-v4-pro 不思考的成績一次是 17 道,一次是 16 道,錯的題也不完全一樣。20 道題適合發現"明顯差很多"的情況,要區分"差不多"的兩個模型,需要更多的題,而且每題多跑幾次。

評分指令碼自己也會錯。我第一次執行時,flash 開思考被判了兩道錯題:一道回答的是"9.9 大",一道是"10個字"。答案其實是對的,只是我的 normalize 函式沒有去掉"大"和"個字"這樣的尾巴。修好之後重新執行,才得到上面的結果。所以一定要把判錯的題一道道看過去,確認是模型錯了,而不是評分錯了。

這些題不是你的任務。算術、數字母、古詩,和你要做的客服、寫程式碼、提取合同資訊都不一樣。這組題只是演示方法。給你自己的專案選模型,題目必須來自你的真實任務。

給自己的專案選模型

  1. 收集 20 道真實的題。從你的真實場景裡挑:使用者真實問過的問題、真實要處理的文件。要有簡單的,也要有你知道模型容易出錯的。
  2. 想好怎麼判對錯。有標準答案的最好,用程式自動比對。開放性的回答(比如寫一段客服回覆),可以寫一個打分標準人工評,或者讓另一個模型來評,06 模組第 2 課會講怎麼做。
  3. 挑 2~4 個候選。一般是一個便宜的、一個貴的,再加上開關思考的組合。
  4. 跑一遍,看錯題。不要只看準確率,每道錯題都看一下,判斷是模型的問題還是題目或評分的問題。
  5. 按真實用量算錢。用第 4 課的 cost_usd,按每天呼叫多少次估算月費用。
  6. 選能滿足要求的最便宜的那個。準確率達標之後,再看速度和價格。

這 20 道題不要扔。以後換模型、改提示詞、升級版本,每次都拿它們跑一遍,就知道有沒有變差。06 模組會把它擴充套件成一個完整的評估集。

練習

  1. model_eval.pyQUESTIONS 里加 5 道你覺得模型容易錯的題,比如多步的日期計算、帶陷阱的邏輯題,看看四種配置誰表現最好。
  2. 如果你有別家的 API 金鑰,給 CONFIGS 加上別家的模型(要改一下 run_one,讓它能用不同的客戶端,並去掉別家不認識的 thinking 參數),比較一下結果。
  3. model_eval.py 對同一個配置連續跑 3 次,看每次答對的數量一樣嗎?哪幾道題時對時錯?

自測

1. 一個模型在排行榜上排第一,為什麼還要用自己的題測一遍?

排行榜測的是模型在通用題目上的平均水平,而你關心的是它在你的具體任務上的表現。兩者可能差很多。本課實驗裡,更貴的 deepseek-v4-pro 在不思考模式下反而比便宜的 flash 錯得多。只有用自己任務裡的真實題目測,才知道哪個模型適合你。

2. 用 20 道題測出來模型 A 答對 17 道,模型 B 答對 16 道。能說明 A 比 B 好嗎?

不能。20 道題太少,一兩道的差距可能只是隨機波動,同一個模型跑兩次成績都可能不一樣。小測試集適合發現差距明顯的情況。要區分接近的模型,需要更多的題,並且每題多跑幾次取平均。

3. 你的評估指令碼顯示模型答錯了 3 道題。下一步應該做什麼?

逐一檢視這 3 道題的原始回答,確認是模型真的答錯了,還是評分指令碼判錯了(比如回答裡多了單位、多了標點)。也要檢查題目和標準答案本身有沒有問題。確認之後,再根據錯題的型別決定要不要換模型、開思考或者改提示詞。

提問與討論

這一課沒看懂的地方,在這裡問。看到別人的問題,也歡迎你來回答。

提問 +3 點,回答別人 +6 點。內容經審核後公開。

正在載入討論…