# M4 Embedding 效能比較：Ollama vs llama.cpp

**作者**：M4  
**日期**：2026-05-07  
**測試環境**：M4 (Mac Mini, M4, 16GB, 10 cores)  

---

## 測試結果

| 方案 | Model | Dim | short 11B | medium 40B | long 1000B |
|------|-------|-----|-----------|------------|-----------|
| **llama.cpp** | bge-m3 Q8_0 (605MB) | 1024 | **63ms** | **80ms** | **220ms** |
| Ollama | mxbai-embed-large (669MB) | 1024 | 678ms* / 77ms | **77ms** | 284ms |
| Ollama | bge-m3 (1.2GB) | 1024 | 1824ms* / 125ms | 125ms | 251ms |

> *第一次呼叫包含 model loading 時間

---

## 分析

1. **llama.cpp + bge-m3 最快**（63-220ms），且無首次 loading 延遲
2. **Ollama 首次 loading 慢**（678ms~1.8s），但之後穩定於 77-284ms
3. **兩者效能接近**（77-284ms vs 63-220ms），差異在日常使用無感

## 建議

| 使用場景 | 建議方案 | 原因 |
|---------|---------|------|
| 單次 embedding（如 search query） | Ollama（current） | 已有整合，無需改 code |
| 批次大量 embedding | llama.cpp | 無 model loading 開銷 |
| 多語言需求 | bge-m3（Ollama 或 llama.cpp） | 支援中英日等多語 |
| 一般英文 | mxbai-embed-large（Ollama） | 品質穩定，現行預設 |

**結論**：維持 Ollama 為主要 embedding 方案。llama.cpp bge-m3 作為備用／批次處理方案。

M4 的 llama.cpp bge-m3 embedding server 已在 port 8082 運作中。
