昨天把 GraphRAG 建完了:實體抽取、關係抽取、實體解析、Leiden 社群摘要,local search 對細節、global search 對全局主題。問題是——你憑什麼說它比前天的 agentic RAG 好?比三天前的 hybrid search + RRF 好?五天下來我們蓋了三套架構,卻沒有任何一個數字能回答「哪一套更適合我的資料」。今天補這一塊:RAG 專屬的評估體系。不是通用的 LLM evals(那是 08-20 談過的判官偏誤與離線/線上迴歸),而是針對「檢索 + 生成」這個雙層管線,怎麼把一個含糊的「答得不太好」拆成可歸因、可修的數字。
📖 學
RAG 評估的第一原則是分層歸因。一個 RAG 系統答錯,只有兩種可能:該撈的證據沒撈到(檢索層失敗),或證據撈到了但模型沒用好(生成層失敗)。這兩種病的藥完全不同——前者要動 chunking、embedding、hybrid 權重、rerank、甚至改成 GraphRAG;後者要動 prompt、context 排序、模型選型。如果你只有一個「端到端正確率 72%」,你不知道該往哪邊修,於是只能亂試。所以任何 RAG 評估的最小可用形態,都必須是至少兩個分開的分數。
把兩層交叉起來,會得到一張很好用的診斷矩陣:檢索好、生成好,正常;檢索好但生成壞,是模型沒讀完或被 prompt 帶偏,這是最容易修的一類;檢索壞但生成「看起來好」,最危險——模型在用參數記憶硬掰,剛好掰對了,換一批問題就崩;兩層都壞,回頭查 chunking 與 embedding 是不是根本不match你的領域詞彙。
具體指標分兩大陣營。第一陣營是傳統 IR 指標,用在檢索層:Recall@k(該撈到的證據有幾成進了前 k 名)、Precision@k、MRR(第一個正確答案的排名倒數)、nDCG@k(考慮排名位置的折扣累積增益)。這些指標的最大優點是不需要 LLM——它們是純程式運算,確定性、零成本、毫秒級,可以直接掛進 CI 每次 commit 跑。這裡有一條實務鐵律:能用程式化指標量的,就不要叫 LLM 來判。08-23 提到 hybrid + rerank 的 Recall@5 約 0.816 對純向量 0.587,那個數字就是這一陣營產出的,便宜又可靠。
第二陣營是 LLM-as-judge 的語意指標,處理程式算不出來的東西。RAGAS 這套框架把它收斂成四個核心指標,剛好對上分層歸因:
| 指標 | 量什麼 | 需要標準答案嗎 | 掉分時修哪裡 |
|---|---|---|---|
| Context Recall | 回答所需資訊有多少比例出現在檢索到的片段裡 | 需要 | chunking、embedding、hybrid、改 GraphRAG |
| Context Precision | 檢索到的片段中,真正相關的比例與排序 | 部分需要 | rerank、top-k 調小、去重 |
| Faithfulness | 答案裡的每個主張,能否被檢索到的 context 支持 | 不需要 | prompt 約束、模型換強、要求引用 |
| Answer Relevancy | 答案有沒有真的回答到那個問題 | 不需要 | prompt、query 改寫 |
Faithfulness 的計算機制值得細看,因為它是整套裡最實用的一個:先讓 LLM 把生成的答案拆解成一組原子主張(claims),再逐一問「這個主張能不能從 context 推出來」,最後算比例。這個「拆解再逐條驗證」的設計是關鍵——它把一個模糊的整體印象變成可稽核的清單,你可以直接看是哪一條主張沒有出處。這也是為什麼 faithfulness 常被當成幻覺的代理指標。
但這裡要非常小心一個誤解:faithfulness 高不代表答案正確。它只量「答案對 context 忠實」,如果檢索撈來的是一份過期文件,模型忠實地照抄,faithfulness 可以接近滿分而答案完全錯。忠實度必須和 context recall 一起讀,否則你會得到一個很漂亮的假象。同理,只有 faithfulness 與 answer relevancy 這兩個不需要標準答案的指標,可以在線上對真實流量抽樣跑;需要 ground truth 的 context recall 只能在離線的黃金資料集上跑。
工具生態上,2026 年主流是 RAGAS 與 DeepEval 兩套。DeepEval 把檢索層拆成 contextual precision / contextual recall / contextual relevancy 三個指標,其中 contextual precision 特別去量「相關的片段有沒有被排在不相關的前面」——這正是 rerank 的直接體檢項;它另外提供 G-Eval(給一段自然語言 rubric 就能生出自訂指標)與 DAG(把判斷拆成決策樹,可控性更高)。選型的判斷很簡單:需要標準四指標與合成測試集,RAGAS 順手;需要自訂 rubric、單元測試風格、進 CI,DeepEval 順手。
黃金資料集怎麼建,是整件事真正的瓶頸。優先序是:真實 query log > 領域專家手寫 > 合成生成。從你自己的搜尋紀錄或客服對話撈出前 30 到 50 個真實高頻問題,人工標註「哪一份文件、哪一段是正解」,這 50 條的價值遠高於 500 條沒人審過的合成題。合成只是補洞用的:RAGAS 的 TestsetGenerator 做法是先把你的文件集建成一個 knowledge graph,用一系列 transformation 豐富節點與關係,再從圖上生成 scenario——這個設計的好處是它能刻意生出跨文件的 multi-hop 問題,而這類題目手寫最累、又剛好是 agentic RAG 與 GraphRAG 的主戰場。承昨天的脈絡:如果你要評估 GraphRAG 的 global search,資料集裡就必須有「整份文件集的主要主題是什麼」這種全局題,否則你量不到它的長處,只會看到它在細節題上比向量 RAG 貴。
還要記得放負例:明知資料庫裡沒有答案的問題,正解是「我不知道」。這一類題能抓出系統最惡性的行為——沒有證據卻硬答。
最後是判官本身可不可信。2026 年 6 月一份大規模研究(arXiv 2606.19544)跑了 9 家供應商的 21 個判官模型,橫跨 MT-Bench、JudgeBench、RewardBench 三個基準、118 次執行、約 54.1 萬次個別判斷,結論很值得記:第一,用 exact-match agreement 驗證判官會系統性高估其鑑別力,換成校正過機率的 Cohen’s κ 後,在 MT-Bench 上落差達 33 到 41 個百分點;第二,判官在不同基準上的排名最多位移 14 名,所以「某模型是最好的判官」這句話沒有跨場景效力;第三,出現了一致性-偏誤悖論:兩個實際部署在生產環境的判官,test-retest 重測信度超過 0.95,位置偏誤卻大於 0.10——穩定地一致,不等於正確;第四,在單一 pairwise rubric 下,冗長偏誤反而很小(小於 0.011),與早年印象不同。
正面的一側是:rubric 是判官最有效的旋鈕。G-Eval 的做法用思維鏈把與人類的 Spearman 相關從 0.51 拉到 0.66;Prometheus 這個 13B 的專用評估模型,在給定自訂評分 rubric 的條件下,與人類評分的 Pearson 相關達到 0.897。所以判官不要只丟「請打 1 到 5 分」,要給明確的分級定義與判準。
🧠 記
- RAG 評估的最小形態是兩個分開的分數:檢索層 + 生成層。單一總分無法歸因,也就無法修。
- 檢索層優先用 Recall@k / nDCG@k 這類程式化 IR 指標——零 LLM 成本、確定性、能進 CI。
- RAGAS 四指標對映:context recall / precision 管檢索,faithfulness / answer relevancy 管生成。
- Faithfulness 的機制是「把答案拆成原子主張,逐條驗證有無 context 支持」,掉分時可直接定位到哪一句沒出處。
- Faithfulness 高 ≠ 答案對。對錯誤 context 的忠實抄寫也能拿高分,必須與 context recall 併讀。
- 不需要 ground truth 的指標(faithfulness、answer relevancy)可線上抽樣;需要 ground truth 的只能離線跑黃金資料集。
- 50 條人工審過的真實問題 > 500 條沒審過的合成題;合成的價值在補 multi-hop 與全局題,以及放進「答不出來才對」的負例。
- 判官驗證要用 Cohen’s κ 不要用 exact match(MT-Bench 上落差 33–41pp);高重測信度可與嚴重位置偏誤共存,rubric 是最有效的改善旋鈕。
✍️ 實踐
15 到 20 分鐘,把昨天的 GraphRAG 或前天的 hybrid 管線量出第一組數字。
- 開一個 CSV,三欄:
question、gold_doc_id、gold_snippet。從你的真實使用紀錄挑 12 到 15 個問題填進去,其中刻意放 2 個「資料庫裡沒有答案」的負例,gold 欄位留空。若沒有真實紀錄,就翻文件手寫,但至少要有 3 題是必須合併兩份文件才能答的 multi-hop。 - 對每個問題跑一次檢索,記下前 5 名的 doc_id。手算 Recall@5:
gold_doc_id出現在前 5 名的題目數 ÷ 總題數。再手算 MRR:每題取 gold 排名的倒數(沒進前 5 記 0)後平均。這兩個數字不需要任何 LLM。 - 挑 5 個 Recall@5 命中的題目,看它們的最終答案,人工逐句標記「這句有 context 支持 / 沒有」,算出手工版 faithfulness。
- 同樣這 5 題,讓 LLM 用同一份判準打一次 faithfulness,跟你的人工標記比對一致率。
自我檢查:能不能明確說出「我的系統目前主要是檢索問題還是生成問題」?兩個負例有沒有被誠實地回答「不知道」?LLM 判官與你的人工標記在 5 題裡對了幾題——如果只對 3 題,這個判官現在還不能拿來取代你做決策,先改 rubric、把每個分級的定義寫清楚再測一次。
🔗 延伸學習
- Ragas:可用指標總覽 — 四大核心指標的定義與計算方式
- Ragas:RAG 測試集生成 — 用 knowledge graph 生成合成評估集的官方流程
- DeepEval:RAG 評估指南 — contextual precision / recall / relevancy 的實作與單元測試寫法
- Reliability without Validity(arXiv 2606.19544) — 21 個判官、54.1 萬次判斷的大規模判官可信度研究
💬 問 AI
我有一套 RAG 系統,檢索用 hybrid search(BM25 + 向量 + RRF)加 rerank,
資料是 [你的資料類型,例如:約 800 份內部產品文件]。
我現在完全沒有評估,只憑感覺調參數。
請幫我設計一個最小可行的評估方案,要求:
1. 明確區分檢索層與生成層的指標,並說明每個指標掉分時該動哪個元件
2. 哪些指標可以不用 LLM、直接程式算,請給出計算公式
3. 黃金資料集的組成建議:幾題、怎麼分配 single-hop / multi-hop / 負例,
以及哪些部分適合用 Ragas 合成、哪些必須人工標註
4. 如果要用 LLM-as-judge 判 faithfulness,請寫出一份帶分級定義的 rubric,
並告訴我怎麼用 Cohen's kappa 驗證這個判官值不值得信
5. 這整套要怎麼掛進 CI 當迴歸測試,跑一次的大概成本量級