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

5.3 KiB
Raw Blame History

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

已有配置:

"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 小時)

  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 測試完成 (2026-03-26)
  • 統帥確認方案選擇 (2026-03-26 批准方案 A)
  • 方案 A 實施 (2026-03-26)
    • test_model_regression.py: 加入 temperature: 0.0, seed: 42
    • test_prompt_validation.py: 加入 temperature: 0.0, seed: 42
    • System Prompt 強化繁體中文指令
  • CPU 模式超時調整 (2026-03-26 統帥批准)
    • 超時從 120 秒 → 300 秒
    • 計算基準: 0.45 tok/s × 300 tokens = 666 秒
  • 繁體中文修復 (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 的主機。