# 📝 Day 1 RAG 學習總結筆記

> **學習日期**：2024-11-04  
> **學習時間**：8小時密集學習  
> **完成狀態**：✅ 完成所有核心任務

---

## 🎯 學習目標達成

- ✅ 建立可運作的 RAG 最小原型
- ✅ 理解「檢索-增強-生成」三階段運作
- ✅ 深入理解 Embedding 向量化原理
- ✅ 完成參數調校實驗並觀察影響

---

## 🏗️ 建構的 RAG 系統架構

### 技術棧組合
```
📊 完整 RAG 流程：
問題輸入 → HuggingFace Embedding → ChromaDB 檢索 → Gemini 生成 → 答案輸出
```

**核心組件：**
- **Embedding**: HuggingFace `paraphrase-multilingual-MiniLM-L12-v2` (384維, CPU優化)
- **向量資料庫**: ChromaDB (本地持久化)
- **LLM**: Google Gemini 2.5 Flash (雲端API)
- **框架**: LangChain + LCEL (現代化鏈式組合)

### 檔案結構
```
rag-interview-prep/
├── simple_rag.py              # 核心 RAG 系統
├── embedding_experiment.py    # Embedding 深度實驗
├── parameter_experiments.py   # 參數調校實驗
├── data/knowledge.txt         # 知識庫 (164字)
├── db/                       # ChromaDB 向量資料庫
└── .env                      # API 金鑰配置
```

---

## 🔬 核心實驗結果與發現

### 實驗 1：Embedding 向量觀察
```
向量維度：384 維
數值範圍：-1.021 ~ 0.722
前10個數值示例：[-0.100, -0.038, -0.350, -0.137, -0.210, ...]
```

### 實驗 2：語意相似度測試
**同義詞識別能力：**
- `"Python 程式設計"` vs `"Python 程式開發"` → **0.9615** (極高相似)
- `"Python 程式設計"` vs `"Java 程式設計"` → **0.4194** (中等相關)
- `"Python 程式設計"` vs `"我喜歡吃蘋果"` → **0.0485** (幾乎無關)

### 實驗 3：跨語言理解能力
**中英文概念對應：**
- `"我喜歡程式設計"` ↔ `"I love programming"` → **0.9081**
- `"資料科學很有趣"` ↔ `"Data science is interesting"` → **0.9651**
- `"機器學習是未來趨勢"` ↔ `"Machine learning is the future trend"` → **0.9562**

**結論：多語言模型能準確理解不同語言的相同概念！**

### 實驗 4：RAG 檢索測試
**問題：** `"這個人會寫程式嗎？"`

**檢索排名結果：**
1. `[0.3126] Experienced in API design` 
2. `[0.3058] 有 API 設計經驗`
3. `[0.2514] 擅長 Python 後端開發`
4. `[0.0014] 喜歡吃漢堡` (無關內容被正確過濾)

---

## ⚙️ 參數配置最佳實踐

### 發現的問題與解決方案

**問題1：重複檢索**
- **現象**：檢索到 3 個相同文件片段
- **原因**：knowledge.txt (164字) < chunk_size (500字) → 只產生 1個chunk
- **解決**：調整 `chunk_size=80, overlap=10, k=2`

**問題2：LangChain 版本相容**
- **現象**：`RetrievalQA` import 錯誤
- **解決**：改用現代 LCEL 語法 + `RunnablePassthrough`

**問題3：Gemini API 模型名稱**
- **現象**：`gemini-1.5-flash` 404錯誤
- **解決**：使用正確名稱 `gemini-2.5-flash`

### 推薦參數配置
```python
# 文件切分
chunk_size = 100-200      # 根據文件複雜度調整
chunk_overlap = 10-20     # 保持上下文連貫
separators = ["\n\n", "\n", "。", "！", "？"]

# 檢索配置  
top_k = 2-3              # 平衡資訊完整度與雜訊
temperature = 0          # 確定性回答

# CPU 優化
model_kwargs = {'device': 'cpu'}  # VM 環境必要設定
```

---

## 💡 深度理解與洞察

