檢索增強生成(Retrieval-Augmented Generation,RAG)透過向量資料庫從外部知識中檢索相關內容,再填入提示讓語言模型生成回答,有效解決 LLM 知識過時與幻覺問題。我在這篇筆記整理 RAG 的完整工作流程,以及 RETA-LLM 框架如何把外部知識模組化地整合進語言模型。
RAG 的工作流程是怎麼運作的?
RAG 從使用者查詢開始,透過向量資料庫檢索,到填入提示,最終形成回答的整個過程。

RETA-LLM 框架可以看作是實現 RAG 目標的一種具體實現方式,它提供了一套模組化的工具和方法來將外部知識整合到語言模型中,以提升其產生答案的能力。
RETA-LLM 框架和 LangChain 有什麼不同?
研究論文:<https://arxiv.org/pdf/2306.05212v1>
過去通用的 LLM 增強工具包(如 LangChain)與 RETA-LLM 有所不同,RETA-LLM 專注於檢索增強 LLMs,並提供更多的插件模組。
檢索增強 LLMs 使用兩個模組的檢索和生成策略:
- 根據用戶的請求檢索文件或段落(文件檢索模組)
- 利用這些相關文件作為參考生成答案(答案生成模組)
除了這兩個基本模組外,RETA-LLM 還提供了三個可選模組:
- 請求重寫模組,以使用戶當前的請求更完整和清晰
- 萃取模組,從檢索到的整個文件內容中提取相關段落或片段
- 事實檢查模組,以驗證生成答案中是否存在事實錯誤
這些可選模組可以使 IR 系統和 LLMs 之間的交互更加有效和順暢。RETA-LLM 中 LLMs 和 IR 系統之間的解綁更加徹底,這使得搜索引擎和 LLMs 的定制更加方便。
RETA-LLM 的五大模組如何協作?

