檢索增強生成(Retrieval-Augmented Generation,RAG)的檢索階段至關重要。如果檢索結果的精準度不足,即使有先進的大型語言模型(Large Language Model,LLM),也無法生成高品質的回應。本文將專注探討 RAG 在檢索階段所面臨的典型問題,並簡介生成階段的挑戰。後續文章將探討相關的解決方案和實作方式。另外,如果你還不了解什麼是 RAG,可以參考這篇文章《RAG 的原理、應用與實作:存取外部文本知識庫》。
檢索階段的問題
檢索階段的目標是為 LLM 提供最精確和最全面的上下文(文本塊)。然而,現實中的檢索常常會出現以下的問題:
破壞語意的文本分塊
在進行知識庫的文本索引時,原始文本被分割成不恰當的「文本塊」(chunks)。例如,一個關鍵概念可能被分割在兩個不同的文本塊中,讓 LLM 難以獲取完整的上下文來回答問題。
例如,原始文件中有一句話:「此產品的最低系統要求是 8GB RAM,建議配置為 16GB RAM。」但在分塊時,這句話被分割為兩個文本塊:文本塊 A 包含「此產品的最低系統要求是 8GB RAM」,文本塊 B 包含「建議配置為 16GB RAM。」當使用者查詢「產品建議配置多少 RAM?」時,檢索模組可能只檢索到文本塊 A,導致 LLM 只能回答「8GB RAM」,而遺漏了「16GB RAM」的重要資訊。
文本塊的遺漏
當 LLM 需要從多個文本塊,整合資訊來回答一個問題時,檢索模組可能會無法檢索到所有相關的文本塊。
比如說,文本塊 A 描述了某產品在北美地區的定價,文本塊 B 描述了歐洲地區的定價,文本塊 C 描述了亞洲地區的定價。當使用者想要查詢該產品的定價的時候,檢索模組可能只返回文本塊 B,導致 LLM 只會回覆使用者該產品在歐洲的定價,而遺漏了北美和亞洲的定價。
無關的文本塊
檢索到的文本塊包含大量與查詢無關的句子或段落。這些噪音可能會降低 LLM 的分析能力,難以聚焦於關鍵資訊。
舉例來說,使用者查詢「某軟體產品的最新版本有哪些新功能?」檢索模組返回了多個文本塊,其中幾個文本塊確實包含新功能的介紹,不過同時其他的文本塊也包含了很多不相關的資訊,如法律免責聲明、安裝步驟、舊版本資訊以及行銷文本。LLM 接收到如此多的噪音,可能也會難以精確地辨識和截取該產品的新功能資訊。
生成階段的問題
除了上述檢索階段的詳細問題外,RAG 系統在生成方面也面臨下列各種的挑戰:
- AI 幻覺: LLM 即使在提供上下文後仍可能生成不準確或與檢索結果不符的內容。
- 缺乏連貫性與流暢性: LLM 可能難以將來自多個碎片化檢索結果的資訊流暢地整合到一個連貫的回應中。
- 應對衝突資訊: 當檢索到的不同來源資訊相互矛盾時,LLM 難以判斷取捨,可能導致模棱兩可或錯誤的回答。
- 忽略檢索結果: LLM 有時會傾向於依賴其內部知識,而忽視甚至矛盾於提供的外部上下文。
結論
- 檢索階段的挑戰:如破壞語意的文本分塊、相關文本塊的遺漏及無關文本塊的雜訊,都是檢索的重大挑戰。因此,開發者必須深入理解並持續優化 RAG 的檢索機制。
- 生成階段的挑戰:LLM 可能會難以整合碎片化或衝突的檢索結果,甚至可能忽略檢索結果而傾向依賴模型自身知識,進而產生 AI 幻覺。