# RAG 原理：檢索增強生成

::: tip 前言
**為什麼 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 的訓練資料截止到某個時間點，之後發生的事它不知道
- **缺乏私有知識**：你公司的內部文件、產品手冊、客戶資料，模型從未見過
- **容易產生幻覺**：當模型不確定答案時，它傾向於「編造」一個看起來合理的回答

::: tip RAG 的核心思想
RAG 的解決方案非常直覺：**在讓模型回答之前，先幫它找到相關的參考資料。** 就像開卷考試——你不需要記住所有知識，只需要知道去哪裡找、怎麼找。

RAG = 檢索（Retrieval）+ 增強（Augmented）+ 生成（Generation）
:::

---

## 1. RAG 基礎流程：索引、檢索、生成

RAG 的工作流程可以分為兩個階段：**離線索引**和**線上查詢**。

離線階段就像圖書館的編目工作——把所有書籍分類、編號、上架，方便日後查找。線上階段則是讀者來圖書館查資料的過程——根據問題找到相關書籍，然後綜合資訊給出回答。

<RAGPipelineDemo />

::: tip 三個核心階段
1. **索引階段（Indexing）**：將原始文件載入、清洗、分塊，然後透過嵌入模型轉化為向量，存入向量資料庫。這是一次性的準備工作。
2. **檢索階段（Retrieval）**：使用者提問時，將問題也轉化為向量，在向量資料庫中搜尋最相似的文件片段。
3. **生成階段（Generation）**：將檢索到的文件片段和使用者問題一起拼接為 Prompt，交給大模型生成最終回答。
:::

| 階段 | 輸入 | 輸出 | 關鍵技術 |
|------|------|------|---------|
| 索引 | 原始文件 | 向量資料庫 | 文字分塊、嵌入模型 |
| 檢索 | 使用者問題 | Top-K 文件片段 | 向量相似度、重排序 |
| 生成 | 問題 + 上下文 | 最終回答 | Prompt 工程、LLM |

---

## 2. 文字分塊：把大象裝進冰箱

文字分塊是 RAG 中最容易被忽視、卻對效果影響最大的環節。為什麼需要分塊？因為大模型的上下文視窗有限，我們不可能把整本書塞進去。更重要的是，**分塊的品質直接決定了檢索的品質**。

想像你在圖書館找一本書的某個知識點。如果整本書是一個「塊」，檢索到了也沒用——你還是得翻遍全書。但如果按章節甚至段落分塊，就能精準定位到你需要的內容。

<ChunkingStrategyDemo />

::: tip 分塊策略的選擇
- **固定大小分塊**：按字元數或 token 數切分，簡單粗暴但可能切斷語意
- **遞迴分塊**：先按段落分，段落太長再按句子分，保持語意完整性
- **語意分塊**：用嵌入模型判斷語意邊界，相似度突變處切分
- **文件結構分塊**：利用 Markdown 標題、HTML 標籤等結構資訊分塊

沒有「最好」的分塊策略，只有最適合你資料的策略。一般建議從遞迴分塊開始，chunk 大小 200-500 tokens，overlap 10-20%。
:::

---

## 3. 檢索技術：找到最相關的內容的方法

分塊完成後，下一個關鍵問題是：**使用者提了一個問題，怎麼從成千上萬個文件片段中找到最相關的那幾個？**

這就像在一個巨大的圖書館裡找書。你可以按書名關鍵字搜尋（關鍵字檢索），也可以描述你想要的內容讓圖書管理員幫你找（語意檢索），最好的方式是兩者結合（混合檢索）。

<RetrievalDemo />

| 檢索方式 | 原理 | 優勢 | 劣勢 |
|---------|------|------|------|
| 關鍵字檢索（BM25） | 基於詞頻和逆文件頻率 | 精確匹配、速度快 | 無法理解語意、同義字失效 |
| 向量檢索 | 基於嵌入向量的餘弦相似度 | 理解語意、支援模糊匹配 | 對專有名詞不敏感 |
| 混合檢索 | 融合關鍵字和向量檢索結果 | 兼顧精確和語意 | 需要調權重、複雜度高 |

