# AWOOOI Human-in-the-Loop 規格書 > **文件類型**: 人工介入標準操作程序(Human-in-the-Loop Specification) > **版本**: v1.0 > **建立日期**: 2026-04-14(台北時間) > **建立者**: Claude Sonnet 4.6(首席架構師)+ 統帥確認 > **核心問題**: AI 判斷錯了、超時沒決定、或系統失控時,人類如何接管? --- ## 0. 設計哲學 > **AI 是副駕駛,統帥是機長。** AWOOOI AIOps 的設計原則: - AI **永遠可以被人類覆蓋**,任何時候 - **高風險操作**(P0/P1)必須人工確認,不例外 - AI 超時或信心不足時,系統**主動交還控制權**,不沉默失敗 - **Kill Switch** 永遠可用,一鍵讓 AI 停止所有自動操作 --- ## 1. 人工介入觸發條件(When) ### 觸發矩陣 | 情況 | 觸發條件 | 系統行為 | 介入方式 | |------|---------|---------|---------| | **HITL-1** | 風險等級 P0(CRITICAL) | 強制人工審核 | Telegram 審核卡 | | **HITL-2** | 風險等級 P1(HIGH) | 強制人工審核 | Telegram 審核卡 | | **HITL-3** | AI 信心度 < 0.65 | 無法自動執行 | TYPE-4 通知,等人決定 | | **HITL-4** | LLM 超時(> 25s) | 降級 Expert System | Expert System 決策,低信心 → 人工 | | **HITL-5** | 破壞性操作檢測 | 強制升級為人工 | TYPE-3 審核卡,含警告標示 | | **HITL-6** | 審核逾時(> 30 分鐘)| 自動升級通知 | P0 告警發至統帥 + SRE 群組 | | **HITL-7** | 自動修復連續失敗 2 次 | 停止重試 | TYPE-4 通知,等人接手 | | **HITL-8** | SLO-1 < 50%(連續 2h) | 飛輪異常 | TYPE-8M 告警,建議暫停自動修復 | | **HITL-9** | Kill Switch 啟動 | 立即凍結所有自動操作 | 無自動行為,等人工重啟 | ### 破壞性操作關鍵字(HITL-5 觸發清單) 以下任一 kubectl 命令出現 → 強制人工審核,不論信心度: ``` scale ... --replicas=0 ← 縮容至零(服務停止) delete pod ← 刪除 Pod(短暫中斷) delete deployment ← 刪除部署(資料風險) delete pvc ← 刪除持久磁碟(資料永久消失) delete namespace ← 刪除命名空間(災難性) rm -rf ← 主機層刪除(絕對禁止) DROP TABLE ← 資料庫破壞性操作(絕對禁止) ``` --- ## 2. 誰來介入(Who) ### 介入層級 ``` Level 1 — 統帥(最終決策者) 角色: ogt(系統擁有者) Telegram: AwoooI SRE戰情室群組(SRE_GROUP_CHAT_ID) 負責: 所有 P0/P1 審核、Kill Switch、重大策略決定 Level 2 — SRE On-call 角色: SRE 戰情室成員 Telegram: SRE 群組(SRE_GROUP_CHAT_ID) 負責: P2 例行審核、監控告警響應 Level 3 — AI 系統(降級自動處理) 角色: OpenClaw + Expert System 負責: P3(低風險)自動執行,無需人工 ``` ### 當前實際狀態(2026-04-14) ``` 統帥 = Level 1 + Level 2(一人承擔所有層級) AI = Level 3(P3 自動,P0/1/2 部分自動) ``` --- ## 3. 怎麼介入(How) ### 3.1 Telegram 審核卡操作 當系統發送 TYPE-3 審核卡到 AwoooI SRE戰情室群組: ``` ╔══════════════════════════════════════╗ ║ 🔧 需要您的決策 ║ ║ ║ ║ 告警: KubePodCrashLooping ║ ║ 目標: awoooi-api @ awoooi-prod ║ ║ 風險: 🟡 MEDIUM ║ ║ AI信心: 82% ║ ║ 建議動作: kubectl rollout restart ║ ║ deployment/awoooi-api ║ ║ 影響估計: ~30s 服務中斷 ║ ║ ║ ║ [ ✅ 批准執行 ] [ ❌ 拒絕 ] ║ ║ [ 🔍 查看詳情 ] [ 📋 Postmortem ] ║ ╚══════════════════════════════════════╝ ``` **批准後**:系統立即執行,並發送執行結果通知 **拒絕後**:Incident 標記為 `human_rejected`,不再自動重試 **不操作**:30 分鐘後觸發 HITL-6(逾時升級) ### 3.2 Fail-safe 逾時行為(HITL-6 細節) ``` 審核卡發出後: 0 分鐘: 審核卡發送到 SRE 戰情室群組 15 分鐘: 提醒訊息(同一個群組): "⚠️ 此審核已等待 15 分鐘,請盡快處理" 30 分鐘: 升級告警發送到 SRE 戰情室群組: "🔴 審核逾時!Incident #XXX 已等待 30 分鐘未處理 若不處理,系統將在 5 分鐘後自動標記為 ESCALATED" 35 分鐘: Incident 狀態 → ESCALATED 記錄到 alert_operation_log(事後可查) 不執行任何破壞性操作(Fail-safe:寧可不動也不亂動) ``` **重要**:AWOOOI 的 Fail-safe 預設行為是**不執行**,而非自動執行。 若 AI 不確定或人類沒有回應,系統**保持現狀**,不主動改變任何東西。 ### 3.3 人工直接操作(繞過 AI) 統帥可以隨時直接操作,AI 不會干預: ```bash # 直接 kubectl 操作(AI 不知道,但 AWOOOI 不阻擋) kubectl rollout restart deployment/awoooi-api -n awoooi-prod # 透過 AWOOOI API 手動觸發(有記錄) POST /api/v1/approvals/{id}/manual-execute Authorization: Bearer {token} Body: {"reason": "AI 判斷錯誤,手動修復"} ``` --- ## 4. Kill Switch(緊急停止) ### 4.1 Kill Switch 是什麼 Kill Switch = 立即凍結 AWOOOI 所有自動操作的緊急機制。 啟動後: - ✅ 繼續接收告警(不停止監控) - ✅ 繼續發送通知(讓統帥知道發生什麼) - ❌ 停止所有自動執行(kubectl / SSH) - ❌ 停止所有自動批准(AutoApprovePolicy 凍結) - ❌ 停止新 DecisionToken 進入執行階段 ### 4.2 如何啟動 Kill Switch **方法 1:Telegram 指令**(推薦,最快) ``` 在 SRE 戰情室群組或授權對話輸入: /kill_switch enable 系統回應: 🛑 KILL SWITCH 已啟動 - 所有自動執行已凍結 - 現有 pending 審核不受影響 - 統帥可手動批准個別操作 - 輸入 /kill_switch disable 解除 ``` **方法 2:API 呼叫** ```bash curl -X POST https://api.awoooi.internal/api/v1/system/kill-switch \ -H "Authorization: Bearer {admin_token}" \ -d '{"enabled": true, "reason": "系統異常,緊急凍結"}' ``` **方法 3:環境變數(重啟後生效)** ```bash # 在 K8s ConfigMap 設定 AIOPS_AUTO_EXECUTE_ENABLED=false ``` ### 4.3 Kill Switch 啟動場景 | 場景 | 建議行動 | |------|---------| | AI 連續執行錯誤動作 | 立即啟動,調查根因 | | 生產環境重大變更前 | 啟動 Kill Switch,變更完成後解除 | | SLO-1 連續 4h < 30% | 評估啟動(飛輪嚴重異常) | | 不明告警風暴(10 分鐘 > 50 個) | 啟動 + 調查聚合引擎是否失效 | | 週末/假日不在線 | 可啟動,讓系統進入純監控模式 | --- ## 5. 人工接管標準流程(SOP) ### 情境 A:收到 TYPE-3 審核卡 ``` Step 1: 閱讀審核卡(告警類型、目標、AI 建議動作、風險評估) Step 2: 若不確定,點擊「查看詳情」查看完整 AI 分析 Step 3: 判斷: - AI 建議合理 + 風險可接受 → 批准 - AI 建議有疑慮 → 拒絕,手動研究後再決定 - 看不懂 → 拒絕,kubectl describe 自己看 Step 4: 不論批准或拒絕,系統都會記錄到 alert_operation_log ``` ### 情境 B:自動修復失敗,AI 交還控制 ``` Step 1: 收到 TYPE-4 通知(AI 無法判斷或已重試 2 次) Step 2: 查看 Incident 詳情(/api/v1/incidents/{id}) Step 3: 手動分析根因(kubectl logs / describe) Step 4: 手動執行修復命令 Step 5: 確認服務恢復後,在 AWOOOI UI 標記 Incident 為 RESOLVED ``` ### 情境 C:發現 AI 判斷持續錯誤 ``` Step 1: 啟動 Kill Switch Step 2: 查看最近 N 個錯誤 DecisionToken 的 reasoning Step 3: 識別根因(Prompt 問題?LLM 模型切換?規則配置錯誤?) Step 4: 修復根因(可能需要更新 alert_rules.yaml 或 Playbook) Step 5: 在 staging 環境驗證(用 DRY_RUN=true) Step 6: 解除 Kill Switch,觀察 1 小時 ``` --- ## 6. 人工介入記錄規範 所有人工介入必須記錄到 `alert_operation_log`,欄位包含: ```python { "event_type": "human_intervention", "action": "approved" | "rejected" | "manual_execute" | "kill_switch", "actor": "統帥", "actor_role": "owner", "reason": "string(人工填寫)", "approval_id": "uuid(若有)", "incident_id": "string(若有)", "timestamp": "2026-04-14T08:00:00+08:00", # 台北時間 } ``` 這些記錄用於: - Postmortem 自動組裝時間軸 - SLO 計算(區分 AI 自動 vs 人工介入) - 飛輪學習(識別 AI 哪裡判斷錯,更新 Playbook) --- ## 7. 與系統各層的接點 | 系統層 | Human-in-the-Loop 接點 | |-------|----------------------| | `webhooks.py` | Kill Switch 檢查(進入決策前) | | `auto_approve.py` | P0/P1 強制人工路由 | | `decision_manager.py` | LLM 超時 → Expert System → 信心不足 → TYPE-4 | | `approval_execution.py` | 重試失敗 → TYPE-4 交還人工 | | `telegram_gateway.py` | 審核卡 + 逾時提醒 + Kill Switch 指令接收 | | `incident_service.py` | 人工標記 RESOLVED / ESCALATED | --- ## 8. 未來擴充計畫 | 功能 | 說明 | 時程 | |------|------|------| | 審核逾時自動降級(保守) | 超過 60 分鐘 → 自動執行最低風險操作 | Phase 3 後評估 | | 多人簽核(Multi-Sig) | P0 需要 2 人確認 | 待統帥指示 | | 行動 App 通知 | iOS 通知支援 | 低優先 | | SRE On-call 輪值 | 第二個人類接管層 | 未來需求 | --- *最後更新: 2026-04-14 台北時間 | 建立者: Claude Sonnet 4.6 + 統帥*