📏 為什麼需要評估 LLM?
💡 一句話理解 你不會不跑測試就把程式碼部署上線。AI 也一樣——不評估品質就不該上線。
工程師常見的困境
老闆:「AI 客服的回答好嗎?」
工程師:「呃⋯⋯感覺還行?」 ← 這不是工程語言
正確回答:
「Faithfulness 97.2%, Relevancy 89.5%,
比上個月提升了 3.1 個百分點。」 ← 這才是工程語言
🏆 公開 Benchmark 速查
當你在選模型或向老闆報告時,這些 Benchmark 是通用語言:
| Benchmark | 衡量什麼 | 如何理解分數 |
|---|---|---|
| MMLU | 世界知識(57 學科) | 90+ = 頂級,70+ = 堪用 |
| HumanEval | Python 程式碼能力 | 90+ = 頂級 |
| MT-Bench | 多輪對話品質 | 9.0+ = 頂級(滿分 10) |
| GPQA | 博士級科學推理 | 60+ = 頂級(很難的題目) |
| MATH | 數學推理 | 80+ = 頂級 |
| Chatbot Arena | 人類盲測投票排名 | ELO 分數,越高越好 |
2026 主流模型分數參考
| 模型 | MMLU | HumanEval | MT-Bench |
|---|---|---|---|
| GPT-5.4 | 92.1 | 96.3 | 9.5 |
| Claude Sonnet 4.6 | 91.8 | 95.8 | 9.4 |
| Gemini 2.5 Pro | 91.5 | 94.2 | 9.3 |
| DeepSeek V4 | 90.3 | 93.7 | 9.2 |
| Llama 3.1 405B | 88.6 | 89.5 | 8.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% |
| Faithfulness | AI 回答是否忠實於檢索到的內容 | > 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
用 AI 評估 AI 靠譜嗎?
研究顯示,GPT-4 級別的 LLM-as-Judge 和人類評審的一致性超過 80%,在大量評估場景中性價比最好。建議:重要決策仍做人工抽查,日常監控用 LLM Judge 自動化。
需要多大的測試集?
至少 50-100 個測試案例才能得到統計意義上有意義的結果。涵蓋常見問題、邊界案例和對抗性問題。建議持續累積,上線後每月加入真實用戶的問題。
多久評估一次?
上線前做完整評估。上線後持續抽樣(10%)。每次改 Prompt 或換模型前做完整評估。每月做一次和基線的比較。