新增 5 個 Agent + Orchestrator + DecisionManager 接線: - protocol.py: DiagnosisReport / ActionPlan / ReviewVerdict / CriticReport / DecisionPackage 型別系統 - DiagnosticianAgent: RCA 根因分析,confidence < 0.4 → ABSTAIN - SolverAgent: 修復方案軍師,blast_radius 評分 + 降級 rule-based mock - ReviewerAgent: 安全審查,HARD_RULES 靜態 pattern + blast_radius 閾值 (>50 revision, >80 reject) - CriticAgent: 刻意唱反調,強制 3 問批判性思維,critical challenge → REJECT - CoordinatorAgent: 純規則聚合,6 級決策閘,REQUEST_REVISION → 強制人工 - AgentOrchestrator: 30s 全局超時,Reviewer ‖ Critic 並行,DB Immutable Event Sourcing + Redis Streams - DecisionManager: AIOPS_P2_ENABLED gate + _package_to_proposal_data 橋接既有 proposal_data 格式 - AgentSession DB table + 4 個複合 index - ADR-082 決策記錄 Gate 2 修復(7 項): - CRITICAL: DELETE FROM regex lookahead 位置錯誤(移至 FROM 後) - CRITICAL: REQUEST_REVISION 可抵達 auto-execute 路徑(改回 requires_human_approval=True) - IMPORTANT: _extract_json flat regex 不支援巢狀 JSON(改 find/rfind 邊界提取) - IMPORTANT: all_degraded 遺漏 verdict.degraded(補全 4 個 Agent) - IMPORTANT: Solver ABSTAIN guard 放行降級假設(改為無論 hypotheses 有無均跳過) - IMPORTANT: dataclasses.asdict() Enum 未序列化導致 DB 寫入靜默失敗(加 json.dumps default handler) - IMPORTANT: P2 gate 直讀屬性繞過父 Phase 守衛(改用 is_phase_enabled(2)) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
120 lines
4.2 KiB
Markdown
120 lines
4.2 KiB
Markdown
# ADR-082: 多 Agent 協作架構(Phase 2)
|
||
|
||
> **日期**: 2026-04-15(台北)
|
||
> **狀態**: 🟢 批准(統帥 + 首席架構師共同簽核)
|
||
> **作者**: Claude Sonnet 4.6(首席架構師)+ 統帥 audit
|
||
> **相關**:
|
||
> - MASTER 藍圖:§3.2 D2 多 Agent 協作
|
||
> - ADR-081:Phase 1 感官縱深(前置)
|
||
> - HARD_RULES v1.9:Phase 退出條件鐵律
|
||
|
||
---
|
||
|
||
## 背景
|
||
|
||
Phase 1 完成後,AI 已具備「環境感知能力」(8D 感官 → EvidenceSnapshot)。
|
||
Phase 2 的目標是解決 LLM 的根本性弱點:**過度自信 + 幻覺**。
|
||
|
||
單一 OpenClaw 全包的問題:
|
||
|
||
| 問題 | 現象 |
|
||
|------|------|
|
||
| 沒有對抗機制 | LLM 說什麼信什麼,無內部質疑 |
|
||
| 根因與方案混為一談 | 根因判斷錯誤直接影響方案,無隔離 |
|
||
| 安全審查 = 無 | 危險指令只靠 HARD_RULES 靜態擋 |
|
||
| 無 Audit Trail | 無法追責「AI 為何做此決策」 |
|
||
|
||
## 決策
|
||
|
||
拆解單一 LLM 為 **5 個分工明確的 Agent**,用辯證 + 投票降低幻覺:
|
||
|
||
| Agent | 職責 | 輸入 | 輸出 |
|
||
|-------|------|------|------|
|
||
| **Diagnostician(偵探)** | RCA 根因分析 | `EvidenceSnapshot` | `DiagnosisReport` |
|
||
| **Solver(軍師)** | 對每個假設產方案 | `DiagnosisReport` | `ActionPlan` |
|
||
| **Reviewer(安全官)** | 安全審查 + 可行性 | `ActionPlan` | `ReviewVerdict` |
|
||
| **Critic(質疑者)** | 刻意唱反調,防幻覺 | `DiagnosisReport` + `ActionPlan` | `CriticReport` |
|
||
| **Coordinator(指揮官)** | 聚合辯證,拍板決策 | 全部 Agent 輸出 | `DecisionPackage` |
|
||
|
||
## 架構
|
||
|
||
```
|
||
EvidenceSnapshot
|
||
│
|
||
▼
|
||
Diagnostician (3s)
|
||
│ DiagnosisReport
|
||
▼
|
||
Solver (4s)
|
||
│ ActionPlan
|
||
├─────────────────┐
|
||
▼ ▼
|
||
Reviewer (3s) Critic (3s) ← 並行
|
||
│ ReviewVerdict │ CriticReport
|
||
└────────┬─────────┘
|
||
▼
|
||
Coordinator (2s)
|
||
│ DecisionPackage
|
||
▼
|
||
(回 decision_manager)
|
||
```
|
||
|
||
**時間預算**:P99 < 20s(含 Investigator 8s = Phase 1 已涵蓋)
|
||
**單 Agent 熔斷**:超時 5s → 降級為 rule-based mock,輸出「棄權」,不阻塞流程
|
||
**全流程熔斷**:> 30s → Coordinator 強制以現有資訊輸出結論並標 `degraded`
|
||
|
||
## Redis Streams 訊息匯流
|
||
|
||
Agent 間不直接 call function,透過 Redis Streams 傳訊:
|
||
|
||
- Stream Key: `aiops:agent:{session_id}`
|
||
- Consumer Group: 各 Agent 獨立消費自己的訊息
|
||
- 優勢:單一 Agent 掛掉不影響其他;可 replay 除錯
|
||
|
||
## AgentSession DB 表(Audit Trail)
|
||
|
||
每次辯證全程寫入 `agent_sessions`:
|
||
|
||
```
|
||
session_id / incident_id / agent_role / input_hash / output_json / latency_ms / created_at
|
||
```
|
||
|
||
- 不可刪除,只能新增(Immutable Event Sourcing)
|
||
- Phase 3 學習閉環依賴此表(記錄「Critic 是否挑戰成功」作為學習信號)
|
||
|
||
## 安全原則
|
||
|
||
- Reviewer 必須硬核拒絕任何觸碰 HARD_RULES 的動作(delete node / DROP TABLE 等)
|
||
- Critic prompt 強化「你的工作是找漏洞,不是順著說好話」(防 sycophancy)
|
||
- Agent 間不得修改彼此 prompt(防 prompt 污染擴散)
|
||
- 所有 Agent 輸出先過 `SanitizationService`(ADR-081 防注入)
|
||
|
||
## 回滾策略
|
||
|
||
```
|
||
AIOPS_P2_ENABLED=False → decision_manager 退回 Phase 1 單 LLM 路徑
|
||
```
|
||
|
||
- `agent_sessions` 表只新增,不影響任何舊表
|
||
- Orchestrator 熔斷設計:任一 Agent 失敗 → Coordinator 用現有資訊繼續
|
||
|
||
## Phase 2 退出條件
|
||
|
||
| 條件 | 量化指標 |
|
||
|------|---------|
|
||
| AgentSession 有資料 | 24h 內 ≥ 3 筆(Diagnostician / Solver / Coordinator 各 1)|
|
||
| 辯證有效 | 每事件 AgentSession turns ≥ 3 |
|
||
| Critic 工作 | CriticReport challenge_count > 0 至少 1 次 |
|
||
| 熔斷可用 | Diagnostician timeout → Coordinator 仍完成(降級路徑測試) |
|
||
| 延遲達標 | 多 Agent 路徑啟用後 p95 < 8s(避免拖垮主流程)|
|
||
|
||
## 不決定
|
||
|
||
- Agent 使用什麼 LLM(保持通過現有 `openclaw.call()` 路由,Phase 4 再優化模型分配)
|
||
- Agent 是否有「記憶」(Phase 3 再加 evidence_chain fine-tune)
|
||
- Declarative 修復(Phase 5)
|
||
|
||
---
|
||
|
||
*2026-04-15 ogt + Claude Sonnet 4.6(亞太):Phase 2 正式批准*
|