Files
awoooi/docs/adr/ADR-105-mcp-agent-loop-governance.md
Your Name b0da6da1e9
Some checks failed
CD Pipeline / tests (push) Successful in 2m50s
Code Review / ai-code-review (push) Successful in 33s
CD Pipeline / build-and-deploy (push) Failing after 25m48s
CD Pipeline / post-deploy-checks (push) Has been cancelled
feat(aiops): structure agent loop shadow output
2026-05-01 15:09:57 +08:00

4.4 KiB
Raw Blame History

ADR-105: MCP Agent Loop Governance

狀態: Accepted
日期: 2026-05-01
範圍: MCP audit, Agent Loop, OpenClaw/NemoTron/Hermes/ElephantAlpha tool permissions

背景

AWOOOI 已有 MCP provider registry、K8s/SSH/Prometheus/Database/Grafana/RAG/Filesystem 等 provider、PreDecisionInvestigator、EvidenceSnapshot、PostExecutionVerifier。缺口不是「從零安裝 MCP」而是

  • MCP 呼叫沒有統一 audit trail 與每日統計。
  • PreDecisionInvestigator 是 Python pre-gathering 模式LLM 看到結果但看不到 tool_use 過程。
  • 不同 AI Agent 沒有可驗證的工具權限邊界。
  • LLM retry storm 修掉後,需要讓真正的新 incident 能用 Agent Loop 深查,而不是回到靜態 prompt。

決策

D1 — 保留 pre-gathering新增 Agent Loop

PreDecisionInvestigator 仍是穩定 fallback。Agent Loop 作為 provider capability 漸進接入:

Alert -> PreDecisionInvestigator -> EvidenceSnapshot -> LLM text decision
Alert -> Agent Loop -> LLM tool_use -> MCP tool_result -> Final Decision

任何 Agent Loop 超過 max_iterations、provider 不支援 tool_use、或工具權限不足時必須降級回既有 pre-gathering / rule-first / Playbook RAG 路徑。

D2 — 四 Agent 工具權限矩陣

Agent 允許 禁止
OpenClaw 所有已註冊 MCP tool由既有 safety gates 控制執行 無額外禁用
NemoTron Prometheus/Grafana/SignOzK8s read-only K8s restart/delete/scale/apply/patch
Hermes Database、RAG、Filesystem、Prometheus K8s/SSH 執行類操作
ElephantAlpha 全部 read-only 任何寫入/通知/執行操作

權限定義在 apps/api/src/services/ai_providers/permissions.pyprovider schema 轉換前必須先過濾。

D3 — 統一 MCP audit

所有 registry provider 與 PDI tool registry provider 都包成 audited provider寫入

  • mcp_audit_log
  • mcp_daily_stats

incident_id 使用 VARCHAR(64),因為 AWOOOI incident id 是 INC-* 字串,不是 UUID。Audit 必須包含 agent_rolesession_idflywheel_node、provider/tool、input/output、latency、success/error。

D4 — MCP RAG 不獨立建 DB

內部 MCP RAG 沿用現有 PostgreSQL + pgvector + Redis hot cache

  • knowledge_entries
  • rag_chunks
  • playbook_embeddings
  • existing KMWriter / KnowledgeRAG / PlaybookRAG

不另建獨立資料庫。原因一致性、備份、incident/playbook join、權限治理都在同一 Postgres 邊界內已經存在。只有當向量資料量、查詢延遲、或多租戶隔離需要獨立擴展時,才評估外移專用 vector DB。

落地順序

  1. P0: audit schema、agent_role、權限矩陣、tool schema、AgentToolExecutor。
  2. P1: Claude/Ollama provider 接 analyze_with_tools(),但 DecisionManager 先 feature flag不直接切主路徑。
  3. P2: OpenClaw/NemoTron/Hermes/ElephantAlpha 逐一接線,先 read-only / diagnose再開執行類工具。
  4. P3: Langfuse spans、Grafana MCP dashboard、audit replay。

2026-05-01 P1 Canary

OpenClaw 先接 read-only shadow investigation而不是直接替換主決策

  • Feature flagENABLE_OPENCLAW_AGENT_LOOP_SHADOW
  • 輪數上限:OPENCLAW_AGENT_LOOP_MAX_ITERATIONSprod canary 設 2
  • 觸發點:OpenClawService.generate_incident_proposal_with_tools() 原 proposal 成功後
  • 允許工具Kubernetes / Prometheus / SignOz / Database / RAG / Grafana 的 read-only tools
  • Provider本地 Ollama 優先,不新增 Gemini/Claude 付費呼叫
  • 影響面:只附加 agent_loop_shadow metadata不覆蓋 actionrisk_levelconfidence 或 Nemotron tool result
  • Structured metadatashadow raw response 需正規化為 agent_loop_shadow.structured,包含 root_cause_checkevidence_usedconfidence_deltamissing_evidencehuman_or_ai_next_stepparse_status
  • Confidence deltacanary 階段只可記錄 0 到 -0.15 的保守 metadata正值一律歸零任何 score 或 auto-execute gate 變更需另開 ADR/Logbook 並通過 production audit
  • 失敗策略log warning 後回到既有 proposal / Nemotron / Playbook 路徑

驗收

  • mcp_audit_log 24h call count > 0。
  • 每筆 Agent Loop tool_use 有 agent_role
  • NemoTron / ElephantAlpha 無法取得 K8s 寫入工具。
  • LLM ghost-loop 不因 Agent Loop 重啟:仍受 Alertmanager in-flight lock、stable cache、provider circuit breaker、max_iterations 控制。