回到頂部
LLM 輸出評估指南 — 封面

LLM 輸出評估指南

怎麼衡量 AI 回答的品質——Benchmark、LLM-as-Judge、自動化評估。

📏 為什麼需要評估 LLM?

💡 一句話理解 你不會不跑測試就把程式碼部署上線。AI 也一樣——不評估品質就不該上線。

工程師常見的困境

老闆:「AI 客服的回答好嗎?」
工程師:「呃⋯⋯感覺還行?」  ← 這不是工程語言

正確回答:
「Faithfulness 97.2%, Relevancy 89.5%,
 比上個月提升了 3.1 個百分點。」  ← 這才是工程語言

🏆 公開 Benchmark 速查

當你在選模型或向老闆報告時,這些 Benchmark 是通用語言:

Benchmark衡量什麼如何理解分數
MMLU世界知識(57 學科)90+ = 頂級,70+ = 堪用
HumanEvalPython 程式碼能力90+ = 頂級
MT-Bench多輪對話品質9.0+ = 頂級(滿分 10)
GPQA博士級科學推理60+ = 頂級(很難的題目)
MATH數學推理80+ = 頂級
Chatbot Arena人類盲測投票排名ELO 分數,越高越好

2026 主流模型分數參考

模型MMLUHumanEvalMT-Bench
GPT-5.492.196.39.5
Claude Sonnet 4.691.895.89.4
Gemini 3.1 Pro91.594.29.3
DeepSeek V490.393.79.2
Llama 3.1 405B88.689.58.9

⚠️ Benchmark 分數不代表你的場景。MMLU 考的是通用知識,你的客服機器人需要的是「能根據知識庫準確回答」——這要用你自己的評估方式。更多模型比較請參考模型比較指南


🔧 自建評估系統

評估的四大維度

維度問的是什麼分數解讀
Faithfulness(忠實度)AI 有沒有亂掰?回答有根據嗎?(參考 AI 幻覺> 95% 才能上線
Relevancy(相關性)AI 有回答到問題嗎?> 85% 很不錯
Completeness(完整性)回答夠完整嗎?有沒有漏掉重要資訊?> 80% 可接受
Harmlessness(無害性)回答有沒有不當內容?必須 100%

LLM-as-Judge(用 AI 評估 AI)

最高效的方式——用一個強大的 LLM 當「考官」,評估另一個 LLM 的回答。

def llm_judge(question, ai_answer, reference=None, model="gpt-4o"):
    """用 GPT-4o 當考官評估 AI 回答"""

    judge_prompt = f"""你是一個嚴格的 AI 回答品質評審。
請評估以下 AI 回答的品質。

## 問題
{question}

## AI 的回答
{ai_answer}

{"## 參考答案" + chr(10) + reference if reference else ""}

## 評分標準(每項 1-5 分)
1. **準確性**:回答是否正確、有根據?
2. **相關性**:是否正確回答了問題?
3. **完整性**:是否涵蓋了關鍵資訊?
4. **簡潔性**:是否避免了冗餘和廢話?

請用 JSON 格式回答:
{{"accuracy": 1-5, "relevancy": 1-5, "completeness": 1-5,
  "conciseness": 1-5, "overall": 1-5, "reason": "簡短說明"}}"""

    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": judge_prompt}],
        response_format={"type": "json_object"}
    )

    return json.loads(response.choices[0].message.content)

# 使用範例
result = llm_judge(
    question="台灣的首都在哪裡?",
    ai_answer="台灣的首都是台北,位於台灣北部。",
    reference="台北市是中華民國的首都。"
)
print(result)
# {"accuracy": 5, "relevancy": 5, "completeness": 4,
#  "conciseness": 5, "overall": 5, "reason": "回答準確完整"}

批次評估框架

import pandas as pd

def evaluate_batch(test_cases, ai_function):
    """批次評估一組測試案例"""
    results = []

    for case in test_cases:
        # 取得 AI 回答
        ai_answer = ai_function(case["question"])

        # 用 Judge 評估
        scores = llm_judge(
            question=case["question"],
            ai_answer=ai_answer,
            reference=case.get("expected_answer")
        )

        results.append({
            "question": case["question"],
            "ai_answer": ai_answer,
            **scores
        })

    df = pd.DataFrame(results)

    # 印出統計
    print("=== 評估結果 ===")
    for col in ["accuracy", "relevancy", "completeness", "overall"]:
        print(f"{col}: {df[col].mean():.2f} / 5.00")

    return df

