檢索增強生成(RAG)

讓 LLM 在生成前先從外部資料源檢索相關資訊的技術,突破訓練資料限制並減少幻覺;含「要不要上 RAG」的實務決策原則。

分享
檢索增強生成(RAG)
定義:檢索增強生成(Retrieval-Augmented Generation, RAG)是一種讓大型語言模型(LLM)在生成回應前,先從外部資料源檢索相關資訊並納入上下文的技術。2020 年首次提出,現已成為現代 AI 系統廣泛採用的方法,用來突破模型訓練資料的時效與領域限制。

RAG 的核心想法是把 LLM 的生成流程與文件查詢(或網路搜尋)結合:與其期待模型「記得」所有知識,不如在回答當下把相關資料找出來餵給它。這讓靜態的預訓練模型能處理最新資訊與領域特定知識,同時因為回應可以附上來源,提高了透明度與可驗證性。

運作流程

RAG 分為三個關鍵階段:

  • 資料準備:將參考資料轉換為嵌入向量(embedding,向量空間中的數值表示),存入向量資料庫供檢索。可處理非結構化文字、半結構化資料或知識圖譜等結構化資料。
  • 檢索(Retrieval):根據使用者查詢,文件檢索器從資料庫中選出最相關的文件,檢索方法取決於所用的索引類型。
  • 生成(Generation):透過提示工程將檢索到的資訊注入 LLM,模型基於查詢與檢索文件生成輸出。部分系統會再加入重新排序(re-ranking)、上下文選擇與微調。

優點與動機

  • 讓 LLM 使用領域特定或更新的資訊,突破訓練資料的限制。
  • 減少 AI 幻覺(hallucination)——例如模型描述不存在的政策、推薦虛構的法律案例。
  • 降低重新訓練的需求,節省計算與財務成本。
  • 回應可附上來源,提高透明度與可驗證性。

限制與挑戰

  • 幻覺未完全解決:LLM 仍可能圍繞檢索到的來源資料產生幻覺,例如從章節標題斷章取義而不理解上下文。
  • 認知限制:模型難以辨識自身資訊不足的情況,在該表達不確定時仍可能硬生成答案。
  • RAG 投毒(RAG poisoning):系統可能檢索到事實正確但具誤導性的來源;面對衝突資訊時難以判斷準確性,也可能混合過時與更新的資訊產生誤導性回應。
  • 流程限制:向量搜尋可能遺漏回答問題所需的關鍵事實;重新訓練的需求減少但未完全消除。

要不要上 RAG:實務決策(檢索 vs 全塞)

幫內部系統加 AI 問答助理時的典型決策:要做 RAG(先建檢索系統,AI 回答前先去搜相關文件),還是「全塞」(把所有文件整包放進 AI 的上下文)?

實際的判斷依據:先量文件總量,再選架構。若文件總量遠低於模型上下文上限(例如 20 萬 token,約十幾萬中文字),全塞+快取(同樣的文件內容重複使用有折扣)就夠,回答品質還更穩——RAG 反而引入「搜不到對的段落」這個新故障模式。等文件量真的超過上限再上 RAG。

  • 決策心得:不要因為某技術流行就用它。這個原則後來也用在個人 wiki 上。
  • 附帶的驗收要求:AI 助理的每個回答必須附出處(哪份文件哪一段),不然沒辦法驗證它是不是在瞎掰——不管用 RAG 還是全塞都適用。

關鍵改進技術

  • 編碼器改進:稀疏向量(編碼詞彙身分)與密集向量(編碼語意)的取捨與混合;以點積和近似最近鄰搜尋(ANN)最佳化相似度計算;晚期互動(late interaction)在檢索後做更精確的詞彙比較。
  • 檢索中心方法:以逆克漏字任務(ICT)預訓練檢索器;監督式檢索最佳化讓檢索機率對齊生成模型的機率分佈;訓練中以重新排序優先考慮最相關文件。
  • 重排序模型(Rerank):在檢索後、生成前加入專用 rerank 模型(如 Cohere Rerank、bge-reranker),對初步檢索結果重新排序,能明顯提升 top-k 品質,是實務上 CP 值最高的 RAG 改進手段之一。
  • 語言模型改進:Retro 模型重新設計語言模型以納入檢索器,使小 25 倍的網路達到相當的困惑度;Retro++ 為更可重現的版本,包含上下文內 RAG。
  • 分塊策略(Chunking):固定長度重疊分塊(快速簡便,重疊維持語意上下文)、基於語法的分塊(以句子切分,如 spaCy、NLTK)、依文件格式分塊(尊重程式函式、HTML 表格、PDF 等內建結構,可用 LangChain、Unstructured 等函式庫)。
  • 混合搜尋:結合傳統文字搜尋與向量資料庫結果,合併後再輸入語言模型,彌補單一方法的不足。

變體:GraphRAG

GraphRAG 是微軟提出的 RAG 變體:先用 LLM 把文件庫建成知識圖譜,查詢時走圖譜找關聯,而不是純向量相似度。對「跨文件的全局問題」(例如:這批文件的共同主題是什麼)效果比傳統 RAG 好很多,但知識圖譜的索引建置成本明顯較高。

主要應用場景

  • 企業應用:讓聊天機器人存取公司內部資料。
  • 權威來源回應:基於授權資訊生成答案。
  • 醫療領域:讓 LLM 輸出建立在外部醫學知識來源之上(評估、倫理與臨床可靠性仍有挑戰)。

Read more

當軟體小白開始遇到資安問題

當軟體小白開始遇到資安問題

前端的權限處理好了,那後端呢? 花了快一天的時間,才弄清楚我到底在修什麼issue,這個資安問題分成兩部分。 第一個是前端寫好的權限,但使用者可以透過網頁開發者工具(F12)去修改自己的身分,把自己從一般使用者改成主管,來獲得操作權限。 要解決這個問題有三個步驟要設定: 1. 資料行安全性設定檔,加成員( powerplatform > 環境 > XXXX > 設定>資料行安全性設定 > 使用者) 2. 啟用資料行安全性( Power Apps > 資料表 > 使用者 > 資料行 > 點擊欲修改的顯示名稱 > 進階選項) 3. 回到資料行安全性設定檔,編輯資料行權限(讀取、更新、建立) 如此一來,有更新、建立權限的人員,才能去修改該資料行的值。 確保了後端的使用者權限不會被亂改後,

By yuchang23