01

總覽:怎麼知道 RAG 有沒有變好?

換了切塊、Top-k、prompt 之後,若沒有可重複的評測,就只是在賭運氣——本篇專講評估面,不重複 pipeline 與切塊細節。

在 RAG 架構綜合手冊 與 Chunking 與檢索策略 裡,我們把「怎麼建、怎麼撈」講清楚了。下一步後端最容易忽略的是:怎麼證明這次改動真的變好。感覺答案比較順、偶發 demo 過關,都不足以當上線依據——你需要把品質拆成檢索面與生成面,再用離線評測集與線上觀測閉環。

只看最終答案
無法分辨是召回錯、Context 組壞,還是模型幻覺——修錯層級。
指標單一
只盯 BLEU/字串相似度,對開放域問答幾乎無意義;漏掉忠實度。
離線=線上
Golden set 過關卻上線翻車:分布漂移、長尾查詢、權限過濾未測。
定位評估在 RAG 版圖的座標

評估不是另一套產品,而是掛在 pipeline 旁的量測層:離線用標註集驗證「改動方向」,線上用回饋與抽樣盯「真實分布」。本篇與切塊/hybrid 篇互補——那些調旋鈕,這裡告訴你旋鈕轉完有沒有變好。

量測面回答的問題主要指標壞掉時的徵狀
檢索面 該進 Context 的證據有沒有被撈到、排得夠不夠前 Recall@k、Precision@k、MRR/nDCG@k 引用空或引用一堆卻答偏
生成面 答案有沒有忠於證據、有沒有回答到問題 Faithfulness、Answer Relevance 證據齊全卻加油添醋,或正確但答非所問
離線評測 這次改動的方向對不對(可重複、可比較) 固定 golden set 上的前兩列指標 分數上升但線上沒感覺
線上觀測 真實分布下實際發生了什麼 引用點擊、負回饋率、拒答率、抽樣人工複核 Golden set 過關卻上線翻車

四列由上到下是「量測什麼」到「在哪裡量」:前兩列切開品質的兩個面,後兩列切開量測的兩個場域——四格都要有人負責,缺一格就會出現「分數好看但使用者不買單」。

一句話答法RAG 品質要拆檢索與生成兩面量測;沒有可重複評測,調參只是在賭 demo。
02

檢索面:召回率與 Precision

先回答「該進 Context 的證據有沒有被撈到」——生成再漂亮,缺金標 chunk 也救不回。

檢索評估假設你有一組查詢與金標相關文件/chunk(可人工標,或從已驗證引用反推)。常用指標都建立在「Top-k 命中集合」上:

Recall@k
金標相關項中,有多少出現在 Top-k。偏「有沒有撈到」;k 太小會低估可 rerank 的候選池。
Precision@k
Top-k 裡真正相關的比例。偏「噪音多不多」;無 rerank 時盲目加大 k 常讓 precision 崩、Context 被洗版。
MRR / nDCG
照顧排序位置:第一個相關結果越靠前越好。適合「答案幾乎在 Top-1/Top-3」的產品形態。
Recall@k = |Retrievedk ∩ Relevant| / |Relevant|
Precision@k = |Retrievedk ∩ Relevant| / k
互動 · 把一份排名結果攤開成四個指標 點 rank 格改金標,拖 k 與 rerank

同一個查詢撈回 10 筆候選(已依分數排序)。點任一格可把它標成/取消金標(★);再用下面三個旋鈕改 k、改「完全沒進 Top-10 的金標數」、改 rerank 強度。四個指標與它們的分子分母即時重算。

金標(★) 非金標 k 的切線

排名尺:左到右是 rank 1…10,藍色右邊界就是 Top-k 的切線,切線右邊的候選不進 Context。rerank 只會讓 ★ 往左移,不會憑空生出金標——所以它救得了排序指標,救不了召回。

每根柱是該名次的折扣權重 1/log2(i+1):rank 1 拿滿 1.000、rank 2 只剩 0.631、rank 10 只剩 0.289。填色的柱才真的有金標、才計入 DCG——這就是「排越前面越值錢」的量化樣子。

