RAG 系統測試 — Retrieval / Augmentation / Generation 三層完整 QA 流程
RAG (Retrieval-Augmented Generation) 系統完整測試指南。Retrieval 評估(recall/precision)、Chunking 策略測試、Citation 驗證、幻覺偵測、知識庫漂移。
💡 本文原刊於 qa.9niche.com,2026-08 併入 9niche.com 懶人包,內容照原文完整搬遷。
目錄
1. 前言
「我們做了個 AI 客服、查知識庫回答」= RAG 系統。測試比純 LLM 多一倍工作 — 因為要分開測「找的對嗎」跟「答的對嗎」。這篇給你完整 framework。
2. RAG 是什麼
三層:
- Retrieval:找對 chunks
- Augmentation:組 prompt
- Generation:LLM 生答案
每層都要測。
3. 為什麼 RAG 比純 LLM 難測
4. Layer 1: Retrieval 測試
問題:給某 query、向量搜尋是否撈到對的 chunks?
Retrieval Eval Set 範例
[
{
"id": "R-001",
"query": "怎麼設定多語系?",
"expected_doc_ids": ["doc-i18n-setup", "doc-language-switcher"],
"min_recall_at_5": 1.0
},
{
"id": "R-002",
"query": "API 限流",
"expected_doc_ids": ["doc-rate-limit", "doc-throttling"],
"min_recall_at_5": 0.5
}
]
關鍵指標
def retrieval_eval(query, expected_docs, retrieved_docs, k=5):
top_k = retrieved_docs[:k]
relevant_in_top_k = [d for d in top_k if d.id in expected_docs]
recall = len(relevant_in_top_k) / len(expected_docs)
precision = len(relevant_in_top_k) / k
return {"recall@k": recall, "precision@k": precision}
5. Chunking 策略測試
怎麼測哪個策略好:
- 同樣 eval set
- 改 chunking、重 index
- 跑 retrieval eval
- 比較 recall@5 / NDCG
# A/B test
python eval/run.py --chunking fixed_512 --output ./out_a/
python eval/run.py --chunking semantic --output ./out_b/
python eval/compare.py ./out_a/ ./out_b/
6. Layer 2: Augmentation 測試
範例:Prompt 組裝測試
def test_prompt_assembly():
chunks = [{"id": "doc-1", "text": "Lorem ipsum...", "score": 0.9}]
prompt = build_rag_prompt(user_q="How?", chunks=chunks)
assert "Lorem ipsum" in prompt
assert "Source: doc-1" in prompt or "[1]" in prompt
assert len(prompt) < 16000 # model context limit
assert "ignore previous" not in user_q.lower() # injection guard
7. Layer 3: Generation 測試
回到一般 LLM eval、但多兩個維度:
Grounded-ness 評估
「回答的內容是否真的來自 retrieved chunks」?
GROUNDED_PROMPT = """
評估回答是否基於 context。
Context:
{chunks}
回答:
{answer}
對每個事實聲明、回 JSON:
- "claim": "聲明",
- "in_context": true/false,
- "source_chunk": "chunk_id 或 null"
最後給整體 grounded score 0-1。
"""
Citation 驗證
def verify_citations(answer, chunks):
citations = re.findall(r"\[(\d+)\]", answer)
for c in citations:
idx = int(c) - 1
if idx < 0 or idx >= len(chunks):
return {"error": f"Citation [{c}] 指向不存在的 chunk"}
return {"valid": True}
8. 幻覺偵測
工具:
- Vectara HHEM — 開源幻覺偵測 model
- RAGAS — RAG 評估框架(含 faithfulness)
- TruLens — 即時 RAG 監控
9. 知識庫更新後該測
自動回歸 alert
# CI: 每天跑 retrieval eval set
def daily_rag_health_check():
baseline = load("baseline_metrics.json")
today = run_eval()
diff = {k: today[k] - baseline[k] for k in baseline}
if diff["recall@5"] < -0.05:
alert(f"⚠️ Retrieval recall 下降 {abs(diff['recall@5'])}")
if diff["faithfulness"] < -0.10:
page("on-call", "Faithfulness 大幅下降")
10. 完整 RAG QA Workflow
11. 工具地圖
| 工具 | 用途 |
|---|---|
| RAGAS | RAG 專用 eval (faithfulness, answer_relevance) |
| TruLens | Open source observability |
| LangSmith | LangChain 工作流 trace + eval |
| Phoenix (Arize) | Embedding visualization |
| Promptfoo | YAML eval、CLI |
| DeepEval | Pytest-style |
| Vectara HHEM | 幻覺偵測 |
12. 反模式
13. 給 RAG QA 的 5 句
- Retrieval 錯了、LLM 救不了 — 分層測
- Citation 必驗、沒 source 不能回
- 每改一次 chunking、跑全 retrieval eval
- Grounded-ness > 正確性
- KB 更新 = 全測、不是「應該沒事」
14. 最後
RAG 系統測試是 LLM 應用最複雜的領域。新人從 retrieval 50 個 eval + faithfulness 監控開始、半年後你會變團隊不可缺的 AI QA。傳統 QA 跨進 RAG = 薪資 +30%、職缺翻倍。
延伸:
相關連結
LLM 系統評估完整方法。Eval set 設計、4 種自動評估指標(BLEU/ROUGE/Embedding/LLM-as-judge)、Human review 流程、回歸防漂移、CI 整合。
AI 功能 spec review 完整指南。LLM 不確定性處理、評估指標、Prompt versioning、成本控制、安全護欄、法遵(EU AI Act / GDPR)、Fallback、人工 review 流程。
QA 工程師的完整 AI 工具地圖。Coding Copilot、LLM Chat、AI 視覺迴歸、AI debugger、自動 PR review 各自適合什麼。實戰 workflow + 限制 + 紅線。
相關懶人包
2026 QA 趨勢實戰:我看到的 5 個轉變(AI、Shift-Left、Observability)
從手動 QA 到 AI 輔助、從測試金字塔到測試獎盃。這篇分享我這 10+ 年看 QA 從「測完才知道」到「shift-left + AI」的真實觀察。
2026 QA 面試的 AI 題 — 12 題 + 答題框架(面試官想聽什麼)
2026 QA 面試新增一整類「你怎麼用 AI」的問題。這篇整理 12 個高頻 AI 面試題、每題附面試官真正想聽的點與答題框架,從「你用過哪些 AI 工具」到「AI 生的 test 怎麼信任」。
AI / LLM 功能 Spec Review — 幻覺 / 評估 / 成本 / 法遵 8 個必問
AI 功能 spec review 完整指南。LLM 不確定性處理、評估指標、Prompt versioning、成本控制、安全護欄、法遵(EU AI Act / GDPR)、Fallback、人工 review 流程。
一般聲明
本站提供之資訊僅供參考,不保證其完整性與正確性。使用者應自行判斷資訊之適用性。