EN

6.5 常見故障模式

RAG 常見的出錯方式,依流程的順序整理,以及怎麼判斷問題出在哪裡。

RAG下一篇 →

RAG 出錯的地方很多。把常見的故障依流程順序整理起來,遇到問題時就能有條理地排查,而不是亂猜。

先找出是哪一段出問題

整條流程從前到後:

資料載入 → 分塊 → 嵌入 → 檢索 → 組提示詞 → 生成 → 後處理

排查的基本原則:從前面往後面查。 前面出錯,後面再怎麼調都沒用。最常見的第一步,是直接看「檢索到了什麼」。

資料與分塊

故障 現象 做法
文件讀取出錯 亂碼、空白、段落順序亂掉、表格被打散 載入後親眼看過文字(3.1)
資料根本不在知識庫 問什麼都找不到相關的 確認文件有被載入、有進索引
資料過期或有新舊版本 答案引用舊的規定,或兩份矛盾的資料 用日期、版本 metadata 管理(3.5、3.6)
答案被切成兩半 資料有找到,但每一塊都只有一半的答案 調整分塊策略和重疊(3.3、3.4)
塊太大 一塊混了好幾個主題,向量變得籠統 切小一點
塊太小 缺少上下文,看不出在講什麼 切大一點,或加上標題(3.5)

嵌入與檢索

故障 現象 做法
用詞落差 使用者說「在家上班」,文件寫「遠端工作」,找不到 查詢改寫、換更好的嵌入模型、加入同義詞(6.6)
語意太相近的詞混淆 問「事假」,卻找到「特別休假」 加標題進嵌入內容、重排序、混合檢索
專有名詞、代號找不準 型號、縮寫、人名搜尋失敗 混合檢索,結合關鍵字比對
嵌入模型不支援該語言或領域 整體都找不準 換模型,並在自己的資料上測試(2.3)
正確答案排得太後面 Hit@5 高但 Hit@1 低 重排序
metadata 過濾太緊或太鬆 該找的被擋掉,或看到不該看的 檢查過濾條件和權限(3.5)
門檻值設得不好 沒有答案的問題也被放行,或有答案的被擋掉 用測試集校準,6.7 有實例

提示詞與上下文

故障 現象 做法
塞太多段資料 答案被不相關的內容干擾 減少 k、設門檻(4.4)
關鍵資料被放在中間 模型漏掉它 調整順序,把最相關的放前面(4.3)
資料互相矛盾 答案前後不一致,或挑了舊的 指示裡說明如何處理衝突;從資料源頭處理
提示詞不夠明確 模型自由發揮,不照規則 把規則寫具體(4.2)
提示詞注入 資料裡的惡意文字改變了模型的行為 隔離資料和指示、不信任來源(4.2)
超過長度限制 資料被截掉,或答案被攔腰截斷 預留空間給回答(4.4)

生成

故障 現象 做法
忽略資料 模型用自己的記憶回答,和資料不符 強化「只根據資料」,降低溫度
混入資料沒有的內容 資料講一半,模型自己補另一半 提示詞要求逐句有依據,用忠實度評估檢查
誤讀資料 把條件、數字、否定句看錯 換更強的模型,或把資料整理得更清楚
沒答案卻硬答(幻覺) 編出看似合理的答案 提示詞要求拒答、檢索端設門檻、在測試集加入無答案的問題
過度拒答 資料裡有答案卻說沒有 放寬提示詞、檢查檢索有沒有真的把資料送進去
引用錯誤 編號不存在,或引用內容無法支撐那句話 程式驗證編號,並評估引用準確度(4.6)
答案太長、太短或格式不對 在指示裡規定格式

系統層面

  • 索引沒有更新:文件改了,索引還是舊的。要有更新機制。
  • 權限洩漏:檢索時沒有依使用者權限過濾,讓人看到不該看的內容。
  • 太慢:檢索、模型呼叫、提示詞太長都會拖慢。
  • 太貴:每次問答的 token 用量太大。
  • 沒有紀錄:出了問題無從追查。

一個排查的順序

遇到「答案不對」,建議照這個順序問:

  1. 資料裡有答案嗎? 沒有,就是資料的問題,不是 RAG 的問題。
  2. 檢索有找到那一塊嗎? 沒有,查檢索(分塊、嵌入、k、門檻、過濾)。
  3. 找到了,排在哪裡? 太後面,考慮重排序或調整 k。
  4. 提示詞看起來正常嗎? 資料有沒有被放進去、長度有沒有被截斷。
  5. 模型有沒有照資料回答? 有資料卻答錯,才是生成的問題。

絕大多數的問題,都是在步驟 1 到 3 就能找到原因。 所以先看檢索,再調提示詞和模型。

← 全部文章