diff --git a/docs/adr/ADR-030-intelligent-auto-remediation.md b/docs/adr/ADR-030-intelligent-auto-remediation.md index 1953e0ae..92e2d2d9 100644 --- a/docs/adr/ADR-030-intelligent-auto-remediation.md +++ b/docs/adr/ADR-030-intelligent-auto-remediation.md @@ -1041,3 +1041,63 @@ GET /api/v1/learning/recommendation/{anomaly_key} - Phase 4-5: 核心流程變更,需要嚴格測試 **建議**: 按 Phase 順序實施,每個 Phase 完成後驗證穩定性再進入下一階段。 +--- + + +## 九、2026-04-04 實作完成 (台北時間) + +> **更新者**: Claude Code +> **Commit**: d0f0970, 72d7536, df3ef90 + +### 9.1 根本原因診斷 (19筆 PENDING 清查) + +| 根因 | 說明 | 修復 | +|------|------|------| +| playbooks 表從未建立 | Playbook 庫空白,RAG 永遠無匹配 | phase7_playbooks_table.sql | +| Ollama embedding is_closed=True | 滾動重啟後 http_client 失效,vector_count:0 | _get_http_client() 偵測重建 | +| 9筆殭屍 PENDING (3/26) | mock_fallback CRITICAL 測試記錄 | 直接清除 | + +### 9.2 完成項目 + +| 檔案 | 修改 | 說明 | +|------|------|------| +| `playbook_rag.py` | 新增 `_get_http_client()` | 偵測 is_closed 自動重建 HTTP client | +| `playbook_rag.py` | `embed_playbook()` Bug 修復 | `s.sequence`→`s.step_number`, `s.description`→`s.command` | +| `telegram_gateway.py` | 新增 `ai_model` 欄位 | format/format_with_nemotron 顯示底層模型 | +| `openclaw.py` | proposal_dict 加 `"model"` | 傳入底層模型名稱 | +| `decision_manager.py` | 讀取 `ai_model` 傳入 approval card | 決策路徑完整 | +| `migrations/phase7_playbooks_table.sql` | 新增 | playbooks 表,PRIMARY KEY + 5 GIN 索引 | +| `playbook_service.py` | `_write_to_km()` fire-and-forget | extract_from_incident() 後自動 KM 沉澱 | +| `playbook_service.py` | `_get_rag_service()` 改走工廠 | 每次重建,避免快取 is_closed client | +| `approval_execution.py` | `_write_execution_result_to_km()` | 移出 try/except,保證執行記錄寫入 KM | +| `approval_execution.py` | 冷啟動修復 | 執行成功自動設定 execution_success=True, effectiveness_score=4, status=RESOLVED | +| `approval_execution.py` | skip 路徑 debug→info | 可觀測性提升 | +| Ollama | 刪除 smollm2:135m | 0.3GB CPU 機器不需要的模型 | + +### 9.3 首席架構師 Review 結果 + +| 評分 | 修復項目 | 說明 | +|------|----------|------| +| 初版 21/25 | — | 72d7536 | +| **Critical #1** | KM write task 移出 try/except | 保證無論 learning 成敗都寫 KM | +| **Important #1** | PlaybookService 快取繞過工廠 | 每次走工廠避免 is_closed | +| **Important #2** | Migration 缺 PRIMARY KEY | prod DB 已 ALTER TABLE 補齊 | +| **Important #3** | embed_playbook() s.sequence AttributeError | 修正欄位名稱靜默失敗 bug | +| 修復後 ~25/25 | **PASSED** | df3ef90 | + +### 9.4 完整閉環 + +``` +告警 → AI分析(OpenClaw/Nemotron) → 查Playbook(RAG語意搜尋) +→ 有匹配且LOW風險 → 自動執行 +→ MEDIUM/CRITICAL → Telegram等人工批准 +→ 執行成功 + → _trigger_playbook_extraction(): + 自動設定 execution_success=True, effectiveness_score=4, status=RESOLVED + → Playbook萃取 → 存Redis → KM沉澱(_write_to_km) + → incident_service.resolve() → KM萃取(knowledge_extractor) + → _trigger_learning() 後 → KM執行記錄(_write_execution_result_to_km) +→ 下次相似告警 → Playbook命中(RAG) → 加速決策 +``` + +**狀態**: ✅ 閉環已通 (2026-04-04 台北時間)