::: tip 重排序（Reranking）
檢索到候選文件後，通常還需要一步「重排序」。初始檢索追求召回率（盡量不遺漏），重排序追求精確率（把最相關的排到最前面）。常用的重排序模型有 Cohere Rerank、BGE Reranker 等，它們使用交叉編碼器對 query-document 對進行精細打分。
:::

---

## 4. 架構演進：從簡單到智慧

RAG 技術在短短兩年內經歷了三代演進，每一代都在解決上一代的痛點。

<RAGArchitectureDemo />

::: tip 三代 RAG 架構對比
- **Naive RAG（2023）**：最基礎的「索引→檢索→生成」流程，實作簡單但效果有限。問題包括：檢索品質不穩定、無法處理複雜查詢、容易引入噪音上下文。
- **Advanced RAG（2024）**：在 Naive RAG 基礎上增加了查詢改寫、混合檢索、重排序、上下文壓縮等最佳化環節，顯著提升了檢索精度和生成品質。
- **Modular RAG（2025）**：將 RAG 拆解為可插拔的模組，支援路由判斷、自適應檢索、自我反思等進階能力。可根據查詢類型動態選擇最佳處理流程。
:::

---

## 5與RAG vs 微調的選型決策方法

當你想讓大模型掌握特定領域的知識時，通常有兩條路：RAG 和微調（Fine-tuning）。它們不是互斥的，而是互補的。

打個比方：**微調像是讓學生上培訓班**，把知識內化到大腦裡；**RAG 像是給學生發參考書**，考試時可以翻閱。兩種方式各有優劣，關鍵看你的具體需求。

<RAGvsFineTuningDemo />

| 維度 | RAG | 微調 |
|------|-----|------|
| 知識更新 | 即時更新，改文件即可 | 需要重新訓練 |
| 成本 | 低（無需 GPU 訓練） | 高（需要訓練資源） |
| 可解釋性 | 高（可追溯來源） | 低（知識內化在權重中） |
| 適用場景 | 知識庫問答、文件檢索 | 風格遷移、特定任務最佳化 |
| 幻覺控制 | 較好（有參考依據） | 一般（仍可能幻覺） |

::: tip 實踐建議
大多數場景下，**先試 RAG**。RAG 的優勢在於：不需要訓練、知識可即時更新、回答可追溯來源。只有當你需要改變模型的「行為模式」（比如輸出格式、語言風格、推理方式）時，才考慮微調。最強的方案往往是 **RAG + 微調** 的組合。
:::

---

## 總結

RAG 是當前讓大模型「落地」最實用的技術之一。它的核心價值在於：讓模型的回答有據可查、知識可即時更新、幻覺可有效控制。

回顧本章的關鍵要點：

1. **RAG 解決的核心問題**：大模型知識過時、缺乏私有資料、容易幻覺
2. **三階段流程**：索引（離線準備）→ 檢索（線上查找）→ 生成（綜合回答）
3. **分塊是基礎**：分塊品質直接決定檢索品質，選擇合適的分塊策略至關重要
4. **檢索是關鍵**：混合檢索 + 重排序是目前效果最好的組合
5. **架構在演進**：從 Naive RAG 到 Modular RAG，系統越來越智慧和靈活
6. **RAG 和微調互補**：大多數場景先試 RAG，需要改變模型行為時再考慮微調

## 延伸閱讀

- [LangChain RAG 教程](https://python.langchain.com/docs/tutorials/rag/) - 最流行的 RAG 框架實戰指南
- [LlamaIndex 文件](https://docs.llamaindex.ai/) - 專注於 RAG 的框架，提供豐富的資料連接器
- [RAG Survey 論文](https://arxiv.org/abs/2312.10997) - 全面的 RAG 技術綜述
- [Chunking Strategies](https://www.pinecone.io/learn/chunking-strategies/) - Pinecone 的分塊策略詳解
- [向量資料庫對比](https://superlinked.com/vector-db-comparison) - 主流向量資料庫的功能對比