RETA-LLM 的工作流程如下:
- 使用請求重寫模組修改目前使用者請求,使其完整且清晰。由於使用者可能向 RETA-LLM 提出一系列問題,目前使用者請求的語意可能不完整。例如,使用者可能會問「經濟學院怎麼樣?」而歷史請求是「介紹資訊學院的專業」。在這種情況下,使用者的準確意思是「介紹經濟學院的專業」。由於 LLMs 在對話式密集檢索中顯示出出色的重寫查詢能力,RETA-LLM 將當前使用者請求和先前的對話歷史提供給 LLMs 進行重寫。
- 然後,RETA-LLM 使用文件檢索模組根據修訂後的使用者請求從外部語料庫中檢索相關文件。文檔檢索模組是與 IR 系統連接的模組,它從外部知識語料庫中檢索相關文件並傳回前 K 個。
- 接下來,RETA-LLM 使用段萃取模組從檢索到的文件中提取與使用者請求相關的片段,以形成參考文獻。由於 LLMs 的輸入長度限制(通常為 2048 或 4096 個標記),不可能直接將所有前 K 個相關文件內容連接起來作為產生答案的參考文獻,透過截斷文件內容的瑣碎方法可能會遺失重要資訊。因此,RETA-LLM 重複使用 LLMs 自身從修訂後的請求中提取相關片段。由於一個文件的長度也可能超出限制,RETA-LLM 採用滑動視窗策略逐步擷取片段,在預設配置中,滑動視窗大小和步長設定為 512 和 256,這些片段再被連接在一起作為參考文獻。
- 此外,RETA-LLM 使用答案產生模組為使用者請求產生答案。如同先前的研究所建議的,透過提供來自外部語料庫檢索到的參考文獻,LLMs 可以產生更準確的答案。
- 最後,RETA-LLM 使用事實檢查模組驗證產生的答案是否包含事實錯誤,並為使用者要求輸出最終回應。儘管提供了額外證據,LLMs 也可能出現幻覺,有必要設計一個模組進行進一步的事實驗證。由於 LLMs 具有強大的自然語言理解能力,我會將參考文獻和生成的答案提供給它們進行判斷,讓 RETA-LLM 決定是否輸出產生的答案,或只是說「我無法回答這個問題」。
請注意,LLMs 的所有輸入都包含在指示或提示中。如上圖所示,RETA-LLM 完全解開了 IR 系統和 LLMs 之間的連結,這種分離設計讓使用者可以自訂自己的個人搜索引擎和 LLMs。
知識檢索的過程包含哪些步驟?
- 內建工具增強助手功能:內建的工具可以將上傳的文件中的外部知識與助手功能結合起來,使助手能夠存取並利用這些外部知識來回答使用者的問題。
- 內容分塊、索引和嵌入儲存:上傳的檔案內容將被分成區塊,然後進行索引和嵌入儲存。這意味著文件內容將被切割成較小的片段,每個片段都會被賦予一個特定的標識,並且會轉換成向量表示,以便更有效地處理和檢索。
- 檢索嵌入以回答輸入查詢:當使用者提出查詢時,系統會將檢索嵌入的向量表示以尋找與查詢相關的內容區塊。這些內容區塊中包含的知識將被用來回答使用者的查詢,以提供更準確和全面的答案。
RAG 實作上會遇到哪些挑戰?
- 檢索模型:選擇合適的檢索模型是一項挑戰。不同的檢索模型可能適用於不同的場景,因此需要仔細選擇以確保檢索的效果和效率。
- 稠密或稀疏表示:在 RAG 中,可以使用稠密或稀疏的表示來表示檢索到的內容。稠密表示通常具有更高的維度和更多的資訊,但也可能更加計算密集;稀疏表示則可能更加高效,但可能會遺失某些細節資訊。
- 內容區塊的單位:將內容分成適當的區塊是一個挑戰。區塊的大小和粒度會影響到檢索和處理的效率,因此需要找到一個合適的單位來平衡資訊的完整性和處理的複雜性。
- 類似的參考引入噪音:當有多個相似的參考資料時,可能會引入噪音,使系統難以確定哪個參考是最相關的,這可能會影響答案的準確性和一致性。
- 有些問題需要跨文件引用來回答:某些問題可能需要引用多個文件中的資訊才能進行回答,這增加了檢索和整合資訊的複雜性,需要系統能夠有效地處理跨文件的引用和關聯資訊。
延伸閱讀
- 檢索增強生成(RAG)與 RETA-LLM 框架完整解析:同樣聚焦 RAG、RETA-LLM,可接著比較不同情境的做法。
- Graph RAG:圖形式的檢索增強生成完整解析:同樣聚焦 RAG、LLM,可接著比較不同情境的做法。
- Retrieval Interleaved Generation(RIG)是什麼?跟 RAG 有何不同:同樣聚焦 RAG、檢索增強生成,可接著比較不同情境的做法。
常見問題
什麼是檢索增強生成(RAG)?
RAG 是一種結合資訊檢索與語言模型生成的技術。系統先從向量資料庫或外部語料庫檢索與查詢相關的內容,再將這些內容填入提示,讓 LLM 依據實際資料生成回答。
為什麼 LLM 需要 RAG?
LLM 的訓練資料有時間限制,且可能產生幻覺。RAG 讓模型依據即時、可驗證的外部知識回答問題,能顯著提升答案的準確性與可信度。
RETA-LLM 是什麼?
RETA-LLM 是一個專注於檢索增強 LLMs 的研究框架,提供請求重寫、文件檢索、段萃取、答案生成與事實檢查五個模組,讓搜索引擎和 LLM 可以分別自訂。
RAG 的內容分塊是什麼意思?
內容分塊是把上傳的文件切割成較小片段,每個片段會被轉換成向量表示並建立索引。查詢時系統比對向量相似度,找出與問題最相關的區塊來生成答案。
RAG 有哪些主要挑戰?
主要挑戰包括檢索模型的選擇、稠密與稀疏表示的取捨、分塊粒度的設定、相似參考引入的噪音,以及跨文件引用的資訊整合複雜度。
參考資料
- RETA-LLM: A Retrieval-Augmented LLM Toolkit(arXiv 論文):<https://arxiv.org/pdf/2306.05212v1>
最後更新
2026-08-28(原文發布於 2024-05-01,本文保留原始筆記內容並補上 GEO 結構。)
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2024-05-01
