docs(adr+skills): ADR-092 AI Decision LLM 層 + Skill 03 更新統一 LLM pattern

首席架構師 2026-04-19 Review 92/100 Grade A 後的完整文檔化:

**ADR-092 新建 (AI Decision LLM 擴展架構)**:
  - 背景: 14 scanner 中 8 個純 threshold,違反 feedback_ai_autonomous_direction
  - 決策: 4 個 LLM service + 統一 pattern (llm_json_parser)
  - 約束 5 鐵律: 失敗不 raise / AI 只建議不動作 / openclaw 統一入口 /
                aol 留痕 / 繁中 + JSON schema
  - 節流: Daily cron + 事件觸發 (red_ratio>30% 且 scanned>=50)
  - autonomy_score 0-100 量化追蹤
  - 實作成果 + P1 剩餘 + 回滾計畫

**Skill 03 openclaw-cognitive-expert 更新**:
  - 新增「2026-04-19 AI Decision LLM 擴展層」章節
  - Pattern code 範本 (不是每次重寫 3-path parse)
  - 4 LLM service 對照表 + required_key
  - 擴加 5 鐵律清單
  - autonomy_score 追蹤使用說明

下 session Claude 接手時能快速看到 LLM service pattern,不會重複造輪子.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-04-19 22:42:58 +08:00
parent 55486ce2fd
commit 712d146129
2 changed files with 199 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
# ADR-092: AI Decision Layer — LLM 擴展架構
**狀態**: Accepted
**日期**: 2026-04-19 (台北時區)
**作者**: ogt + Claude Opus 4.7 (1M context, 亞太)
**關聯**: ADR-090 盲區治理 / MASTER §3 D1-D6 / feedback_ai_autonomous_direction
---
## 背景
2026-04-19 session 完成 Phase 7 盲區治理後14 個新 scanner8 張 0 writer 表全活化),首席架構師 Review 發現嚴重 Gap
- **AI 層淺**14 個新 scanner 中 **8 個純 thresholdrule-based**,只 Hermes 1 個真用 LLM 做決策
- **autonomy_score 實測**63/100starter 起步級),`ai_diversity` 子項僅 6/20
- **統帥鐵律**:「朝 AI 自主化方向」— infrastructure 不等於 AI
違反 `feedback_ai_autonomous_direction.md` 核心原則:「禁寫死規則做最終決策」。
---
## 決策
### 1. AI Decision 層的 4 個 LLM Service本 session 完成)
| Service | LLM 判斷 required_key | 觸發條件 | 職責 |
|---|---|---|---|
| **hermes_rule_quality** | `recommended_actions` | 每日 04:00 Taipei | 分析 noise_rate > 0.5 rule 的假報真因 + 改進建議 |
| **capacity_forecaster** | `priority_actions` | 每日 05:00 Taipeipredict_linear 命中)| 分析 7d 容量預測高風險 host 的修復策略 |
| **compliance_scanner** | `posture_grade` | 每日 03:00 Taipei有 warning/violation| 產整體 compliance posture 評級 + top 3 action |
| **coverage_evaluator** | `worst_dimension` | 每 1hred_ratio > 30% 且 scanned > 50| 分析 7 維 red 缺口 + 補覆蓋建議 |
### 2. LLM 調用統一 patternservices/llm_json_parser.py
**原問題**4 個 LLM scanner 各自重複 3-path JSON parse 邏輯(~80 行 × 4 = 320 行)
**新 pattern**`parse_llm_json_response(text, required_key, logger_context)`
```python
# 統一 3-path fallback
Path 1: markdown fence + 直接 JSON required_key
Path 2: NemoTron wrapper description/action_title/reasoning 內嵌 JSON
Path 3: 所有失敗 return None + logger.warning
```
所有 LLM service 都用此 helper未來擴加 LLM service 直接呼叫。
### 3. LLM Service 架構約束(鐵律)
**必須遵守**
1. **失敗永不 raise**LLM 掛掉/parse 失敗 → return None → 呼叫者 fallback 硬編規則
2. **AI 只建議不動作**:所有 LLM 輸出都寫 `requires_human_decision=True`,推 Telegram 等人工
3. **openclaw 統一入口**:不直接呼叫 Ollama/NVIDIA/Gemini`get_openclaw().call(prompt)` 多 provider fallback
4. **aol 留痕**LLM 結果進 `automation_operation_log.output.llm_analysis`
5. **繁中 + JSON schema**prompt 明確 required_keysystem prompt 要求 LLM 產純 JSON
**禁止**
- 硬編 threshold 做最終決策(只做「觸發討論」)
- LLM 結果直接執行破壞性動作(必過人工)
- 內嵌多 provider 判斷(統一走 openclaw
### 4. 觸發條件設計原則
**節流避免 token 成本爆炸**
- Daily cron每日一次compliance/forecaster/hermes
- 事件觸發coverage 只在 `red_ratio > 30% 且 scanned >= 50` 才跑 LLM
- 避免 bootstrap 首次必觸發的浪費
### 5. autonomy_score 量化追蹤
新增 `GET /api/v1/aiops/kpi` 回 5 子項 × 20 分總分0-100
- `asset_coverage`: green 比例 × 20
- `rule_quality`: 1 - (noisy/total) × 20
- `capacity_health`: critical 扣 10 / warning 扣 3
- `automation_flow`: log10(24h_ops) 標準化 × 20
- `ai_diversity`: ai_generated rules + op_type 多樣性 × 20
Grade: mature(90+) / in_progress(70-90) / starter(50-70) / initial(<50)
---
## 實作成果
### 達成指標
- LLM decision service: **1/9 → 4/9**
- autonomy_score: 未量化 → **63/100 (starter)** 可持續追蹤
- LLM JSON parse 重複碼: **320 行 → 1 份共用 helper**90 行)
### Commits
- `ba18ad2` Hermes LLM 升級Hermes 從 threshold 改 LLM
- `d6b854a` Gap 3.1 capacity_forecaster LLM
- `f6cb938` Gap 3.2 compliance_scanner LLM
- `2f5cab2` Gap 3.3 coverage_evaluator LLM
- `fa643eb` P1 重構llm_json_parser helper + coverage 雙條件
### 相關檔案
- `apps/api/src/services/llm_json_parser.py`(共用 helper
- `apps/api/src/services/openclaw.py`(多 provider
- `apps/api/src/jobs/{hermes_rule_quality,capacity_forecaster,compliance_scanner,coverage_evaluator}_job.py`
- `apps/api/src/services/aiops_kpi_service.py`autonomy_score 計算)
- `apps/api/src/api/v1/aiops_kpi.py`KPI endpoint
---
## 後續工作(下 session
### P1 剩餘優化(首席架構師 Review 指出)
1. **Prometheus HTTP helper 抽出** — 5 scanner 重複 httpx + 錯誤處理 pattern
2. **14 scanner first_delay 錯開** — 避免並行啟動搶 DB pool建議 60/90/120/180 階梯)
3. **LLM budget guard**`aiops_kpi_service``llm_call_count_24h` 指標超過閾值 Telegram 告警
4. **asset_scanner 918 行拆分**`providers/` + `writers/` 兩層
### 可擴展 LLM 方向
- `rule_catalog_sync`: 新規則 import 時 LLM 驗證 expr 合理性
- `asset_change_tracker`: 重大 lifecycle 變化時 LLM 評估爆炸半徑
- `drift_interpreter` (既有): 升級更精細 prompt
---
## 回滾計畫
若 LLM service 造成成本或穩定性問題,可分層關閉:
1. 改 config `AIOPS_LLM_ENABLED=false`(需新增,目前未實作)
2. 或 kubectl exec 進 Pod `kill` 單個 loop task
3. 各 LLM `try/except return None → fallback` 原設計保護主流程不受影響
---
## 相關 ADR
- ADR-067 Phase 30 AI 五大應用OpenClaw + drift_narrator + runbook_generator 等原 LLM service
- ADR-081 PreDecisionInvestigator + EvidenceSnapshot
- ADR-083 學習閉環重建
- ADR-090 監控盲區治理 + 自動化覆蓋矩陣11 張 + 8 張新表)