RAG(Retrieval-Augmented Generation)由 5 個元件組成。這篇從文件進來到 LLM 回應,把整個架構完整拆解,每個元件的選型與調校都教給您。
RAG 完整流程
1. 文件 → [Loader] → 文字
2. 文字 → [Chunker] → 切片
3. 切片 → [Embedding] → 向量
4. 向量 → [Vector DB] → 儲存
─────────────────(離線索引完成)─────────────────
5. 用戶問題 → [Embedding] → 問題向量
6. 問題向量 → [Vector DB Search] → Top-K 相似切片
7. Top-K + 問題 → [Reranker] → 重排序
8. 排序後 + 問題 → [LLM] → 自然語言回答
元件 1:Document Loader
把不同格式檔案轉為文字。
- PDF:PyMuPDF(純文字快)/ Unstructured(混合內容好)
- Word:python-docx
- Excel:openpyxl + 自製 schema 描述
- 網頁:BeautifulSoup + Readability
- 圖片:Gemini Vision OCR
元件 2:Chunker(切片)
切得太大召回差、太小失語境。三種策略:
- Fixed Size:每塊固定 token 數,最簡單
- Semantic:用 embedding 找語義邊界
- Hierarchical:多層切(章 → 節 → 段)
實務建議:先用 Fixed 500 tokens + overlap 50 起步。
詳見 文件切割策略完整指南。
元件 3:Embedding
把文字轉為向量。常用:
- OpenAI text-embedding-3-large(1536/3072 維、中文好)
- Gemini text-embedding-004(768 維、便宜)
- Cohere embed-v3(多語強)
- BGE-M3(開源、可自架)
詳見 Embedding 模型選擇指南。
元件 4:Vector Database
| 選擇 | 適合 |
|---|---|
| pgvector | 已有 PostgreSQL、< 100 萬筆 |
| Qdrant | 自架、效能好、最常見 |
| Pinecone | SaaS、不想維運 |
| Weaviate | 混合搜尋強 |
詳見 向量庫完整比較。
元件 5:Retrieval + Reranking
取向量庫 Top-K(通常 10–20),然後用 Reranker 重新排序。
- Reranker 模型:Cohere Rerank / BGE Reranker
- 把最相關的 3–5 個切片送給 LLM
實測:加 Reranker 通常讓最終答案準確度提升 10–30%。
元件 6:LLM Generation
把切片 + 問題餵給 LLM。關鍵設計:
- Prompt 結構清楚(指令 + Context + 問題)
- 要求 LLM 引用來源(避免幻覺)
- 找不到答案時要 LLM 說「不知道」
建議架構(中小企業)
文件 (PDF/Word)
↓
PyMuPDF + Unstructured
↓
Recursive Character Splitter (500 tokens, 50 overlap)
↓
Gemini text-embedding-004
↓
Qdrant (Docker 自架)
↓
Top-10 → BGE Reranker → Top-3
↓
Gemini 2.5 Flash + Citation Prompt
↓
回答 + 來源連結
這套架構月成本 NT$2,000–5,000,可服務 10,000 次/月查詢。
進階:評估與監控
RAG 上線後,每月看 3 個指標:
- Hit Rate:問題能找到相關切片的比例
- Faithfulness:答案是否忠於切片內容
- Relevance:答案是否真的回答了問題
詳見 RAG 評估指標完整指南。
常見錯誤
- 沒做 chunk overlap → 切片邊界資訊丟失
- 沒做 metadata 過濾 → 跨部門資訊混雜
- 沒做 Reranker → 命中率低
- 沒寫 Citation Prompt → LLM 幻覺
- 沒做評估 → 不知道哪裡需要優化