Retrieval-Augmented Generation 入門指南
Retrieval-Augmented Generation(RAG)是近年來 AI 和自然語言處理領域最受矚目的架構之一。它結合了檢索系統與生成模型的優勢,讓大型語言模型(LLM)能夠引用外部知識庫產生更準確、更即時的回答。
為什麼需要 RAG?
傳統的 LLM 訓練完成後,其知識就被固定在模型權重中。這意味著知識有截止日期、容易產生幻覺(hallucination)、無法引用企業內部文件或私有知識。RAG 透過在「推論階段」動態注入外部文件,解決了這些問題。
RAG 架構核心元件
1. 文件解析與切片(Chunking)
將原始文件切割成適當大小的片段(chunks),通常每個 chunk 包含 256-1024 個 tokens。
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50)
chunks = splitter.split_text(document)
2. 向量嵌入(Embedding)
透過 Embedding Model 將文字轉換為高維向量。常用模型包括 OpenAI text-embedding-3、Cohere Embed v3、BGE-M3 等。
3. 向量資料庫(Vector Database)
| 資料庫 | 類型 | 適用場景 |
|---|---|---|
| Pinecone | 託管服務 | 快速原型開發 |
| Weaviate | 開源 | 自架企業級應用 |
| Chroma | 嵌入式 | 本地開發測試 |
| Cloudflare Vectorize | Edge | 邊緣運算場景 |
實作注意事項
- Chunk overlap 能避免上下文被切斷,建議設為 chunk_size 的 10-20%
- Metadata 儲存:每個 chunk 應記錄來源文件、頁碼等資訊
- Hybrid Search 結合關鍵字搜尋(BM25)與語義搜尋,提升召回率