RAG 不一定不會幻覺。如果 retrieved context 不足、Prompt 沒設計好,AI 還是會編。這 7 個技巧把幻覺率從 15% 降到 < 3%。
技巧 1:明確的 System Instruction
# Bad
你是客服機器人,回答用戶問題。
# Good
你是客服機器人。請務必遵守:
1. 只能根據以下提供的 context 回答
2. context 沒提到的事情,請說「我這邊沒有相關資料,幫您轉接專員」
3. 不要根據常識編造答案
4. 每個事實都要附 [來源:檔名] 標記
技巧 2:強制 Citation
要求 AI 每個事實都要引用來源:
你的回答格式:
- 每個事實後面加 [檔名 段落號]
- 例如:「退貨期限是 7 天 [policy.pdf §3.2]」
- 沒有來源的內容不要寫
技巧 3:Confidence Threshold
檢索 Top-K 後,看最高分是否超過門檻:
results = vector_search(query, top_k=5)
if results[0].score < 0.7:
return "我這邊沒有夠相關的資料,請聯絡客服。"
這能擋掉「問題與資料庫無關時的瞎編」。
技巧 4:拒答訓練
在 System Instruction 中加範例:
範例:
問題:「明年 GDP 會多少?」
Context:(無相關資料)
正確回答:「這個問題超出我的資料庫範圍,建議您查詢主計總處。」
技巧 5:兩階段查證
對高風險領域(法律、醫療),用兩階段:
- 第一階段:LLM 草擬回答
- 第二階段:用第二個 LLM 檢查「這個回答是否與 context 一致」,不一致就退回
技巧 6:結構化輸出
強制 JSON 格式,每個欄位都有 source:
{
"answer": "...",
"sources": [
{"text": "依據條文", "doc": "policy.pdf", "section": "3.2"}
],
"confidence": "high|medium|low",
"uncertain_parts": ["如果有不確定的部分"]
}
技巧 7:限制創意
把 temperature 設低(0.1–0.3),top_p 設 0.5。這讓 AI 更保守、更不容易發揮想像。
實測:7 技巧合用的效果
| 配置 | 幻覺率 |
|---|---|
| 裸 RAG(無技巧) | 14.2% |
| + 強 Prompt | 8.5% |
| + Citation 要求 | 5.1% |
| + Confidence Threshold | 3.8% |
| + 兩階段查證 | 2.4% |
監控幻覺
上線後監控三個訊號:
- 用戶按「👎」的對話:人工抽查 10%
- 沒有 Citation 的回答:標記為高風險
- Confidence 標 low 但回答不少的:可能編造
什麼情境最容易幻覺?
- 用戶問題超出資料庫範圍
- 用戶問「比較性」問題(A vs B 但只有 A 的資料)
- 用戶問「推測性」問題(未來、預測)
- 用戶問「常識性」問題(AI 訓練時學過)
這四類情境要特別加強 Prompt 防護。