diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 1cc04f1c..176b9d83 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -5,7 +5,7 @@ --- -## 📍 當前狀態 (2026-03-26 11:45 台北) +## 📍 當前狀態 (2026-03-26 12:30 台北) | 項目 | 狀態 | |------|------| @@ -15,8 +15,27 @@ | **Phase 16** | 🔄 R1.3 驗證期至 2026-03-27 16:04 | | **Phase 18.1** | 🟢 **5/7 完成 (ADR-016 + 工具函數)** | | **Phase 18.2** | ⬜ E2E 腳本優化待開始 | +| **LLM 測試** | 🔴 **Ollama CPU 模式 - 需修復 GPU** | | **首席架構師審查** | ✅ **發現 kubectl 指令無效問題** | +### 🔴 2026-03-26 Ollama 伺服器問題 (Day 8 中午 12:30) + +**問題**: CI LLM 測試全部超時失敗 + +**根因**: +- Ollama (192.168.0.188) 使用 **CPU 推理** +- VRAM = 0 GB (未載入 GPU) +- 生成速度: 0.45 tok/s (正常應 10-20 tok/s) + +**待修復**: 需手動檢查 GPU 驅動/CUDA + +**決策**: +- ADR-018 三層框架暫緩整合 +- 先修復 Ollama GPU 問題 +- 再實施方案 A (加 seed 參數) + +--- + ### 🆕 2026-03-26 Phase 18 E2E Hardening 啟動 (Day 8 上午 11:20) **發現問題**: diff --git a/docs/evaluations/2026-03-26_llm_testing_evaluation.md b/docs/evaluations/2026-03-26_llm_testing_evaluation.md new file mode 100644 index 00000000..34132809 --- /dev/null +++ b/docs/evaluations/2026-03-26_llm_testing_evaluation.md @@ -0,0 +1,219 @@ +# LLM 測試策略評估報告 + +| 屬性 | 值 | +|------|-----| +| **評估日期** | 2026-03-26 | +| **評估者** | 首席架構師 | +| **狀態** | 📋 評估中 | + +--- + +## 1. 問題定義 + +**現象**: CI 中 7 個 LLM 測試失敗 +- `test_model_regression.py`: 4 failed +- `test_prompt_validation.py`: 3 failed + +**根因分析**: + +| 問題 | 詳情 | +|------|------| +| 測試與生產不一致 | 測試直接呼叫 Ollama API,未使用 OpenClaw Service | +| 缺少確定性參數 | 測試未設定 `seed`, `temperature: 0.0` | +| 字串匹配過嚴 | 使用 lambda 檢查特定子字串存在 | + +--- + +## 2. 現有架構盤點 + +### 2.1 OpenClaw Service (生產環境) + +**檔案**: `src/services/openclaw.py` + +**已有配置**: +```python +"options": { + "num_predict": 1024, + "temperature": 0.1, # ← 已設定低溫度 + "top_p": 0.9, +}, +"format": "json", # ← 已啟用 JSON 模式 +``` + +**結論**: 生產環境已有穩定配置,測試應該復用 + +### 2.2 測試檔案 (問題所在) + +**檔案**: `tests/test_model_regression.py`, `tests/test_prompt_validation.py` + +**問題配置**: +```python +# 無 seed +# 無 temperature 設定 +# 無 format: json +response = await client.post( + f"{OLLAMA_URL}/api/generate", + json={ + "model": model, + "prompt": prompt, + "stream": False, + # 缺少 options + }, +) +``` + +**結論**: 測試未使用生產配置,導致不一致 + +--- + +## 3. 解決方案比較 + +### 方案 A: Ollama 確定性參數 (最小改動) + +**改動範圍**: 僅修改 2 個測試檔案 + +```python +# 加入確定性參數 +"options": { + "seed": 42, # 固定種子 + "temperature": 0.0, # 零溫度 +}, +"format": "json", # JSON 模式 +``` + +**優點**: +- 最小改動 +- 與生產環境一致 +- 無新增依賴 + +**缺點**: +- 仍依賴 Live LLM (CI 需要 Ollama 可用) +- 無法完全消除網路波動 + +**評估**: ✅ **推薦 - 第一步** + +--- + +### 方案 B: 測試呼叫 OpenClaw Service + +**改動範圍**: 修改測試使用 OpenClaw Service + +```python +# 直接使用 OpenClaw Service +from src.services.openclaw import get_openclaw + +openclaw = get_openclaw() +result = await openclaw.analyze_alert(...) +``` + +**優點**: +- 測試生產代碼路徑 +- 配置自動同步 +- 更接近真實場景 + +**缺點**: +- 需要更多設定 (Redis, Settings) +- 增加測試複雜度 + +**評估**: ⭕ 可考慮 - 整合測試 + +--- + +### 方案 C: 三層測試框架 (ADR-018 原提案) + +**改動範圍**: 新增完整測試框架 + +**優點**: +- 完整的測試分層 +- 支援 Golden Response Mock +- 語意相似度測試 + +**缺點**: +- 大量新增代碼 (~1000 行) +- 增加維護成本 +- 可能與現有測試衝突 +- 過度工程化風險 + +**評估**: ❌ 暫緩 - 先嘗試方案 A + +--- + +## 4. 衝突檢測 + +### 4.1 與現有 ADR 衝突 + +| ADR | 檢查結果 | +|-----|---------| +| ADR-006 AI Fallback | ✅ 無衝突 | +| ADR-015 MCP 模組化 | ✅ 無衝突 | + +### 4.2 與現有 Memory 衝突 + +| Memory | 檢查結果 | +|--------|---------| +| feedback_no_mock_testing.md | ⚠️ **注意**: 禁止 Mock,方案 A/B 符合 | +| feedback_modular_architecture.md | ✅ 方案 B 更符合 | + +### 4.3 與現有 Skills 衝突 + +無直接衝突 + +--- + +## 5. 推薦行動 + +### 第一步: 方案 A - 最小改動 (1 小時) + +1. 修改 `test_model_regression.py`: + - 加入 `seed: 42`, `temperature: 0.0` + - 加入 `format: "json"` + +2. 修改 `test_prompt_validation.py`: + - 同上 + +3. 調整 validators: + - 改為 JSON Schema 驗證 (與 OpenClaw 一致) + +### 第二步: 驗證效果 (30 分鐘) + +- 執行測試 3 次,確認穩定性 +- 比較修改前後通過率 + +### 第三步: 評估是否需要方案 B/C + +- 若方案 A 效果良好 → 完成 +- 若仍有問題 → 考慮方案 B 整合測試 +- 方案 C 暫緩,待需求更明確時再議 + +--- + +## 6. ADR-018 處理建議 + +**建議**: 將 ADR-018 標記為「評估中」,先實施方案 A + +**原因**: +1. 方案 A 更簡單且無新增複雜度 +2. 未完成「解決方案導入評估 7 問」 +3. 過度工程化風險 + +**已建立新增代碼處理**: +- `tests/llm_testing/` 框架已建立 +- 若方案 A 不足,可作為備用方案 +- 但不應立即整合到 CI + +--- + +## 7. 決策等待項目 + +1. **Ollama 確定性測試結果** - 確認 `seed` 參數是否有效 +2. **統帥確認** - 是否採用方案 A 先行 + +--- + +## 8. 後續追蹤 + +- [ ] Ollama seed 測試完成 +- [ ] 統帥確認方案選擇 +- [ ] 方案 A 實施 +- [ ] 效果驗證 +- [ ] 決定是否需要方案 B/C