一、學習目標
- 理解 LLM 幻覺(Hallucination) 的本質與為何 RAG 是最有效的緩解策略
- 掌握 RAG(Retrieval-Augmented Generation,檢索增強生成) 的完整五階段流程
- 了解 Embedding(嵌入) 的概念,以及向量資料庫(Vector Database) 的運作原理
- 區分語意搜尋(Semantic Search) 與關鍵字搜尋(Keyword Search) 的差異
- 比較 RAG vs 微調(Fine-tuning) 的適用情境,以及進階 RAG 技術(重排序、混合搜尋、查詢擴展)
二、核心內容
2.1 問題起點:LLM 的幻覺(Hallucination)
大型語言模型(LLM) 有一個根本性的問題:它會自信地生成錯誤資訊。這種現象稱為幻覺(Hallucination)——模型不說「我不知道」,而是流暢地「編造」一個聽起來合理的答案。
生活類比:
想像一個學生在考試中不留空白——不管有沒有念到,都把答案欄寫滿。他的字跡漂亮、語氣自信、結構完整,但閱卷老師一看,發現有些答案根本是他「即興發揮」的,沒有任何知識依據。這就是 AI 幻覺——外表流暢,內容虛假。
LLM 幻覺的三大成因:
| 成因 | 說明 |
|---|---|
| 知識截止(Knowledge Cutoff) | 模型只有訓練截止日前的知識,對最新事件一無所知 |
| 訓練資料缺口(Training Data Gaps) | 特定領域(如公司內部文件、專業法規)在訓練資料中不存在 |
| 模式過度概化(Pattern Overgeneralization) | 模型將學到的語言模式套用到沒有依據的情境,生成「聽起來對」但實際錯誤的內容 |
幻覺的高風險應用情境:
| 情境 | 風險 |
|---|---|
| 醫療問診建議 | 錯誤藥物劑量或診斷可能危及生命 |
| 法律條文引用 | 引用不存在的判例或法條可能導致敗訴 |
| 財務數據分析 | 虛構財報數字可能造成投資決策失誤 |
| 企業內部政策查詢 | 引用不存在的公司規定可能造成合規問題 |
考試重點:幻覺的三大成因——知識截止、訓練資料缺口、模式過度概化——解釋了為什麼閉卷(靠記憶)的 LLM 不適合需要精確事實的任務,而 RAG 用「開卷考試」的方式解決了這個問題。
2.2 解法:RAG(Retrieval-Augmented Generation)
RAG(Retrieval-Augmented Generation,檢索增強生成) 是在 LLM 生成回答前,先從外部知識庫**檢索(Retrieve)**相關文件,再把這些文件作為「參考資料」注入提示詞,讓模型「有依據地」生成回答的技術架構。
生活類比:
傳統 LLM(閉卷考試):考試時不能帶參考資料,完全靠記憶作答。記得的答對,記不得的就猜(幻覺)。
RAG(開卷考試):考試時可以帶教科書和筆記。不會的題目查資料,答案有所本、有引用出處。RAG 就是讓 AI 從「閉卷考試」升級為「開卷考試」。
RAG 的核心優勢:
| 優勢 | 說明 |
|---|---|
| 降低幻覺 | 模型有具體文件作為依據,不需要「猜測」 |
| 知識即時更新 | 只需更新知識庫,不需重新訓練模型 |
| 可溯源性(Traceability) | 可標示回答來自哪份文件的哪一段 |
| 領域客製化 | 接入企業內部文件庫,讓通用 LLM 變成公司專屬助理 |
2.3 RAG 五階段完整流程
RAG 的完整架構可分為**文件處理(離線)與查詢處理(即時)**兩個階段:
【離線:文件入庫階段】
原始文件(PDF、Word、網頁)
↓
第一階段:文件分塊(Document Chunking)
↓
第二階段:Embedding 向量化
↓
第三階段:存入向量資料庫(Vector Database)
【即時:查詢處理階段】
使用者提問
↓
第四階段:查詢 Embedding + 相似度搜尋
↓
第五階段:注入上下文 → LLM 生成回答
2.4 第一階段:文件分塊(Document Chunking / Ingestion)
文件分塊是將原始文件(PDF、Word、網頁、程式碼等)切分為較小的文本片段(Chunks),以便後續 Embedding 和檢索。
生活類比:
就像把一本 500 頁的教科書,按章節或段落撕成一張一張的單頁卡片——每張卡片各自代表一個概念,搜尋時只需找出最相關的那幾張卡片,而不是翻遍整本書。
分塊策略比較:
| 策略 | 說明 | 適用情境 |
|---|---|---|
| 固定大小分塊(Fixed-size Chunking) | 每塊固定 N 個 Token,可設定重疊(Overlap)避免語意斷裂 | 通用情境,實作簡單 |
| 語意分塊(Semantic Chunking) | 依語意邊界(段落、章節)分塊,保留完整語意單元 | 文件結構清晰時效果更好 |
| 遞迴分塊(Recursive Chunking) | 先嘗試大分塊,若超過大小限制則遞迴細分 | 混合長短段落的文件 |
分塊大小的取捨:
| 分塊大小 | 優點 | 缺點 |
|---|---|---|
| 太小(< 100 Token) | 精確定位特定資訊 | 缺乏上下文,語意不完整 |
| 適中(256–512 Token) | 平衡精確度與上下文完整性 | 需根據文件類型調整 |
| 太大(> 1000 Token) | 上下文完整 | 檢索精確度下降,注入 Prompt 的 Token 成本高 |
2.5 第二階段:Embedding(嵌入向量化)
Embedding(嵌入) 是將文字轉換為高維度數值向量(Vector) 的過程,讓電腦能計算兩段文字在「語意」上的相似程度。
生活類比:
把每個文字段落想像成地球上的一個地點,用 GPS 座標(經緯度)來表示。語意相近的文字,它們的「GPS 座標」(向量)就很接近——即使用詞完全不同。「心肌梗塞」和「心臟病發作」在語意空間中的距離很近;「心肌梗塞」和「今天天氣很好」則距離很遠。
Embedding 的技術細節:
| 概念 | 說明 |
|---|---|
| 向量維度(Vector Dimensions) | 常見 768、1536、3072 維,維度越高表達能力越強 |
| Embedding 模型 | OpenAI text-embedding-3-large、Cohere Embed、BGE、E5 等 |
| 語意相似度(Semantic Similarity) | 向量間的距離反映語意相似程度 |
余弦相似度(Cosine Similarity):
最常用的向量相似度計算方式,計算兩個向量之間的角度——角度越小(余弦值越接近 1),語意越相近。
| 余弦相似度值 | 語意關係 |
|---|---|
| 0.95 ~ 1.0 | 幾乎相同語意 |
| 0.80 ~ 0.95 | 高度相關 |
| 0.50 ~ 0.80 | 部分相關 |
| < 0.50 | 語意不相關 |
考試重點:Embedding(嵌入) 是將文字轉換為向量的關鍵技術,使電腦能做語意相似度計算。余弦相似度(Cosine Similarity) 是最常見的向量距離計算方式,值越接近 1 代表語意越相近。
2.6 第三階段:向量資料庫(Vector Database)
向量資料庫(Vector Database) 專門用來儲存和搜尋高維度向量,支援超高速的近似最近鄰搜尋(Approximate Nearest Neighbor, ANN)。
生活類比:
傳統圖書館按書名(關鍵字)排列——你必須知道確切書名才能找到書。向量資料庫像是一座按主題意思組織的圖書館——「和心臟病相關的書」會自動聚集在一區,即使書名裡沒有「心臟」這個字也能找到。
主流向量資料庫比較:
| 向量資料庫 | 特色 | 適用情境 |
|---|---|---|
| Pinecone | 全托管雲端服務,易上手 | 快速 PoC 與生產環境 |
| Weaviate | 開源,支援混合搜尋(Hybrid Search) | 需要語意 + 關鍵字結合搜尋 |
| Chroma | 輕量開源,本地端友好 | 開發測試、本地 RAG 系統 |
| FAISS | Meta 開源,純向量搜尋引擎 | 高性能場景,需自行管理 |
| Qdrant | 開源,支援過濾(Filtering) | 需要根據 Metadata 過濾的場景 |
| pgvector | PostgreSQL 擴充,向量 + 關聯式資料庫合一 | 已有 PostgreSQL 基礎設施的團隊 |
向量資料庫 vs 傳統資料庫:
| 面向 | 傳統關聯式資料庫(如 MySQL) | 向量資料庫 |
|---|---|---|
| 搜尋方式 | 精確比對(WHERE name = ‘X’) | 相似度搜尋(找最接近的向量) |
| 查詢類型 | 關鍵字、結構化查詢 | 語意相似度查詢 |
| 資料類型 | 結構化資料(表格) | 高維向量 |
| 擅長問題 | 「找出姓名是張三的記錄」 | 「找出語意最接近這個問題的文件段落」 |
2.7 第四階段:查詢處理(Query Processing)
當使用者提出問題時,RAG 系統進行以下即時處理:
- 查詢 Embedding:將使用者的問題轉換為向量(使用與文件入庫時相同的 Embedding 模型)
- 相似度搜尋:在向量資料庫中搜尋與問題向量最相近的 Top-K 個文件片段
- 檢索 Top-K Chunks:取出最相關的 K 個片段(通常 K = 3~10)
語意搜尋 vs 關鍵字搜尋比較:
| 面向 | 關鍵字搜尋(Keyword Search) | 語意搜尋(Semantic Search) |
|---|---|---|
| 運作方式 | 比對詞彙是否出現在文件中 | 比較問題與文件的語意向量相似度 |
| 同義詞處理 | 無法處理(「心臟病」找不到「心肌梗塞」) | 可以(語意相近自動匹配) |
| 跨語言搜尋 | 不支援 | 多語言 Embedding 模型可支援 |
| 速度 | 極快(倒排索引) | 較慢(向量計算,但 ANN 已大幅優化) |
| 適用情境 | 精確術語查詢(品號、姓名) | 概念性問題、自然語言查詢 |
考試重點:語意搜尋(Semantic Search) 的核心優勢是理解「語意相似性」而非「字面相同」——即使問題與文件用詞完全不同,只要意思相近就能找到。這是 RAG 優於傳統關鍵字搜尋的關鍵。
2.8 第五階段:生成(Generation)
檢索到相關文件片段後,系統將其注入提示詞,讓 LLM 有依據地生成回答。
提示詞注入格式範例:
你是一位企業內部知識助理。請根據以下參考文件回答問題。
若參考文件中沒有相關資訊,請明確告知「我在現有文件中找不到答案」,不要推測。
【參考文件】
[文件一] 員工手冊第三章第二節:年假申請須在出發前 7 個工作天提出申請…
[文件二] HR 政策更新 2024Q3:特殊情況可申請緊急年假…
【使用者問題】
我明天要請假,還來得及申請嗎?
2.9 RAG vs 微調(Fine-tuning):如何選擇?
RAG 和微調(Fine-tuning)是讓 LLM 適應特定領域的兩種主要方法,適用情境不同:
| 比較面向 | RAG | 微調(Fine-tuning) |
|---|---|---|
| 目的 | 提供外部即時知識,降低幻覺 | 改變模型的「行為風格」與「能力」 |
| 知識更新 | 即時——更新知識庫即可,無需重新訓練 | 需要重新訓練,更新週期長 |
| 成本 | 較低(主要是向量資料庫與 API 成本) | 較高(需要 GPU 計算資源) |
| 適合任務 | 需要參考最新文件、公司內部資料 | 需要調整模型語氣、格式、特定領域術語的使用方式 |
| 可溯源性 | 高(可標示引用來源) | 低(模型內化知識,無法溯源) |
| 最佳用例 | 企業知識庫問答、法規查詢、客服機器人 | 特定語氣寫作、特定格式輸出、醫療/法律專業術語理解 |
生活類比:
RAG 就像給助理一個可以隨時查閱的資料夾——他不需要把所有資料背起來,要用的時候查資料夾就好,資料夾可以隨時更新。
微調 就像讓助理去進修一學期的法律課——課上完後他真的懂法律了,但這個「懂」是內化在他的知識裡,你沒辦法知道他在回答時「引用」的是哪堂課的什麼內容。
考試重點:RAG 優先選擇當知識需要即時更新、資料有機密性或可溯源需求(如企業知識庫)。微調優先選擇當需要改變模型的輸出格式、語氣風格,或讓模型真正「內化」特定領域的術語使用習慣。
2.10 進階 RAG 技術
基礎 RAG 的最大瓶頸是檢索品質(Retrieval Quality)——如果取回的 Chunks 不夠準確,就算 LLM 再強也無法給出好答案。進階 RAG 技術解決這些瓶頸:
重排序(Re-ranking)
初步向量搜尋取回 Top-20 個候選片段,再用一個更精確(但更慢)的重排序模型(Cross-encoder) 對這 20 個片段重新排序,最終只取 Top-3~5 注入提示詞。
生活類比:
先由圖書館館員(向量搜尋)快速找出 20 本大概相關的書,再由專家(重排序模型)細讀這 20 本書的目錄,選出最精準的 3 本。
混合搜尋(Hybrid Search)
結合語意搜尋(Semantic Search)+ 關鍵字搜尋(Keyword Search / BM25),再用 RRF(Reciprocal Rank Fusion)融合兩個排名,取長補短。
| 場景 | 哪種搜尋更好 |
|---|---|
| 「心臟病怎麼預防?」(概念性問題) | 語意搜尋 |
| 「請找出編號 A-2024-0312 的合約條款」(精確術語) | 關鍵字搜尋 |
| 大多數企業場景(兩者混合) | 混合搜尋 |
查詢擴展(Query Expansion)
在搜尋前,先讓 LLM 對原始問題產生多個改寫版本,再用多個版本分別搜尋,合併結果以提升召回率(Recall)。
2.11 RAG 工具生態系統
| 工具類型 | 代表工具 | 功能 |
|---|---|---|
| RAG 框架 | LangChain | 串接 LLM、向量資料庫、工具的全功能框架 |
| RAG 框架 | LlamaIndex | 專注於文件索引與 RAG 的輕量框架 |
| 向量資料庫 | Pinecone / Chroma / FAISS / Weaviate | 儲存與搜尋 Embedding 向量 |
| Embedding 模型 | OpenAI text-embedding-3 / Cohere Embed / BGE | 將文字轉換為向量 |
| LLM API | OpenAI / Anthropic / Google | 生成最終回答 |
| 評估工具 | RAGAS / TruLens | 評估 RAG 系統的檢索與生成品質 |
2.12 RAG 的限制
RAG 不是萬能的,它有幾個關鍵限制需要了解:
| 限制 | 說明 |
|---|---|
| 檢索品質瓶頸 | 如果相關文件根本不在知識庫中,或 Embedding 品質差,RAG 無法彌補 |
| 情境視窗限制(Context Window Limit) | 能注入提示詞的 Chunks 數量受限於模型的 Context Window,不能無限增加 |
| 分塊策略影響大 | 分塊切得不好(如在句子中間截斷),可能導致語意不完整,影響檢索和生成品質 |
| 延遲增加(Latency) | RAG 比直接呼叫 LLM 多了向量搜尋的時間,對低延遲應用有影響 |
| 知識庫維護成本 | 文件更新、分塊、重新 Embedding 需要持續的維運工作 |
三、關鍵名詞中英對照
| 中文 | 英文 | 說明 |
|---|---|---|
| 檢索增強生成 | RAG (Retrieval-Augmented Generation) | 先檢索外部文件再生成回答的 AI 架構 |
| 幻覺 | Hallucination | LLM 自信地生成錯誤或虛構資訊的現象 |
| 嵌入 | Embedding | 將文字轉換為高維數值向量的技術 |
| 向量 | Vector | 用數值陣列表示資料的數學形式 |
| 向量資料庫 | Vector Database | 專門儲存和搜尋高維向量的資料庫 |
| 余弦相似度 | Cosine Similarity | 計算兩向量夾角以衡量語意相似度的方法 |
| 語意搜尋 | Semantic Search | 基於語意相似度(而非字面比對)的搜尋方式 |
| 關鍵字搜尋 | Keyword Search | 基於詞彙字面比對的傳統搜尋方式 |
| 文件分塊 | Chunking | 將長文件切分為較小片段以利 Embedding 的過程 |
| 文本片段 | Chunk | 分塊後的單一文件片段 |
| 近似最近鄰搜尋 | ANN (Approximate Nearest Neighbor) | 在向量空間中快速找到最相似向量的演算法 |
| 重排序 | Re-ranking | 對初步檢索結果用更精確模型重新排序的技術 |
| 混合搜尋 | Hybrid Search | 結合語意搜尋與關鍵字搜尋的方式 |
| 查詢擴展 | Query Expansion | 將原始問題改寫為多個版本以提升搜尋召回率 |
| 知識截止 | Knowledge Cutoff | LLM 訓練資料的時間截止點,之後的事件模型不知道 |
| 可溯源性 | Traceability | 能追蹤 AI 回答來自哪份來源文件的能力 |
| 召回率 | Recall | 相關文件中有多少比例被成功找到的指標 |
| 準確率 | Precision | 找到的文件中有多少比例是真正相關的指標 |
四、考試重點提示
考試重點:RAG(Retrieval-Augmented Generation) 解決 LLM 幻覺問題的核心邏輯是「開卷考試」——讓模型在回答前先查閱外部知識庫,有所依據才生成答案,而不是靠記憶猜測。
考試重點:RAG 的五個核心階段:①文件分塊(Chunking)→ ②Embedding(向量化)→ ③存入向量資料庫 → ④查詢 Embedding + 相似度搜尋 → ⑤注入上下文 + LLM 生成回答。
考試重點:Embedding(嵌入) 是將文字轉為高維向量,使電腦能計算語意相似度。余弦相似度(Cosine Similarity) 是最常用的計算方式,值越接近 1 代表語意越相近。
考試重點:語意搜尋(Semantic Search) vs 關鍵字搜尋(Keyword Search)——語意搜尋能處理同義詞和概念性問題(「心臟病」能找到「心肌梗塞」相關文件);關鍵字搜尋只能做字面比對。混合搜尋(Hybrid Search) 結合兩者優點。
考試重點:RAG vs 微調(Fine-tuning) 的選擇——知識需要即時更新、需要可溯源引用 → 選 RAG;需要改變模型輸出風格、讓模型真正內化特定術語 → 選微調。兩者不互斥,可以同時使用。
考試重點:RAG 的最大瓶頸是檢索品質(Retrieval Quality)——LLM 再強,如果檢索回來的文件不相關,生成的答案也會出錯。「Garbage In, Garbage Out(垃圾進,垃圾出)」同樣適用於 RAG 系統。
Q1. 以下哪個類比最能準確描述 RAG(Retrieval-Augmented Generation)如何解決 LLM 幻覺問題?
- A. 給學生更多時間背書,讓他記憶力更好
- B. 把閉卷考試改為開卷考試,讓學生考試時可以查閱參考資料作答
- C. 換一個更聰明的學生來考試
- D. 讓老師提前公布考題答案
Q2. 在 RAG 系統中,Embedding(嵌入) 技術的主要作用是什麼?
- A. 將文件壓縮成更小的檔案以節省儲存空間
- B. 將文字翻譯成多種語言以支援跨語言搜尋
- C. 將文字轉換為高維數值向量,使電腦能計算兩段文字在語意上的相似度
- D. 將長文件自動摘要為短文字以加快處理速度
Q3. 某企業 RAG 系統在搜尋「如何申請醫療假」時,無法找到內部文件中關於「病假申請流程」的段落,因為文件中用的是「病假」而非「醫療假」。以下哪種解法最能根本解決這個問題?
- A. 把所有文件中的「病假」全部手動改成「醫療假」
- B. 改用語意搜尋(Semantic Search)——它能理解「醫療假」和「病假」語意相近,自動匹配
- C. 增加向量資料庫的儲存容量
- D. 要求使用者改用更精確的關鍵字提問
Q4. 以下哪個情境最適合選擇 RAG 而非微調(Fine-tuning) 來強化 LLM?
- A. 希望 LLM 在回答時永遠使用正式公文的語氣與格式
- B. 希望 LLM 能查閱企業最新的每日股價報告並根據內容回答問題
- C. 希望 LLM 能更精準地理解醫學術語,即使訓練資料中醫學文字比例偏低
- D. 希望 LLM 輸出的 JSON 格式符合特定 Schema
Q5. 重排序(Re-ranking) 技術在進階 RAG 系統中的作用是?
- A. 對用戶的提問進行改寫,讓問題更清晰
- B. 初步向量搜尋取回多個候選片段後,用更精確的模型重新評分排序,選出最相關的少數片段注入提示詞
- C. 將文件庫中的所有文件重新按時間順序排列
- D. 根據使用者的歷史查詢記錄調整向量資料庫的索引
解答與解析
| 題號 | 答案 | 解析 |
|---|---|---|
| Q1 | B | RAG 的核心概念是將 LLM 從「閉卷考試」升級為「開卷考試」——在生成答案前先從外部知識庫檢索相關文件,模型有文件依據才生成回答,大幅降低幻覺。選 A 比喻的是提升模型本身能力(更大規模訓練),選 C 是換更好的基礎模型,選 D 是提示詞工程(直接給答案),都不是 RAG 的運作邏輯。 |
| Q2 | C | Embedding(嵌入) 的功能是將文字轉換為高維數值向量,使電腦能用數學計算(如余弦相似度)量化兩段文字的語意相似程度。這是 RAG 能做語意搜尋的基礎——沒有 Embedding,就只能做字面比對的關鍵字搜尋。選 A 是壓縮技術、選 B 是翻譯技術、選 D 是摘要技術,都不是 Embedding 的定義。 |
| Q3 | B | 這是同義詞問題——「醫療假」和「病假」意思相同但用詞不同,關鍵字搜尋無法處理(只能比對字面),而語意搜尋(Semantic Search) 透過 Embedding 向量計算能識別兩者語意相近,自動找到相關文件。選 A 是治標不治本的人工補救;選 C 增加儲存容量與這個問題無關;選 D 要求使用者改變提問習慣是不切實際的解法。 |
| Q4 | B | 每日股價報告是即時更新的資料,LLM 訓練截止日後的資料它無從得知。RAG 只需將最新報告加入知識庫,無需重新訓練,是處理即時動態資料的最佳選擇。選 A(公文語氣格式)和選 D(特定 JSON Schema)是改變模型輸出行為的需求,適合微調;選 C(醫學術語理解)是讓模型內化特定領域知識,也適合微調。 |
| Q5 | B | 重排序(Re-ranking) 是進階 RAG 的兩階段檢索策略:第一階段用快速的向量搜尋取回較多候選片段(如 Top-20),第二階段用更精確但較慢的 Cross-encoder 重排序模型對這些候選片段重新評分,只取最高分的 3~5 個注入提示詞,大幅提升最終注入上下文的相關性。選 A 是查詢擴展(Query Expansion)的描述;選 C、D 都不是重排序的功能。 |