點 rank 格或拖旋鈕,看四個指標的分子分母怎麼變。
陷阱只優化 Recall@k

把 k 拉到 50,Recall 幾乎總能上升,但 Prompt 塞滿弱相關噪音,生成忠實度與延遲一起變差。實務應同時報 Precision@k(或命中後的「可用 Context 比例」),並固定評測用的 k 與過濾條件。

情境檢索訊號常見根因
答案錯但引用空 Recall 低 切塊邊界、embedding、metadata 過濾過嚴
引用一堆卻答偏 Precision 低/排序差 缺 rerank、多主題塊稀釋、查詢改寫弱
金標在 Top-10 但不在 Top-3 Recall@10 高、MRR 低 候選池夠,排序/rerank 不足

先用檢索指標定位「撈沒撈到」,再決定要不要動切塊、hybrid 或 rerank——不要一開始就怪 LLM。

一句話答法檢索面用 Recall@k/Precision@k(與 MRR)回答「證據有沒有進 Context」;只拉高 k 換 Recall 通常會傷 precision。
03

生成面:忠實度、幻覺與答案相關性

Context 對了,答案仍可能「加油添醋」或答非所問——生成面量的是「有沒有忠於證據」與「有沒有回答問題」。

Faithfulness(忠實度)
CLAIM ⊆ CONTEXT
  • 答案中的可驗證主張,是否都能被檢索到的 Context 支持。
  • 低忠實度 ≈ 幻覺/捏造數字、期限、例外條款。
  • 可用人工勾選,或 LLM-as-judge 逐句對照 Context。本篇文末的互動 demo 會把這個逐句拆解程序完整跑一遍。
Answer Relevance
ANSWER ↔ QUESTION
  • 答案是否針對使用者問題,而非堆砌相關但無用的段落。
  • 高忠實、低相關:正確複述了別的主題。
  • 常與「拒答/不足以回答」策略一起設計。
幻覺(Hallucination)
主張超出 Context(或與 Context 矛盾)。RAG 場景應優先壓「無據生成」,而不是只比參考答案字串相似度。
Context Relevance
送進 Prompt 的段落是否真與問題相關——橋接檢索 precision 與生成品質;噪音 Context 會誘發胡謅。
引用正確性
若產品要求引用 chunk/URL,另測「引用是否指向真正支持該句的來源」——假引用比沒引用更糟。
關鍵兩軸一起看

檢索 Recall 高 + 生成忠實度低 → 多半是 prompt/模型/拒答策略問題。檢索 Recall 低 + 答案卻「很完整」→ 高度可疑的無據生成。面試時用這張診斷矩陣,比背指標名字更有說服力。

一句話答法生成面核心是 Faithfulness(忠於 Context)與 Answer Relevance(答到問題);字串相似度不能替代這兩軸。
04

離線評測 vs 線上觀測

離線告訴你「這次 diff 方向對不對」;線上告訴你「真實流量下還站不站得住」——缺一不可。

離線評測(Offline)
GOLDEN SET · REGRESSION
  • 固定問題集+金標 chunk/參考答案/評分 rubric。
  • 每次改切塊、embedding、prompt 先跑回歸,擋明顯回退。
  • 可重複、可 CI;但分布可能過時、長尾覆蓋不足。
線上觀測(Online)
FEEDBACK · SAMPLING · A/B
  • 使用者回饋(👍/👎)、重問率、人工抽樣複核。
  • 延遲、空檢索率、拒答率、權限過濾命中等系統指標。
  • 反映真實分布;噪音大、標註成本高、要控隱私與偏差。
離線回歸
改動前後對照
→
影子流量/小流量
抽樣複核
→
線上儀表板
回饋+系統訊號
→
回填金標集
長尾案例入庫

閉環:線上翻車案例定期回填離線集,避免「離線全綠、線上長尾全滅」。

維度離線線上
目的 驗證改動、回歸防護 監視真實品質與漂移
標註 高品質、可複用 稀疏、有選擇偏差
風險 過擬合金標集 噪音、延遲發現問題
最低配備 50–200 題含邊界案例 抽樣複核 + 👎 工單
一句話答法離線做可重複回歸,線上抓真實分布;兩者用「線上案例回填金標集」閉環,才不會各說各話。
05

