評估結果: - 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>
4.4 KiB
4.4 KiB
LLM 測試策略評估報告
| 屬性 | 值 |
|---|---|
| 評估日期 | 2026-03-26 |
| 評估者 | 首席架構師 |
| 狀態 | 📋 評估中 |
1. 問題定義
現象: CI 中 7 個 LLM 測試失敗
test_model_regression.py: 4 failedtest_prompt_validation.py: 3 failed
根因分析:
| 問題 | 詳情 |
|---|---|
| 測試與生產不一致 | 測試直接呼叫 Ollama API,未使用 OpenClaw Service |
| 缺少確定性參數 | 測試未設定 seed, temperature: 0.0 |
| 字串匹配過嚴 | 使用 lambda 檢查特定子字串存在 |
2. 現有架構盤點
2.1 OpenClaw Service (生產環境)
檔案: src/services/openclaw.py
已有配置:
"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
問題配置:
# 無 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 個測試檔案
# 加入確定性參數
"options": {
"seed": 42, # 固定種子
"temperature": 0.0, # 零溫度
},
"format": "json", # JSON 模式
優點:
- 最小改動
- 與生產環境一致
- 無新增依賴
缺點:
- 仍依賴 Live LLM (CI 需要 Ollama 可用)
- 無法完全消除網路波動
評估: ✅ 推薦 - 第一步
方案 B: 測試呼叫 OpenClaw Service
改動範圍: 修改測試使用 OpenClaw Service
# 直接使用 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 小時)
-
修改
test_model_regression.py:- 加入
seed: 42,temperature: 0.0 - 加入
format: "json"
- 加入
-
修改
test_prompt_validation.py:- 同上
-
調整 validators:
- 改為 JSON Schema 驗證 (與 OpenClaw 一致)
第二步: 驗證效果 (30 分鐘)
- 執行測試 3 次,確認穩定性
- 比較修改前後通過率
第三步: 評估是否需要方案 B/C
- 若方案 A 效果良好 → 完成
- 若仍有問題 → 考慮方案 B 整合測試
- 方案 C 暫緩,待需求更明確時再議
6. ADR-018 處理建議
建議: 將 ADR-018 標記為「評估中」,先實施方案 A
原因:
- 方案 A 更簡單且無新增複雜度
- 未完成「解決方案導入評估 7 問」
- 過度工程化風險
已建立新增代碼處理:
tests/llm_testing/框架已建立- 若方案 A 不足,可作為備用方案
- 但不應立即整合到 CI
7. 決策等待項目
- Ollama 確定性測試結果 - 確認
seed參數是否有效 - 統帥確認 - 是否採用方案 A 先行
8. 後續追蹤
- Ollama seed 測試完成
- 統帥確認方案選擇
- 方案 A 實施
- 效果驗證
- 決定是否需要方案 B/C