對應原題(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 是否真的存在、程式碼能否編譯 |
| 2 | NLI entailment | 高 | 中 | ★ RAG 的主力:拆成原子主張,逐一檢查是否被上下文蘊含 |
| 3 | 自我一致性 (SelfCheckGPT 式) | 中 | 中高 | ★ 不需要任何外部資源:同一問題採樣 N 次,各次答案互相矛盾 → 很可能是編的 |
| 4 | token 機率 / 熵 | 低 | 極低 | 只能當弱訊號——LLM 的信心校準本來就差 |
| 5 | LLM 裁判 | 中 | 中 | 方便,但裁判自己也會錯(見 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:從面試題庫展開。待辦:先做「抽掉答案段落看會不會誠實拒答」這個免標註測試。
🔗 相關
- RAG 評估與營運 —— 分層歸因的完整方法
- 權限感知檢索與引用歸因 —— 引用驗證與「有引用 ≠ 被支持」
- 沒有標註時怎麼建評估集 —— 對照測試
- LLM-as-Judge —— 當裁判用時的偏誤
- 取樣與解碼策略 —— temperature 是幻覺的放大器
- 工具集設計 —— 讓編譯器當 verifier
- 工具-RAG檢索增強生成、工具-AI系統評估 —— 決策層