# 測試案例
test_cases = [
    {"question": "怎麼退貨?", "expected_answer": "7 天內無條件退貨..."},
    {"question": "運費多少?", "expected_answer": "滿 500 免運..."},
    {"question": "營業時間?", "expected_answer": "週一到週五 9-18..."},
]

results = evaluate_batch(test_cases, your_ai_chatbot)

📊 RAG 專用評估

如果你的 AI 系統使用 RAG,需要額外評估檢索品質。

用 Ragas 框架

from ragas import evaluate
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_precision,
    context_recall,
)

# 準備評估資料
eval_data = {
    "question": ["怎麼退貨?", "運費多少?"],
    "answer": ["7 天內可退貨...", "滿 500 免運..."],
    "contexts": [
        ["退貨政策:7 天內無條件退貨..."],
        ["運費規定:滿 500 元免運費..."],
    ],
    "ground_truth": ["7 天內無條件退貨", "滿 500 元免運"]
}

result = evaluate(
    eval_data,
    metrics=[faithfulness, answer_relevancy,
             context_precision, context_recall]
)

print(result)
# faithfulness: 0.97
# answer_relevancy: 0.89
# context_precision: 0.92
# context_recall: 0.85

RAG 評估指標說明

指標衡量什麼目標
Context Precision檢索到的段落有多少是真正相關的> 80%
Context Recall所有相關段落中,有多少被檢索到> 85%
FaithfulnessAI 回答是否忠實於檢索到的內容> 95%
Answer Relevancy最終回答和問題的相關程度> 85%

🔄 持續監控

模型上線後不是結束——品質可能隨時間退化。

建立監控流程

import logging

logger = logging.getLogger("ai_monitor")

class AIMonitor:
    """AI 回答品質持續監控"""

    def __init__(self, sample_rate=0.1):
        self.sample_rate = sample_rate  # 抽樣率 10%

    def log_interaction(self, question, answer, metadata=None):
        """記錄每次 AI 互動"""
        import random
        # 隨機抽樣評估(不是每次都評,太貴)
        if random.random() < self.sample_rate:
            scores = llm_judge(question, answer)
            logger.info(f"AI 品質抽檢: overall={scores['overall']}/5")

            # 低品質警報
            if scores["overall"] <= 2:
                logger.warning(
                    f"⚠️ 低品質回答偵測!\n"
                    f"問題: {question}\n"
                    f"回答: {answer[:100]}...\n"
                    f"分數: {scores}"
                )

監控儀表板指標

指標監控目的警報閾值
平均品質分數AI 整體表現< 3.5/5
Faithfulness有沒有更多幻覺< 90%
拒答率AI 回答「我不知道」的比例> 30%
延遲 P95回應速度> 5 秒
Token 成本成本趨勢日均超過預算 120%

❓ FAQ

🧠 為什麼評估 LLM 這麼難?

傳統軟體測試有明確的「對/錯」:add(1, 2) 回傳 3 就是對,回傳 4 就是錯。但 LLM 沒有這種奢侈

三個根本性困難

1. 非確定性(Non-deterministic):同一個問題問兩次,回答可能不一樣。即使 temperature=0,不同 API 版本、不同硬體、浮點誤差都會讓輸出飄移。

2. 沒有單一正解(No single ground truth):「怎麼申請退貨?」可以有十種寫法都是對的。你不能用字串比對,要比對的是語意

3. 品質是多維度的:一個回答可能「事實正確」但「太囉嗦」,或「很精簡」但「漏了關鍵資訊」。單一分數抓不住全貌。

這三個困難造成什麼問題?

  • 工程師常說「這個 Prompt 改完感覺變好了」——感覺不是數據,可能只是你剛好抽到好 case。
  • 換一個模型(GPT-5 → Claude 4.7)時,沒有系統化評估就只能靠人工盲測幾題,極容易 ship bug 上線。
  • 老闆問「這次改動讓品質提升多少?」——你答不出來就沒預算

🎭 三種評估典範(Paradigms)

選錯典範是最常見的浪費時間原因。先搞清楚你在哪一種情境。

