你個本地 LLM 到底幾勁?自己起個 Eval 測試集由零開始評分

唔好靠 vibe check——用 promptfoo 加自製港式測試集,量化的 model 揀 model 先唔會買錯

AI 教學AI 生成

重點整理

  • 痛點:網上 benchmark 話 90 分嘅 model,用到你嘅港式場景就亂晒——因為 benchmark 唔代表你嘅 use case
  • 四大 eval 類型:精確匹配、關鍵字斷言、LLM-as-judge、人手抽檢——各有適用場景同成本
  • 實戰:用 promptfoo 起一個 20 題港式客服 eval,全程免費,附完整可抄 config
  • 進階:eval 唔止揀 model 用——改 prompt 之後跑一次回歸測試,防止愈改愈差

Benchmark 嘅分數唔係你嘅分數

啲人揀本地 model 嘅習慣:上網睇 benchmark 排名,邊個高分就裝邊個。但 MMLU 考嘅係美式學術題,你嘅 use case 係「用廣東話答香港客服查詢」——兩者關係可能係零。

真正有用嘅係 自己起一個細細哋嘅 eval set:20 至 50 題你自己場景嘅真實問題加理想答案。之後無論換 model、改 prompt、調 temperature,都跑一次睇分數——呢個先係你場景嘅 benchmark。

四種評分方法(由平到貴)

方法例子適用
精確匹配答案等於 "28°C"有標準答案嘅抽取/分類任務
關鍵字斷言答案要包含 "退款" 同 "7 日"檢查有冇講到重點
LLM-as-judge用另一個 model 按 rubric 評 1-5 分開放式答案,冇標準答案
人手抽檢自己瞇 10 條任何方法嘅最後防線

LLM-as-judge 好方便但有坑:judge model 鍾意俾中間分(7/10 症候群)、對長答案有偏好。所以 rubric 一定要寫得具體:「用咗廣東話?有冇直接回答問題?有冇編造資料?」逐項評分好過一句「答得好唔好」。

實戰:promptfoo 港式客服 eval

promptfoo 係免費開源工具,一個 YAML config 就可以跑齊多 model 對比:

# promptfooconfig.yaml
description: "港式客服 eval - qwen3 vs llama3"
prompts:
  - "你係香港電訊公司客服。用廣東話回答客人問題。問題:{{{{question}}}}"
tests:
  - vars:
      question: "我個網絡尋日晚上八點斷咗,可唔可以扣返啲月費?"
    assert:
      - type: contains
        value: "紀錄"
      - type: llm-rubric
        value: "答案應該表示會幫客人查紀錄或者提出補償方案,唔可以編造具體賠償金額"
  - vars:
      question: "點樣轉合約?"
    assert:
      - type: contains-any
        value: ["續約", "轉台"]
      - type: llm-rubric
        value: "答案應該問清楚客人現時合約或者講明查詢方法,唔可以直接報價"

跑 promptfoo eval 就有齊兩個 model 嘅分數對比;promptfoo view 開 web UI 睇逐題答對答錯。

由零起一個 eval set 嘅流程

  1. 收集真實問題:翻你自己嘅 chat log、email、客服紀錄,揀 20 條最常見加最棘手。
  2. 寫理想答案:唔使完美,寫低「起碼要講到咩」就夠——通常係 2 至 3 個關鍵點。
  3. 分配斷言:有硬答案嘅用 contains,主觀嘅用 llm-rubric,每題 1 至 3 個斷言。
  4. 跑基線:而家個 model 先跑一次,記低分數。
  5. 回歸測試:之後每次改 prompt,跑一次對比——分數跌咗即係你改壞咗。

Eval 都會有偏見

留意三個坑:eval 題全部出自你自己手筆,會偏向啱你而家個 prompt 嘅寫法;llm-rubric 用嘅 judge model 本身都有偏好(建議 judge 同被評 model 唔好同款);分數長期 95%+ 即係 eval set 太易,要加難題。

總結

「邊隻 model 好」呢條問題冇通用答案,只有「喺我嘅 20 條題目度邊隻好」。今晚花一個鐘起個 eval set,之後每次換 model、改 prompt 都有數字靠——呢個係由「感覺佢幾勁」去到「知道佢幾勁」嘅一步。

延伸閱讀

分享畀朋友

相關文章

更多「AI 教學」

睇全部分類 →