# ADR-067: Ollama 本地 AI 應用五大擴展

**狀態**: Approved  
**日期**: 2026-04-10 (台北時間)  
**決策者**: ogt (統帥)  
**執行者**: Claude Code

---

## 背景

AWOOOI 基礎設施已有兩台 Ollama 主機（111/188）與多個已就緒模型，但 95% 的 AI 能力集中在 NemoClaw 對話與 OpenClaw RCA，其餘模型閒置。pgvector 0.8.2 已在 prod DB 就緒。

## 決策

批准實施五大 Ollama 本地 AI 應用，依優先順序：

| # | 應用 | 模型 | 主機 | Migration |
|---|------|------|------|-----------|
| 1 | RAG 知識庫 | nomic-embed-text (768d) | Ollama 188 | phase28_rag_pgvector.sql |
| 2 | PR 自動審查 | qwen2.5-coder:7b | Ollama 111 | phase29_pr_reviews.sql |
| 3 | Log 異常摘要 | deepseek-r1:14b | Ollama 111 | 無（Redis 快取） |
| 4 | Drift 報告摘要 | qwen2.5:7b-instruct | Ollama 111 | phase30_drift_narrative.sql |
| 5 | 圖片分析 | llava:latest | Ollama 111 | 無 |

## 架構原則（延續 leWOOOgo）

- Router 禁止直接存 DB/Redis
- 每個應用建立獨立 Service + Repository
- 模型配置集中在 models.json（purpose key）
- 雙軌儲存：Redis 熱快取 + PostgreSQL 永久
- 所有 LLM 呼叫需有 timeout + graceful fallback

## 實施時程

- Week 0: 前置確認（pgvector ✅，models.json 新增 purpose keys）
- Week 1 前: 應用 4（Drift 摘要）— 最小改動
- Week 1 後: 應用 3（Log 摘要）
- Week 2 前: 應用 2（PR 審查）
- Week 2-3: 應用 1（RAG pgvector）
- Week 3: 應用 5（圖片分析）

## 衝突評估

- **無衝突**：Sprint 5R 前端重構（ADR-065）獨立進行，不影響後端
- **注意**：應用 4 修改 `drift.py` 背景任務，需確認不影響現有 B4 drift_reports 持久化（已完成）
- **注意**：應用 3 修改 `telegram_gateway.py`（橙區），每次修改前需重讀檔案
- **注意**：Ollama 111 並發管控，deepseek-r1:14b 優先，drift_narrative 最低優先

## D1 集中化完成記錄 (2026-04-11, commit f2c18c4)

models.json v1.3.0：9 個 purpose keys 新增，所有服務 hardcode 消除。

| purpose key | 模型 | 使用服務 |
|-------------|------|---------|
| drift_summary | qwen2.5:7b-instruct | drift_narrator_service |
| drift_intent | qwen2.5:7b-instruct | drift_interpreter |
| log_anomaly | deepseek-r1:14b | log_summary_service |
| code_review | qwen2.5-coder:7b | local_code_review_service |
| image_analysis | llava:latest | image_analysis_service |
| nemoclaw | deepseek-r1:14b | decision_manager |
| playbook_draft | qwen2.5:7b-instruct | decision_manager |
| embedding | nomic-embed-text | embedding_service, knowledge_service |
| rag_generate | qwen2.5:7b-instruct | (RAG 生成備用) |

模型切換方式：修改 `apps/api/models.json` 對應 purpose key，重啟 Pod 生效，不需改代碼。

## 已確認基礎設施

- pgvector: 0.8.2 ✅
- nomic-embed-text: Ollama 111 + 188 ✅
- llava:latest: Ollama 111 ✅
- qwen2.5-coder:7b: Ollama 111 ✅
- qwen2.5:7b-instruct: Ollama 111 ✅
- deepseek-r1:14b: Ollama 111 ✅