典範做法適合場景缺點
Reference-based(有標準答案)用 BLEU、ROUGE、精確匹配比對 AI 輸出和「正確答案」翻譯、摘要、結構化抽取開放式對話不適用,同義句會被誤判為錯
Reference-free(LLM-as-Judge)用強模型當考官,依 rubric 打分客服、助理、RAG 回答有 judge bias、成本較高
Human eval(人工)人類直接評分或 A/B 盲測黃金基線、關鍵決策慢、貴、難規模化

什麼時候用哪一種?

  • 抽取結構化資料(發票金額、日期)→ 用 reference-based,精確匹配就夠。
  • 客服、Agent 對話、RAG → LLM-as-Judge 是主力,人工抽樣補強。
  • 模型上線的最終 Go/No-Go 決策 → 一定要有人工盲測,不能全靠 Judge。

實務上,成熟團隊會混用:8 成自動化(LLM-as-Judge)+ 2 成人工抽樣 + 版本更新時做一次完整人工 A/B。


🛠️ 評估工具比較(2026)

市面上的評估平台這一年快速成熟,以下是我實際用過的四款對比:

工具類型適合誰特色價格
Promptfoo開源 CLI工程師、CI/CDYAML 寫測試、跑 red team、測 jailbreak免費
Langfuse開源 + 雲端已用 LangChain 的團隊Tracing + Eval 一條龍、self-host 友善免費起
Braintrust商業 SaaS產品團隊、PMUI 最佳、playground 強、對比視覺化好有免費額度
OpenAI Evals開源框架跑官方 benchmark和 OpenAI 生態整合緊、template 多免費

選型建議

  • 小團隊剛起步 → Promptfoo。一個 YAML 檔跑 100 個 case,塞進 GitHub Actions 當護欄。
  • 已經有 LangChain tracing → Langfuse。省掉再接一次的工。
  • 產品 PM 要看報表 → Braintrust。UI 可以直接給非工程師用。

💼 實戰案例:評估客服機器人

把上面的理論落地到一個具體場景。假設你要評估一個電商客服 bot。

Step 1:定義 metrics(3-5 個就夠)

不要一開始就列 15 個指標,會做不完。先抓最痛的 3 個

  1. Faithfulness(不亂掰):回答必須基於知識庫,不能幻覺。目標 > 95%。
  2. Resolution Rate(有解決問題):使用者不需要再問第二次。目標 > 80%。
  3. Tone(語氣):禮貌、專業、不油膩。目標 > 90%。

Step 2:建立黃金資料集(golden dataset)

50 個 case 是起點,別少於這個數。組成建議:

  • 20 個「日常常見問題」:退貨、運費、訂單查詢⋯⋯(從真實客服紀錄撈)
  • 15 個「邊界案例」:退貨但超過 7 天、訂單沒出貨想取消、跨國訂單⋯⋯
  • 10 個「對抗性測試」:問競品、問公司內部資訊、嘗試 jailbreak
  • 5 個「必須拒答」:法律諮詢、醫療建議、個資外洩請求

每個 case 格式:

- question: "我買了三天但還沒出貨,想取消怎麼辦?"
  expected_behavior: "確認訂單狀態未出貨 → 說明取消流程 → 提供客服聯絡"
  must_not_contain: ["直接退款", "無法取消"]
  category: "訂單取消"

Step 3:跑評估、記錄、迭代

# 用 promptfoo 跑
promptfoo eval -c config.yaml
promptfoo view  # 打開 UI 看結果

重點是追蹤版本趨勢——v1 Faithfulness 91%,v2 改 Prompt 後 95%,v3 換模型後 97%。每次變動都對比基線,不要只看當下分數。


⚠️ 常見踩坑

這些坑我全踩過,分享給你省時間:

1. Judge 模型偏見(Judge Bias)

用 GPT-4 當 judge 評估 GPT-4 的回答時,GPT-4 會偏袒自己家的回答。研究顯示同模型評同模型會高估 5-10%。

解法:用「不同家」的模型當 judge。評估 GPT-5 用 Claude 當考官,評估 Claude 用 GPT 當考官。

2. Position Bias(位置偏見)

做 pairwise 比較(「A 和 B 哪個好?」)時,LLM 傾向選前面那個

解法:每個 pair 跑兩次,A/B 和 B/A 各一次,取平均。

3. Dataset Leakage(資料集洩漏)

