Some checks failed
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / tests (push) Successful in 1m48s
Ansible / Reboot Recovery Contract / validate (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
9.5 KiB
9.5 KiB
AWOOOI 架構記憶地圖 (Architecture Memory)
AI 模組地圖索引 - 每次新增積木後必須登記
最後更新: 2026-06-18 (IwoooS AI 自動化產品契約) 維護者: AWOOOI 工程團隊
產品定位記憶 (2026-06-18)
AWOOOI / AwoooP / IwoooS 是 AI 自動化產品,不是單純的監控頁、告警轉發器、資安清冊或文件集合。任何告警、資安事件、主機訊號、CI/CD 訊號、Wazuh / Kali / SOC 證據、Nginx / gateway / runtime config drift、code review 候選與人工批准,都必須回到可驗證的 AI 自動化閉環。
合格閉環必須能回答:
- Sensor / Evidence:訊號來源與只讀證據在哪裡。
- Normalizer:原始訊號如何被轉成可判讀事件包。
- AI 分流:由哪個 AI lane / 規則 / agent 判讀。
- 候選:產生哪些修復、隔離、回復、文件或人工送審候選。
- 閘門:需要哪些 owner / reviewer / maintenance window / rollback / secret boundary。
- 執行邊界:哪些行為仍是
0 / false,不得被 UI 可見或 CD 成功誤判成授權。 - 驗證器:完成後用什麼 readback、smoke、metric、receipt 或 timeline 驗證。
- 學習回寫:如何回寫 KM、PlayBook、LOGBOOK、候選規則與前台狀態。
若一個工作項目無法回答 AI 判讀到哪、候選是什麼、閘門是否滿足、驗證器是否完成、學習是否回寫,就不得宣稱 AI 自動化完成,也不得上修 IwoooS headline 完成度。前台只能呈現脫敏後的產品資訊與證據摘要,不得顯示工作視窗對話、內部協作內容、個人 namespace、內網位址、secret 片段或 raw process dump。
📦 Python 積木 (packages/)
| 積木名稱 | 職責 | 對外介面 | 狀態 | ADR |
|---|---|---|---|---|
| lewooogo-brain | Brain 積木 - AI 決策與提案引擎 | IProposalEngine, IIncidentProcessor, Guardrails |
✅ 已完成 | ADR-008 |
| lewooogo-data | Data 積木 - 雙層記憶體 (Working + Episodic) | IMemoryProvider, IDualMemoryProvider |
✅ 已完成 | ADR-008 |
lewooogo-brain 模組結構
packages/lewooogo-brain/
├── src/lewooogo_brain/
│ ├── interfaces/ # ABC 定義
│ │ ├── proposal_engine.py → IProposalEngine
│ │ └── incident_processor.py → IIncidentProcessor
│ ├── engines/ # 推論引擎實作
│ │ ├── proposal_engine.py # ✅ ProposalEngine 已完成
│ │ └── incident_engine.py # ✅ IncidentEngine 已完成
│ ├── guardrails/ # 安全護欄
│ │ └── guardrails.py # ✅ Guardrails 已完成
│ └── skills/ # Skill 動態載入
│ └── loader.py # ✅ SkillLoader 已完成
lewooogo-data 模組結構
packages/lewooogo-data/
├── src/lewooogo_data/
│ ├── interfaces/ # ABC 定義
│ │ └── memory_provider.py → IMemoryProvider, IDualMemoryProvider
│ └── providers/ # 具體實作
│ ├── redis_memory.py # ✅ RedisMemoryProvider 已完成
│ ├── pg_memory.py # ✅ PgMemoryProvider 已完成
│ └── dual_memory.py # ✅ DualMemoryProvider 已完成
📦 TypeScript 積木 (packages/)
| 積木名稱 | 職責 | 對外介面 | ADR |
|---|---|---|---|
| lewooogo-core | 前端 Plugin 系統 | LeWOOOgoPlugin, AgentProvider, DataAdapter |
ADR-003 |
🛡️ OpenClaw 架構治理 (AI Fallback & Rule Engine)
2026-03-31 首席架構師審查與定調
1. 高可用性 AI Fallback 路由
- 定義位置: K8s ConfigMap (
awoooi-config) 的AI_FALLBACK_ORDER - 啟動條件: 當高優先級 Provider (如 NVIDIA) 因為 400 Bad Request, API Rate Limit 或是 Timeout 陣亡時。
- 預設排序:
["nvidia", "gemini", "ollama", "claude"] - 目的: 確保告警裁決流程絕不中斷。出現
[LLM_GEMINI]並非設定跑版,而是容錯轉移 (Failover) 完美運作的展現。
2. Mock LLM 與 規則匹配 (Rule-Match) 引擎
- 定義位置:
decision_manager.py與openclaw.py雙軌引擎 - 啟動條件: 系統偵測到特定靜態特徵 (如
CD_E2E_Test系列),判定為「無需耗費 AI Token 即有標準作業程序」。 - 特徵表現: 輸出
[規則匹配]且強制定調confidence = 0.0。這代表了 0% 的隨機猜測率,即 100% 的鐵律遵從,避免真正的假數據與浪費。
🤖 Agent Teams (apps/api/src/agents/)
Phase 9 新增 - 專家 Agent 群組
| Agent 名稱 | 職責 | 狀態 | ADR |
|---|---|---|---|
| SecurityAgent | 資安風險評估與威脅分析 | ✅ 已完成 | ADR-009 |
| BlastRadiusAgent | 爆炸半徑影響範圍分析 | ✅ 已完成 | ADR-009 |
| ActionPlannerAgent | 行動計畫制定與步驟規劃 | ✅ 已完成 | ADR-009 |
| ConsensusEngine | 多 Agent 共識引擎 | ✅ 已完成 | ADR-009 |
Agent Teams 模組結構
apps/api/src/agents/
├── __init__.py
├── base_agent.py # Agent 基底類別
├── security_agent.py # ✅ SecurityAgent 資安專家
├── blast_radius_agent.py # ✅ BlastRadiusAgent 影響分析
├── action_planner_agent.py # ✅ ActionPlannerAgent 行動規劃
└── consensus_engine.py # ✅ ConsensusEngine 共識引擎
🔗 模組依賴關係
apps/api (FastAPI BFF)
├── agents/ (Agent Teams) ✅ Phase 9 專家群組
│ └── lewooogo-brain (AI 積木)
├── lewooogo-brain (AI 積木) ✅ Phase 6.4 已完成
│ └── lewooogo-data (資料積木)
└── lewooogo-data (直接引用) ✅ Phase 6.4 已完成
apps/web (Next.js)
└── lewooogo-core (TS 積木)
Docker Build 指令 (Phase 6.4i)
# 必須從 monorepo 根目錄執行
cd /path/to/awoooi
docker build -f apps/api/Dockerfile -t awoooi-api:latest .
📋 介面契約索引
Python 介面
| 介面 | 位置 | 職責 |
|---|---|---|
IProposalEngine |
lewooogo_brain.interfaces |
決策提案生成 |
IIncidentProcessor |
lewooogo_brain.interfaces |
事件聚合處理 |
Guardrails |
lewooogo_brain.guardrails |
安全護欄與風險檢查 |
IMemoryProvider |
lewooogo_data.interfaces |
單層記憶體存取 |
IDualMemoryProvider |
lewooogo_data.interfaces |
雙層記憶體 (Working + Episodic) |
BaseAgent |
apps.api.src.agents |
Agent 基底類別 |
ConsensusEngine |
apps.api.src.agents |
多 Agent 共識協調 |
HTTP API 契約
| 端點 | 位置 | 職責 |
|---|---|---|
POST /api/v1/incidents/{id}/propose |
apps/api/src/api/v1/incidents.py |
生成決策提案 |
GET /api/v1/incidents/{id} |
apps/api/src/api/v1/incidents.py |
取得事件詳情 |
🛡️ Wave 1 安全網 (Safety Net)
Phase 22 新增 - 系統底層防禦機制
| 元件名稱 | 職責 | 對外介面 | 狀態 | ADR |
|---|---|---|---|---|
| CircuitBreaker | 斷路器 - 防止推理引擎雪崩 | is_circuit_open(), record_failure() |
✅ 已完成 | ADR-038 |
| GlobalRepairCooldown | 全域修復冷卻 - 防止修復迴圈 | check_global_repair_cooldown() |
✅ 已完成 | ADR-039 |
| OpenClawGuard | 併發守衛 - Semaphore 限流 | async with guard.semaphore |
✅ 已完成 | ADR-038 |
| XCLAIM Sweeper | 孤兒訊息回收器 - 防止訊息遺失 | 流式背景掃描 (_reclaim_loop) |
✅ 已完成 | ADR-037 |
| IncidentDebounce | 告警去抖動 - 防止告警風暴 | _check_global_incident_storm() |
✅ 已完成 | ADR-037 |
安全網橫切關注點 (Cross-cutting)
- Graceful Degradation:
AnomalyCounter在 Redis 故障時自動降級為 In-memory count 或預設值。 - StatefulSet Blacklist: 禁止對
postgres,redis,clickhouse等有狀態服務進行自動重啟。 - Termination Buffer: Worker 節點具備 90sec
terminationGracePeriod與preStop: sleep 5保險。
🛰️ Telegram 雙向對話 (Interactive Chat)
Phase 21.5 新增 - 統帥與 AI 的直連鏈路
| 元件名稱 | 職責 | 對外介面 | 狀態 |
|---|---|---|---|
| ChatManager | 對話大腦 - 整合 K3s 狀態與 LLM | generate_response() |
✅ 已完成 |
| TelegramGateway | 訊息閘道 - 支援 Long Polling 雙向通訊 | _handle_chat_message(), send_notification() |
✅ 已完成 |
關鍵機制: 會話主權競爭 (Split-Brain Mitigation)
- 侵略性 Polling: 當遭遇 409 Conflict 時,重試延遲縮短至 2s (vfix14 導入),確保 K3s Pod 優先奪回主權。
- Webhook Kicker: 透過暫時性 Webhook 設定 (set/delete) 強制中斷所有 Long Polling 會話,清空殘留衝突。
🔬 OpenClaw 魯棒分析引擎 (Resilient Parsing)
vfix16 導入 - 針對 Nemo-4B 進行模型適配
- NEMOTRON_SYSTEM_PROMPT: 專為 4K Context 設計的超精簡指令集,降低 LLM 輸出斷片的風險。
- 防崩潰填充 (Fail-safe Filling): 在 Pydantic 驗證前,若 JSON 缺失非核心欄位 (如 risk_level, confidence),系統自動按上下文規律補全,防止 AI 仲裁退化為規則匹配。
- 新增積木前: 先讀取此檔案確認命名不衝突
- 新增積木後: 必須在此檔案登記職責與對外介面
- 修改介面前: 先讀取
docs/adr/確認架構決策 - 跨模組引用: 禁止直接 import,必須透過介面抽象