檢索增強生成 (RAG, Retrieval-Augmented Generation)
Foundation Model 的四大限制
RAG 解決的是 foundation model 的根本限制:
| 限制 | 說明 | 後果 |
|---|---|---|
| 知識截止日(Cutoff) | 訓練資料凍結在某時間點 | 被問近期事件 → 自信地給過時/捏造資訊 |
| 缺特定領域深度 | 高度專業化資料出現頻率不足 | 回應不完整/不相關(如罕見遺傳疾病) |
| 缺私有/專有資料 | 你的公司資料不在公開領域 | 不知道你的業務細節 |
| 失去信任 | 無法引用來源 | 用戶要麼盲信、要麼自行驗證 |
訓練資料本身含矛盾/錯誤,加上 temperature、top-k sampling 的隨機性,模型對所有後續內容分配機率(含錯的)。且模型無法區分「知道」與「不知道」,即使錯也很自信 —— 一份說服力強但錯誤的醫療報告可能危及生命。
什麼是 RAG?四個核心元件
利用具權威性的外部資料提升模型輸出的準確性、相關性、實用性:
1. Ingestion(攝取) ── 權威資料載入資料來源(如 Pinecone vector DB)
2. Retrieval(檢索) ── 根據用戶 query 檢索相關資料
3. Augmentation(增強)── 檢索結果 + 用戶 query 組合成 prompt(提供 context)
4. Generation(生成) ── 模型根據增強後 prompt 生成輸出
相比自己訓練/重訓模型、fine-tuning、或把大量資訊塞進 context window,RAG 更划算(foundation model 製作成本高昂;送的 context 越大成本越高)。還帶來:即時/專有資料存取、可引用來源建立信任、更強控制(資料授權、guardrail、可追溯、獨立調整每個元件)。
先問:你真的需要 RAG 嗎?
部署任何應用都要知道它何時正常工作。確定一組 query + 預期答案,維護這個評估集,才能知道哪裡要改進、改進是否真的有效。RAG 只是優化手段之一,還有 query rewriting、chunk expansion、knowledge graph 等。
第一步:Ingestion(攝取)
| 步驟 | 做法 |
|---|---|
| Chunking(分塊) | 把文件切成更小片段;依資料類型、query 類型、結果用途選擇 chunking 策略 |
| 建立 Vector Embedding | 用 embedding model(特殊 LLM)把每個 chunk 轉成 vector(含義的數值表示)→ 可搜尋語義相似項 |
| 載入 Vector Database | 通常 offline 進行,獨立於應用工作流程;資料有變動可即時更新 index |
第二步:Retrieval(檢索)
| 方式 | 機制 | 擅長 |
|---|---|---|
| Semantic Search | dense vector | 用戶用不同語言談同一主題 |
| Lexical/Keyword Search | sparse vector | 內部/特定領域語言(縮寫、產品名、團隊名) |
| Hybrid Search | 兩者結合 | 兼顧上述兩種情況 |
流程:從 query 建 vector embedding → 查 hybrid index(或同時查 dense + sparse index)→ 合併去重 → reranking model 依統一 relevance score 重排 → 回傳最相關結果。
第三、四步:Augmentation + Generation
把搜尋結果和用戶 query 組合成增強 prompt:
QUESTION: <用戶的問題>
CONTEXT: <用來作為 context 的搜尋結果>
Using the CONTEXT provided, answer the QUESTION. Keep your answer
grounded in the facts of the CONTEXT. If the CONTEXT doesn't contain
the answer, say you don't know.
把搜尋結果作為 context,鼓勵模型優先用紮實的事實 → 大幅降低 hallucination。
Agentic RAG(AI Agent 作為 orchestrator)
傳統 RAG 簡單(vector DB + 一次帶 context 的 prompt)。隨 AI agent 興起,agent 成為核心 RAG 元件的 orchestrator:
- 構建更有效的 query
- 存取額外的 retrieval 工具
- 評估檢索 context 的準確性/相關性
- 應用推理驗證資訊,決定相信或捨棄
Agentic RAG 不只是搜尋正確資訊輔助回應,而是決定要問哪些問題、用哪些工具、何時使用,然後聚合結果紮實回答。在簡化版中,LLM 就是 agent,自行決定用哪些 retrieval 工具。
常見 Deep Dive / 設計考量
- RAG:注入即時/專有知識,可引用來源、獨立調整、成本可控 → 大多數場景首選
- Fine-tuning:改變模型行為/風格,但需專業知識、成本高、知識仍會過時
- 塞長 context:簡單但每次請求成本隨 context 大小上升,且有 context window 上限
chunk 太大 → embedding 含義稀釋、檢索不精準;太小 → 失去上下文。要依資料類型(文字/PDF/wiki)、query 類型、結果用途選擇。chunk expansion 是 RAG 之外的優化手段。
純 semantic 對「內部縮寫、產品名、團隊名」這類特定領域詞彙表現差(這些靠 lexical/keyword 才找得到)。Hybrid 結合 dense(語義)+ sparse(關鍵字)覆蓋兩種情況。
Related Notes
- 08-Search-and-AI/01-Search-System — 傳統搜尋(倒排索引、BM25);RAG 是其 AI 延伸
- 04-Database-Indexing/06-Inverted-Index — lexical search 的索引基礎
- 09-Messaging-Coord/01-Data-Pipeline — ingestion 管線、資料攝取
- 08-Search-and-AI/Practice-Search-and-AI