對應原題(Common ‧ Evaluation and Observability)

  • How do you detect and measure hallucinations in a production RAG system?
    — Asked at: Anthropic, OpenAI, Cursor

題目同時問了 detect(偵測) 和 measure(量測)——只講偵測手段而沒有給出指標定義,答案不完整。

🎯 什麼情境該想到我

當你「要證明系統有沒有在胡說、或要把幻覺率變成一個能追蹤的數字」的時候。

⚙️ 怎麼用

★ Step 1:先分類(不分類就無法針對性處理)

類型定義可偵測性主要修法
① 內在幻覺
Intrinsic
與提供的上下文矛盾✅ 最可偵測prompt + 引用驗證
② 外在幻覺
Extrinsic
上下文沒提到、模型自己加的(可能對也可能錯)⚠️ 中限制在上下文內回答
③ 事實性幻覺與世界事實不符(沒有上下文可對照)❌ 難外部知識源、拒答
④ ★ 指令性幻覺捏造不存在的 API、函式、參數、設定項✅ 可程式驗證對照符號表

★ RAG 系統最該優先處理 ① 和 ④——它們有明確的對照物,所以可以被自動偵測。
③ 在 RAG 場景下應該被設計成「不該發生」:如果上下文沒有,就該說不知道。

Step 2:偵測手段階梯

#手段可靠度成本適用
1★ 可程式驗證最高(確定性)極低引用 span 存在性、數字是否出現在來源、符號/API 是否真的存在、程式碼能否編譯
2NLI entailment高中★ RAG 的主力:拆成原子主張,逐一檢查是否被上下文蘊含
3自我一致性
(SelfCheckGPT 式)
中中高★ 不需要任何外部資源:同一問題採樣 N 次,各次答案互相矛盾 → 很可能是編的
4token 機率 / 熵低極低只能當弱訊號——LLM 的信心校準本來就差
5LLM 裁判中中方便,但裁判自己也會錯(見 LLM-as-Judge)
6人工抽樣最高最高校準上面所有手段的基準

★ 第 1 項在 Cursor 的場景特別關鍵:

程式碼幻覺(編造不存在的函式、參數、套件)完全可以用 language server / AST / 符號表驗證。
不需要任何模型判斷——查一下符號存不存在就知道。
更進一步:把真實的型別簽章檢索進上下文,並讓編譯器與型別檢查器當 verifier(見 工具集設計 的 harness 討論)。

第 3 項的直覺值得記:

模型知道的事,每次講都一樣;編的事,每次編得不一樣。
所以「多次採樣的答案分歧度」是一個不需要 ground truth 的幻覺訊號。

★ Step 3:量測(指標定義)

核心流程:主張抽取 → 逐一驗證 → 聚合

答案 ──▶ 拆成原子主張(atomic claims)
          「退款需在 14 天內提出」
          「需要提供訂單編號」
          「處理時間 3–5 個工作天」
             │
             ▼  對每個主張做 NLI / 驗證
          SUPPORTED / CONTRADICTED / NOT_FOUND
指標定義
Groundedness rate被上下文支持的主張 ÷ 總主張數
Contradiction rate與上下文矛盾的主張比例(★ 最嚴重的一類,應該趨近 0)
Unsupported rate上下文中找不到依據的主張比例
回答層級幻覺率含有 ≥1 個矛盾主張的回答比例
★ 拒答正確率上下文沒有答案時,正確拒答的比例

⚠️ 「主張抽取」這一步本身也會出錯(切得太細、切得太粗、漏掉隱含主張)。
報告幻覺率時要說明抽取方法,不同抽取方法算出的數字不可比。

★ Step 4:分層歸因(否則不知道怎麼修)

回答有幻覺
   │
   ├─ 檢索沒給對資料   → ★ 修檢索(見 [[RAG 評估與營運]])
   │                     ★ 多數「幻覺」其實是檢索失敗
   │
   └─ 資料給對了還講錯 → 修 prompt / 換模型 / 加引用強制

★ 這是這題最實用的一段:
把「黃金上下文」餵給模型,重跑一次。 還是講錯 → 生成端問題;講對了 → 檢索端問題。
不分層就會拿著「幻覺率 8%」但完全不知道該動哪裡。

線上監控(production 的部分)

訊號做法
每個回答算 groundedness用輕量 NLI 模型即時算,低於閾值就告警或降級
無引用主張比例追蹤趨勢,突然上升代表檢索或 prompt 出事
抽樣人工複核每天固定抽 N 筆,是唯一的真實基準
使用者回報「這個答案不對」按鈕 —— 量少但精準
矛盾偵測告警contradiction 是硬錯誤,應該逐筆調查

★ Step 5:降低幻覺(偵測之外)

按投報率排序:

#手段
1★ 改善檢索 —— 多數幻覺是「沒檢索到 → 只好編」。這是第一順位,不是 prompt
2明確的 prompt:「只能根據提供的資料回答。資料中沒有的,明確說『提供的資料中沒有這項資訊』。」
3★ 強制引用 + 驗證,不可歸因的主張直接移除(見 權限感知檢索與引用歸因)
4降低 temperature(見 取樣與解碼策略)
5★ 產品層面允許「不知道」 —— 如果 KPI 是回答率,所有技術對策都會被繞過
6可程式驗證的領域直接上 verifier(程式碼、數字、日期)

⚠️ 注意 / 什麼時候不適用

  • ★ 幻覺率是一個相對指標,不是絕對指標。數字依「主張抽取方法 + NLI 模型 + 評估集」而變。只用來比較版本,不要拿去對外宣稱。
  • NLI 模型自己會錯,尤其在專業領域與長文本上。要用人工抽樣校準它的準確率。
  • 「沒有被上下文支持」≠「錯」。模型用常識補充的內容可能是對的。要分清 contradiction(硬錯)與 unsupported(可能只是額外資訊)。
  • 摘要任務難以逐句歸因(合成多段的句子)。要改用整體 groundedness 評分。
  • 自我一致性成本是 N 倍。只適合離線評估或高價值請求,不適合全量線上。
  • 幻覺永遠不會是 0。設定可接受的門檻,並確保高風險場景有人把關。
  • 低機率 ≠ 幻覺。creative 的正確答案也可能機率低。不要單憑 token 機率下判斷。

🧪 我實際套用的紀錄

  • 2026-09-20:從面試題庫展開。待辦:先做「抽掉答案段落看會不會誠實拒答」這個免標註測試。

🔗 相關