Files
awoooi/docs/evaluations/2026-03-26_llm_testing_evaluation.md
OG T a9f8ad56c1 chore: 未提交變更整理 (API core + docs + scripts)
API 核心:
- constants.py: 系統常量定義
- unit_of_work.py: Unit of Work 模式
- incident_approval_service.py: Incident-Approval 同步服務

文檔更新:
- LOGBOOK.md: 進度更新
- AWOOOI_AGENTIC_WORKSPACE_ROADMAP.md: 路線圖
- 2026-03-26_llm_testing_evaluation.md: LLM 測試評估
- phase5_telemetry_architecture.md: 遙測架構
- SECRETS_REFERENCE.md: 密鑰參考

配置/腳本:
- Skill 02 v1.x: leWOOOgo 後端更新
- .dependency-cruiser.cjs: 依賴規則
- demo-multisig-flow.sh: 演示腳本

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 19:10:12 +08:00

243 lines
5.3 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.
# LLM 測試策略評估報告
| 屬性 | 值 |
|------|-----|
| **評估日期** | 2026-03-26 |
| **評估者** | 首席架構師 |
| **狀態** | ✅ 方案 A 已實施 |
---
## 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. 後續追蹤
- [x] Ollama seed 測試完成 (2026-03-26)
- [x] 統帥確認方案選擇 (2026-03-26 批准方案 A)
- [x] 方案 A 實施 (2026-03-26)
- `test_model_regression.py`: 加入 `temperature: 0.0`, `seed: 42`
- `test_prompt_validation.py`: 加入 `temperature: 0.0`, `seed: 42`
- System Prompt 強化繁體中文指令
- [x] CPU 模式超時調整 (2026-03-26 統帥批准)
- 超時從 120 秒 → 300 秒
- 計算基準: 0.45 tok/s × 300 tokens = 666 秒
- [x] 繁體中文修復 (2026-03-26)
- OpenClaw System Prompt v7.0 → v7.1
- 加入 Language Requirement 章節
- 明確禁止簡體字
- [ ] 效果驗證 (待 CI 執行)
- [ ] 決定是否需要方案 B/C
## 9. GPU 診斷結果 (2026-03-26)
**192.168.0.188 無 GPU 硬體**
| 檢查項目 | 結果 |
|---------|------|
| `lspci \| grep nvidia` | 無輸出 |
| NVIDIA Driver | 未安裝 |
| NVIDIA Libs | 未找到 |
**結論**: 此伺服器為純 CPU 機器Ollama 以 CPU 模式運行 (0.45 tok/s)。
需評估是否遷移到有 GPU 的主機。