### RAG vs 傳統搜尋
| 比較項目 | 傳統關鍵字搜尋 | RAG 語意搜尋 |
|---------|---------------|-------------|
| 匹配方式 | 精確字串匹配 | 語意相似度 |
| 同義詞處理 | ❌ 無法處理 | ✅ 智能識別 |
| 跨語言能力 | ❌ 各語言獨立 | ✅ 概念理解 |
| 上下文理解 | ❌ 字面意思 | ✅ 深層語意 |

### RAG 分層架構理解
```
🧠 概念澄清：RAG ≠ 單一模型
┌─────────────────────────────────────┐
│ 檢索層 (Retrieval)                    │
│ • HuggingFace Embedding (本地)       │ 
│ • ChromaDB 向量搜尋 (本地)            │
├─────────────────────────────────────┤
│ 增強層 (Augmented)                   │
│ • 組裝 Prompt (本地)                 │
│ • 上下文注入 (本地)                   │
├─────────────────────────────────────┤
│ 生成層 (Generation)                  │
│ • Google Gemini API (雲端)           │
│ • 自然語言生成 (雲端)                 │
└─────────────────────────────────────┘
```

**關鍵認知：Gemini 從未「檢索」，只負責「生成」！**

---

## 🎯 面試準備要點

### 技術問答準備
**Q: 請解釋 RAG 的工作原理？**
> RAG 包含三階段：1) Retrieval：用 Embedding 將問題轉向量，在向量資料庫搜尋相似文件；2) Augmented：將檢索到的相關文件組裝進 Prompt；3) Generation：LLM 基於增強後的上下文生成回答。這解決了 LLM 無法取得即時或私有資料的限制。

**Q: 為什麼不直接讓 LLM 記住所有資料？**
> 四個限制：1) Context Window 限制（即使 128K tokens 也無法容納大量文件）；2) 成本問題（每次查詢都傳送全部資料費用昂貴）；3) 注意力稀釋（大量文字降低 LLM 專注度）；4) 檢索精準度（先篩選相關文件再回答更準確）。

**Q: Embedding 如何處理語言差異？**
> 使用多語言預訓練模型（如 paraphrase-multilingual-MiniLM），將不同語言的相同概念映射到向量空間的相近位置。實驗顯示中英文技術概念相似度可達 0.85-0.96。

### 實作經驗重點
- ✅ 成功解決 VM 環境 CPU 優化問題
- ✅ 熟悉現代 LangChain LCEL 語法
- ✅ 理解參數調校對效果的實際影響  
- ✅ 具備 Embedding + LLM 混合架構經驗

---

## 🚀 下一步學習規劃

### Day 2 進階目標
- [ ] 改進 Prompt Engineering
- [ ] 實作 Hybrid Search (BM25 + Vector)
- [ ] 加入 Reranking 機制
- [ ] 評估與測試框架

### 技術深化方向
- [ ] 探索不同 Embedding 模型比較
- [ ] 學習向量資料庫最佳化
- [ ] 研究 RAG 評估指標 (RAGAS)
- [ ] 建構生產級 RAG 系統

---

## 📊 學習成果自評

| 學習目標 | 完成度 | 掌握程度 | 備註 |
|---------|-------|---------|-----|
| RAG 基礎概念 | ✅ 100% | ⭐⭐⭐⭐⭐ | 清楚理解三階段分工 |
| Embedding 原理 | ✅ 100% | ⭐⭐⭐⭐⭐ | 實驗驗證語意搜尋能力 |
| 系統建構能力 | ✅ 100% | ⭐⭐⭐⭐ | 成功建立端到端系統 |
| 參數調校經驗 | ✅ 100% | ⭐⭐⭐⭐ | 了解關鍵參數影響 |
| 問題排除能力 | ✅ 100% | ⭐⭐⭐⭐ | 解決版本相容等問題 |

**總體評價：🏆 Day 1 目標完全達成，具備 RAG 系統開發基礎能力！**

---

*本筆記記錄了從零到一建構 RAG 系統的完整過程，包含理論理解、實作經驗、問題解決和深度洞察，為後續進階學習奠定堅實基礎。*