RAG:檢索增強生成
前言
為什麼 ChatGPT 有時候會「一本正經地胡說八道」? 大語言模型的知識來自訓練資料,但訓練資料有截止日期,也不包含你公司的內部文件。RAG(Retrieval-Augmented Generation,檢索增強生成)就是解決這個問題的核心技術——讓 AI 在回答之前,先去「查資料」。
這篇文章會帶你學什麼?
學完這章後,你將獲得:
- 核心概念理解:明白 RAG 是什麼、為什麼需要它,以及它如何解決大模型的「幻覺」問題
- 完整流程認知:掌握從文件載入、分塊、向量化到檢索、生成的端到端流程
- 技術選型能力:了解不同分塊策略、檢索方法的優劣,能根據場景做出選擇
- 架構演進視角:理解 RAG 從 Naive 到 Advanced 再到 Modular 的演進路線
- 實踐決策能力:知道什麼時候該用 RAG、什麼時候該用微調
| 章節 | 內容 | 核心概念 |
|---|---|---|
| 第 1 章 | RAG 基礎流程 | 索引、檢索、生成三階段 |
| 第 2 章 | 文字分塊策略 | 固定分塊、語意分塊、遞迴分塊 |
| 第 3 章 | 檢索技術 | 向量檢索、關鍵字檢索、混合檢索 |
| 第 4 章 | 架構演進 | Naive RAG → Advanced RAG → Modular RAG |
| 第 5 章 | RAG vs 微調 | 兩種方案的適用場景對比 |
0. 全景圖:為什麼大模型需要「查資料」?
想像你是一個博學的教授,讀過無數書籍。但如果有人問你「昨天公司的銷售資料是多少」,你肯定答不上來——因為這些資訊不在你讀過的書裡。
大語言模型面臨的就是同樣的困境:
- 知識有截止日期:GPT-4 的訓練資料截止到某個時間點,之後發生的事它不知道
- 缺乏私有知識:你公司的內部文件、產品手冊、客戶資料,模型從未見過
- 容易產生幻覺:當模型不確定答案時,它傾向於「編造」一個看起來合理的回答
RAG 的核心思想
RAG 的解決方案非常直覺:在讓模型回答之前,先幫它找到相關的參考資料。 就像開卷考試——你不需要記住所有知識,只需要知道去哪裡找、怎麼找。
RAG = 檢索(Retrieval)+ 增強(Augmented)+ 生成(Generation)
1. RAG 基礎流程:索引、檢索、生成
RAG 的工作流程可以分為兩個階段:離線索引和線上查詢。
離線階段就像圖書館的編目工作——把所有書籍分類、編號、上架,方便日後查找。線上階段則是讀者來圖書館查資料的過程——根據問題找到相關書籍,然後綜合資訊給出回答。
三個核心階段
- 索引階段(Indexing):將原始文件載入、清洗、分塊,然後透過嵌入模型轉化為向量,存入向量資料庫。這是一次性的準備工作。
- 檢索階段(Retrieval):使用者提問時,將問題也轉化為向量,在向量資料庫中搜尋最相似的文件片段。
- 生成階段(Generation):將檢索到的文件片段和使用者問題一起拼接為 Prompt,交給大模型生成最終回答。
| 階段 | 輸入 | 輸出 | 關鍵技術 |
|---|---|---|---|
| 索引 | 原始文件 | 向量資料庫 | 文字分塊、嵌入模型 |
| 檢索 | 使用者問題 | Top-K 文件片段 | 向量相似度、重排序 |
| 生成 | 問題 + 上下文 | 最終回答 | Prompt 工程、LLM |
2. 文字分塊:把大象裝進冰箱
文字分塊是 RAG 中最容易被忽視、卻對效果影響最大的環節。為什麼需要分塊?因為大模型的上下文視窗有限,我們不可能把整本書塞進去。更重要的是,分塊的品質直接決定了檢索的品質。
想像你在圖書館找一本書的某個知識點。如果整本書是一個「塊」,檢索到了也沒用——你還是得翻遍全書。但如果按章節甚至段落分塊,就能精準定位到你需要的內容。
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 📏 固定大小 | 实现简单,块大小均匀 | 可能在句子中间截断 | 结构化程度低的长文本 |
| 📝 按句子 | 保持句子完整性 | 块大小不均匀 | 文章、报告等自然文本 |
| 🧠 语义分块 | 主题连贯,语义完整 | 计算成本高,需要嵌入模型 | 多主题混合的复杂文档 |
| 🔄 递归分块 | 兼顾结构与大小 | 实现较复杂 | 通用场景,推荐默认选择 |
分塊策略的選擇
- 固定大小分塊:按字元數或 token 數切分,簡單粗暴但可能切斷語意
- 遞迴分塊:先按段落分,段落太長再按句子分,保持語意完整性
- 語意分塊:用嵌入模型判斷語意邊界,相似度突變處切分
- 文件結構分塊:利用 Markdown 標題、HTML 標籤等結構資訊分塊
沒有「最好」的分塊策略,只有最適合你資料的策略。一般建議從遞迴分塊開始,chunk 大小 200-500 tokens,overlap 10-20%。
3. 檢索技術:如何找到最相關的內容?
分塊完成後,下一個關鍵問題是:使用者提了一個問題,怎麼從成千上萬個文件片段中找到最相關的那幾個?
這就像在一個巨大的圖書館裡找書。你可以按書名關鍵字搜尋(關鍵字檢索),也可以描述你想要的內容讓圖書管理員幫你找(語意檢索),最好的方式是兩者結合(混合檢索)。
| 檢索方式 | 原理 | 優勢 | 劣勢 |
|---|---|---|---|
| 關鍵字檢索(BM25) | 基於詞頻和逆文件頻率 | 精確匹配、速度快 | 無法理解語意、同義字失效 |
| 向量檢索 | 基於嵌入向量的餘弦相似度 | 理解語意、支援模糊匹配 | 對專有名詞不敏感 |
| 混合檢索 | 融合關鍵字和向量檢索結果 | 兼顧精確和語意 | 需要調權重、複雜度高 |
重排序(Reranking)
檢索到候選文件後,通常還需要一步「重排序」。初始檢索追求召回率(盡量不遺漏),重排序追求精確率(把最相關的排到最前面)。常用的重排序模型有 Cohere Rerank、BGE Reranker 等,它們使用交叉編碼器對 query-document 對進行精細打分。
4. 架構演進:從簡單到智慧
RAG 技術在短短兩年內經歷了三代演進,每一代都在解決上一代的痛點。
三代 RAG 架構對比
- Naive RAG(2023):最基礎的「索引→檢索→生成」流程,實作簡單但效果有限。問題包括:檢索品質不穩定、無法處理複雜查詢、容易引入噪音上下文。
- Advanced RAG(2024):在 Naive RAG 基礎上增加了查詢改寫、混合檢索、重排序、上下文壓縮等最佳化環節,顯著提升了檢索精度和生成品質。
- Modular RAG(2025):將 RAG 拆解為可插拔的模組,支援路由判斷、自適應檢索、自我反思等進階能力。可根據查詢類型動態選擇最佳處理流程。
5. RAG vs 微調:該選哪個?
當你想讓大模型掌握特定領域的知識時,通常有兩條路:RAG 和微調(Fine-tuning)。它們不是互斥的,而是互補的。
打個比方:微調像是讓學生上培訓班,把知識內化到大腦裡;RAG 像是給學生發參考書,考試時可以翻閱。兩種方式各有優劣,關鍵看你的具體需求。
| 維度 | RAG | 微調 |
|---|---|---|
| 知識更新 | 即時更新,改文件即可 | 需要重新訓練 |
| 成本 | 低(無需 GPU 訓練) | 高(需要訓練資源) |
| 可解釋性 | 高(可追溯來源) | 低(知識內化在權重中) |
| 適用場景 | 知識庫問答、文件檢索 | 風格遷移、特定任務最佳化 |
| 幻覺控制 | 較好(有參考依據) | 一般(仍可能幻覺) |
實踐建議
大多數場景下,先試 RAG。RAG 的優勢在於:不需要訓練、知識可即時更新、回答可追溯來源。只有當你需要改變模型的「行為模式」(比如輸出格式、語言風格、推理方式)時,才考慮微調。最強的方案往往是 RAG + 微調 的組合。
總結
RAG 是當前讓大模型「落地」最實用的技術之一。它的核心價值在於:讓模型的回答有據可查、知識可即時更新、幻覺可有效控制。
回顧本章的關鍵要點:
- RAG 解決的核心問題:大模型知識過時、缺乏私有資料、容易幻覺
- 三階段流程:索引(離線準備)→ 檢索(線上查找)→ 生成(綜合回答)
- 分塊是基礎:分塊品質直接決定檢索品質,選擇合適的分塊策略至關重要
- 檢索是關鍵:混合檢索 + 重排序是目前效果最好的組合
- 架構在演進:從 Naive RAG 到 Modular RAG,系統越來越智慧和靈活
- RAG 和微調互補:大多數場景先試 RAG,需要改變模型行為時再考慮微調
延伸閱讀
- LangChain RAG 教程 - 最流行的 RAG 框架實戰指南
- LlamaIndex 文件 - 專注於 RAG 的框架,提供豐富的資料連接器
- RAG Survey 論文 - 全面的 RAG 技術綜述
- Chunking Strategies - Pinecone 的分塊策略詳解
- 向量資料庫對比 - 主流向量資料庫的功能對比