docs: LLM 測試評估 + Ollama GPU 問題發現
評估結果: - Ollama 使用 CPU 推理 (VRAM=0GB) - 生成速度 0.45 tok/s (正常 10-20x) - 這是 CI LLM 測試失敗的根因 決策: - ADR-018 三層框架暫緩整合 - 優先修復 Ollama GPU 問題 - 再實施方案 A (seed 參數) 新增: - docs/evaluations/2026-03-26_llm_testing_evaluation.md - feedback_solution_adoption_checklist.md (7問評估清單) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
**發現問題**:
|
||||
|
||||
219
docs/evaluations/2026-03-26_llm_testing_evaluation.md
Normal file
219
docs/evaluations/2026-03-26_llm_testing_evaluation.md
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user