設計檢索增強生成 (RAG)

Hard★★★★★Draft

FromGenerative AI System Design Interview

Concepts practiced⚡ 快取策略 (Caching Strategies)

Convention: read the requirements & constraints first, sketch your own design, then expand the reference to compare.

📚 From the Books

設計檢索增強生成 (RAG)ProblemHardGenAI & LLM

讓聊天機器人回答訓練資料以外的問題——例如查內部公司文件。難點不在吞吐量,而在檢索到對的內容、生成不亂編、還能附上引用來源

📋 Requirements

🧠 Core Ideas

TIP

讓 LLM 讀公司資料有三條路:微調(改權重,成本高、無法引用來源)、提示工程(不改模型,但把全部資料塞進提示會超出 context window)、RAG(結合通用 LLM 與推論時的即時檢索)。RAG 在設置便利、成本與可擴展性間取得平衡,是大規模且持續演進資料集的理想選擇。

RAG 有兩個核心元件:檢索——依使用者提示從外部來源找出最相關資訊當上下文;生成——由 LLM 結合提示與檢索結果產生回應。好處是能存取最新資訊、上下文相關性高;代價是兩元件要協調運作,且回應品質高度仰賴檢索品質。

⚖️ Reference Design

資料準備 — 解析、分塊、索引
  • 文件解析:把 PDF 的文字、圖片、表格轉成結構化格式。基於規則的解析器只適合格式一致的文件;面對多樣版面改用基於 AI 的解析器(物件偵測 + OCR),如 Layout-Parser、Dedoc。
  • 文件分塊 (chunking):長文整段索引會遺漏細節、又超過 token 限制,所以切成小區塊。策略有基於長度、基於正規表達式、以及 HTML/Markdown/程式碼專用分割器。
  • 估算:500 萬頁、每頁約 1,500 字元 + 3 張圖,用區塊 500 字元、重疊 200 字元 → 約 4,000 萬個區塊,每年再成長 20%。
索引 — 為何選向量檢索
  • 檢索技術有關鍵字、全文(如 Elasticsearch)、知識圖譜、向量四種。前兩者無法理解語意、大規模成本高;知識圖譜建構維護太貴。
  • 向量檢索用高維嵌入向量衡量相似度,即使用詞不同也能命中語意相關內容,對大規模資料集最具彈性——雀屏中選。
  • 每個區塊經編碼器轉成嵌入向量存入向量資料庫。文字用 text encoder(純編碼器 Transformer),圖片用 image encoder;兩者要對齊到共享嵌入空間(如 CLIP)或先用 image captioning 轉成文字再編碼。
檢索 — 最近鄰搜尋
  • 與索引階段相同的 text encoder 把查詢轉成嵌入向量,再做最近鄰搜尋,相似度度量常用歐幾里得距離或餘弦相似度。
  • 精確最近鄰(線性搜尋)保證正確,但複雜度 O(N × D)——對 4,000 萬項目太慢。
  • 改用近似最近鄰 (ANN),次線性複雜度,四大類:基於樹(k-d tree、Annoy)、局部敏感雜湊 (LSH)、基於聚類、基於圖(HNSW)。本設計為簡化採基於聚類的 ANN。可用框架:Elasticsearch、FAISS、ScaNN。
生成與整體流程
  • 生成:把使用者查詢與檢索到的上下文組成提示詞,交給 LLM 以 top-p 取樣產生回應;用提示工程(思維鏈 CoT、少樣本、角色特定、使用者上下文)提升品質。
  • 大多數元件都以預訓練模型起步,微調 LLM 不是最佳化的第一步;先調檢索與提示,仍不理想才考慮微調(如 RAFT)。
  • 整體管線:索引流程 → 安全過濾(擋不當/有害查詢)→ 查詢擴展(修拼字文法、拓寬搜尋)→ 檢索(CLIP text encoder + ANN)→ 生成(提示工程 + LLM 推論)。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading