Files
awoooi/docs/operations/HUMAN-IN-THE-LOOP.md
Your Name 95110971f3
Some checks failed
CD Pipeline / tests (push) Successful in 1m27s
Code Review / ai-code-review (push) Successful in 29s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
fix(telegram): close remaining DM alert routes
2026-04-30 23:02:17 +08:00

286 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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** | 風險等級 P0CRITICAL | 強制人工審核 | Telegram 審核卡 |
| **HITL-2** | 風險等級 P1HIGH | 強制人工審核 | 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 3P3 自動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
**方法 1Telegram 指令**(推薦,最快)
```
在 SRE 戰情室群組或授權對話輸入:
/kill_switch enable
系統回應:
🛑 KILL SWITCH 已啟動
- 所有自動執行已凍結
- 現有 pending 審核不受影響
- 統帥可手動批准個別操作
- 輸入 /kill_switch disable 解除
```
**方法 2API 呼叫**
```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 + 統帥*