公開 benchmark(MMLU、HumanEval)早已被各家模型廠商「訓練過了」,分數是虛胖的。

解法:永遠準備一份私有評估集,不公開、不上傳到 OpenAI/Anthropic。這才是你真正的護城河。

4. 過度依賴單一指標

只看 Faithfulness 會得到「什麼都不回答」的 bot(拒答率飆高但 Faithfulness 100%)。

解法:至少三個指標交叉看,設「任一指標不達標就 fail」的硬規則。


✅ 上線前最低限度檢查清單

如果你的 AI 功能要上線 C 端使用者,這些都做完再上

  • 有 50+ 個黃金測試案例,涵蓋日常/邊界/對抗
  • 至少跑過一次完整 LLM-as-Judge 評估,主要指標達標
  • 做過一次人工抽樣(20 題以上),驗證 Judge 和人類一致性 > 80%
  • 有「拒答率」監控——AI 亂講話比 AI 說不知道更危險
  • Prompt injection 測試至少 10 個案例(參考 Prompt Engineering
  • 設好成本警報(單次對話超過 X token 觸發)
  • 有回滾機制——品質跌破閾值能 30 分鐘內切回前一版
  • 有抽樣記錄(10%)寫入持續監控 pipeline
  • 關鍵 metric 寫進 Grafana/儀表板,PM 和老闆看得到

沒做完前三項就上線,約 70% 機率會在上線後一週內被客訴打臉——這是我看過多個團隊的實況。


🔗 延伸閱讀


❓ FAQ

用 AI 評估 AI 靠譜嗎?

研究顯示,GPT-4 級別的 LLM-as-Judge 和人類評審的一致性超過 80%,在大量評估場景中性價比最好。建議:重要決策仍做人工抽查,日常監控用 LLM Judge 自動化。

需要多大的測試集?

至少 50-100 個測試案例才能得到統計意義上有意義的結果。涵蓋常見問題、邊界案例和對抗性問題。建議持續累積,上線後每月加入真實用戶的問題。

多久評估一次?

上線前做完整評估。上線後持續抽樣(10%)。每次改 Prompt 或換模型前做完整評估。每月做一次和基線的比較。

BLEU、ROUGE 這類傳統指標在 LLM 時代還有用嗎?

有限度地有用。BLEU/ROUGE 是字面比對,同義句會被誤判為錯,開放式對話幾乎沒意義。但在翻譯、摘要、結構化抽取這類有明確參考答案的場景仍有價值,且計算成本極低(不用再呼叫 API)。務實做法:把傳統指標當「便宜的前哨」,跑失敗的 case 再送進 LLM-as-Judge 做第二層判斷。

Promptfoo、Langfuse、Braintrust 選哪個?

一句話結論:工程師主導選 Promptfoo(YAML + CLI + 免費),已用 LangChain 選 Langfuse(tracing 一條龍),產品 PM 要看報表選 Braintrust(UI 最佳)。小團隊起步建議先 Promptfoo 跑一個月,覺得不夠再升級。不要一開始就上 SaaS,會被月費綁住。

Judge model 該用哪個模型?用便宜的可以嗎?

Judge 要比被評者強,否則小模型看不懂大模型的細微差別。實務建議:被評者用 Claude Haiku/GPT-5-mini,judge 用 Claude Sonnet 4.6 或 GPT-5。如果被評者已經是頂級模型,judge 要換「不同家」的頂級模型避免偏袒。成本方面,judge 通常只跑抽樣(10%)不會太貴,一個月 $50-200 可以搞定中型產品的持續監控。

黃金資料集要多常更新?

每月至少加 10 個新 case,來源是「上個月被客訴的對話」和「上個月出現的新問題類型」。資料集會自然腐化——產品改版、政策變更、新功能上線,舊 case 可能失效。建議用 Git 管理資料集,每次更新打版本 tag,這樣未來要對比「現在的模型在三個月前的題目上表現如何」也查得到。

評估做完了,分數都達標,還是被客訴怎麼辦?

9 成情況是黃金資料集沒涵蓋到真實分布。做法:抽出被客訴的真實對話,看哪個類型是黃金資料集漏掉的,加進去,重跑評估——大概率會發現這類型的分數偏低,再針對性優化。評估不是一勞永逸,是永遠在追著真實世界跑

📚 延伸閱讀