Files
ewoooc/docs/adr/ADR-003-local-embedding-on-ollama.md
ogt 1b4f3a7bbe
Some checks failed
CD Pipeline / deploy (push) Failing after 59s
feat: EwoooC 初始化 — 完整專案推版至 Gitea
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml)
- 部署模式: rsync Python 檔案至 188 → docker restart (volume mount)
- Dockerfile/requirements 變動時自動重建 Docker image
- 部署通知: Telegram (開始/成功/失敗)
- 健康檢查: https://mo.wooo.work/health (最多 5 次重試)
- 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 01:21:13 +08:00

79 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADR-003Embedding 本地化到 Ollama 主機
- **Status**: Accepted
- **Date**: 2026-04-18
- **Decision Maker**: 統帥(顧問補充建議第 1 條)
- **Author**: Claude
## Context
ADR-001 把 embedding 工作分配給 Hermes採集層。但 embedding 引擎本身有兩個選項:
- 雲端 APIOpenAI text-embedding-3、Gemini embedding-001、Cohere
- 本地Ollama 上跑 embedding 模型)
目前 Hermes 已在 Ollama 上跑 hermes3:latest主機192.168.0.111 / 192.168.0.188)有 GPU 算力閒置。
## Decision
**Embedding 模型也跑在 Ollama 本地**,禁用雲端 embedding API。
候選模型(擇一):
- **bge-m3**推薦1024 維、多語言、繁中表現好、上下文 8192 token
- nomic-embed-text768 維、英文強、繁中弱
- mxbai-embed-large1024 維、英文最強
**首選 bge-m3**(理由:繁中是 MOMO Pro 主要語言)。
## Alternatives Considered
| 方案 | 拒絕原因 |
|---|---|
| OpenAI text-embedding-3-small | $0.02/1M tokens量大時也燒錢資料外洩風險 |
| Gemini embedding-001 | 配額限制、需要 API key 管理 |
| Cohere embed-multilingual-v3 | 付費、外部依賴 |
## Consequences
### Positive
- **絕對零成本**embedding 量再大都 0 元
- **資料隱私**:商品/業績/客戶相關資訊永不離開內網
- **零延遲**:本地呼叫 < 100ms vs 雲端 500ms+
- **無配額限制**:可一次跑大量 batch半夜重新 embedding 整個 KM
### Negative / Trade-offs
- Ollama 主機 RAM/GPU 壓力增加(需確認硬體容量)
- 若想換模型,需先 pull 到 Ollama 再切換(雲端 API 換模型只改 model_name
- 模型品質可能略低於最新雲端模型(但 bge-m3 已是業界一流)
## Implementation Notes
```bash
# 在 Ollama 主機 pull 模型
ollama pull bge-m3:latest
# Hermes 服務內呼叫
curl http://192.168.0.111:11434/api/embeddings \
-d '{"model":"bge-m3","prompt":"商品策略矩陣分析"}'
```
```python
# services/openclaw_learning_service.py 內
def embed_text(text: str) -> list[float]:
r = requests.post(
f"{OLLAMA_HOST}/api/embeddings",
json={"model": "bge-m3", "prompt": text},
timeout=30,
)
return r.json()["embedding"] # 1024 dim
```
對應 pgvector 表設計:
```sql
ALTER TABLE ai_insights ADD COLUMN embedding vector(1024);
```
## Related ADRs
- ADR-001三 Agent 分工Hermes 採集層)
- ADR-002pgvector 儲存層