我想在假日開一個番外篇,如同上週講述模型的侷限與縮放法則。這周我想講RAG。
平常你們在使用ChatGPT/Gemini/Claude查詢資訊時(你想要最新資訊最好在prompt加上時間),系統通常會先檢索外部資料,再將檢索結果提供給模型生成回答。這種「檢索 + 生成」的流程,就是 RAG 的核心概念。
讓我們先了解RAG技術的基礎概念、發展歷程和原理,之後有時間我們也可以進行RAG的練習。
RAG(Retrieval-Augmented Generation,檢索增強生成),是一種結合訊息檢索和文本生成的技術。
核心思想是:再生成回答之前,先從外部知識庫中檢索相關訊息,然後將檢索到的訊息作為上下文提供給LLM,從而生成更準確、更可靠的回答。
因此,RAG可以拆分成3個詞彙。檢索是指從知識庫中查詢相關內容;增強是將檢索結果融入提示詞,輔助模型生成;生成則輸出兼具準確性與透明度的答案。
一個完整的RAG應用流程可以分成2大類核心環節。
在"數據準備階段",系統通過數據提取、文本分割和向量化,將外部知識建成一個可檢索的數據庫。
隨後在"應用階段",系統會響應用戶的提問,從數據庫中檢索相關訊息,將其注入prompt,並驅動大語言模型生成答案。
第一階段:樸素RAG(naive RAG, 2020-2021)。這是RAG技術的萌芽階段,其流程直接而簡單,通常被稱為"檢索-讀取"(Retriece-Read)模式。
檢索方式:主要依賴傳統的關鍵詞匹配算法,如 TF-IDF 或 BM25。這些方法計算詞頻和文檔頻率來評估相關性,對字面匹配效果好,但難以理解語意上的相似性。
生成模式:將檢索到的文檔內容不加處理地直接拼到提示詞的上下文中,然後送給模型。
第二階段:進階RAG(Advanced RAG, 2022-2023)。隨著向量數據庫和文本嵌入技術的成熟,RAG進入快速發展階段。研究這和開發者們在"檢索"與"生成"的各個環節引入大量優化技術。
檢索方式:轉向基於稠密嵌入(Dense Embedding)的語意檢索。通過將文本轉換為高維向量,模型能夠理解和匹配語意上的相似性,而不僅是關鍵詞。
生成模型:引入很多優化技術,例如查詢重寫、文檔分塊、重排序(這幾個部分就是實作練習的內容)。
第三階段:模組化RAG(Modular RAG,2023-now)。在進階RAG的基礎上,現代RAG系統進一步向著模組化、自動化和智能化的方向發展。系統的各個部分被設計成可插拔、可組合的獨立模組,以適應更多樣化和複雜的應用場景。
檢索方式:如混合檢索,多查詢擴展,假設性文檔嵌入等。
生成模式:思維鏈推理、自我反思與修正等。
之後會使用到的RAG軟件:
GitHub: https://github.com/run-llama/llama_index
GitHub: https://github.com/infiniflow/ragflow
iThome鐵人賽