LLM-as-Judge:用法與陷阱

用強模型當評審,能把 Faithfulness/Relevance 規模化——但評審本身也有偏差,必須當「加速器」而非唯一真相。

典型用法:把「問題 + Context + 答案」餵給評審模型,要求依 rubric 打分(例如忠實度 1–5、是否有無據主張)。適合大量回歸與粗篩;關鍵發布仍應抽樣人工複核。

作法優點陷阱
逐句對照 Context 忠實度可解釋 漏給關鍵 Context → 誤判幻覺
與參考答案比對 實作簡單 開放域一題多解,字面不一致≠錯
單一分數 好排序、好畫趨勢 掩蓋「檢索差 vs 生成差」
與被評模型同家族 成本低、風格接近 自我偏好/長度偏差(喜歡長答案)
陷阱Judge 不是 Ground Truth

(1)固定 rubric 與輸出 JSON schema,避免散文式評語無法聚合;(2)定期用人工標註集測 Judge 與人的一致率;(3)分軸打分(檢索相關/忠實/答案相關),不要只留一個「整體分」;(4)對安全與合規題,人工優先於自動分數。

一句話答法LLM-as-judge 適合規模化粗評,但要分軸、要測與人一致率,不能當唯一上線門檻。
06

互動 · 把一個答案拆成 claims 對照 Context

Faithfulness 不是一個感覺分數,而是一套可以手算的程序:切 claims → 逐一比對 Context → 過門檻的算被支撐 → 相除。這裡把四層全攤開。

互動 · Faithfulness 逐句拆解器 改文字、改切分規則、改門檻
被 Context 支撐 無據(計入幻覺) 相似度未過門檻

第一層:答案依切分規則被切成幾個 claim。切得越細,分母越大、同一段答案的分數就越嚴——所以「Faithfulness = 0.75」這種數字,離開切分規則是沒有意義的。

第二層:每一格是支撐度=該 claim 的 gram 有多少比例出現在該 context(containment,對應忠實度那一節寫的 CLAIM ⊆ CONTEXT——方向不對稱,問的是「claim 被蓋住了嗎」),綠框代表過了門檻。把門檻從 0.50 降到 0.35 試試:「電子票券也可以退」對上「電子票券與客製化商品不適用本退貨條款」會翻成「被支撐」,分數衝到 1.000——但語意完全相反。字面公式讀不出否定,這正是忠實度最後需要 LLM-as-Judge 或人工複核的原因,也是本篇談 Judge 那一節要處理的難題。

改上面的文字或旋鈕,四層拆解會即時重算。
一句話答法Faithfulness=被 Context 支撐的 claims/全部 claims;報這個分數時必須同時交代 claim 切分規則、相似度定義與門檻,否則數字不可比較。
07

面試折衷與實務清單

能畫出「檢索×生成」診斷矩陣,並說清離線/線上閉環,就比只報一個滿意度分數更像有生產經驗。

決策點一端做法另一端做法留意
優化目標 拉高 Recall@k 顧 Precision/Context 品質 兩者要一起報,固定 k
評分方式 人工精標 LLM-as-judge 粗評 Judge 要測人機一致率
發佈門檻 只看離線金標 只看線上 👍 率 雙軌+回填,避免過擬合
除錯順序 先怪模型 先看命中 chunk 無引用/低 Recall 先修檢索
實務上線前至少準備的四件事

(1)含「邊界切斷/例外條款/無權限文件」的回歸題;(2)每題金標 chunk id,而不只參考答案散文;(3)分軸分數:Recall@k、Precision@k、Faithfulness、Answer Relevance;(4)線上 👎 與空檢索率儀表,並有回填金標的節奏。有這四樣,調切塊或 hybrid 才有科學依據。

一句話答法面試答 RAG 評估:拆檢索/生成兩面、離線回歸+線上觀測閉環,LLM-as-judge 只作加速器。