Files
awoooi/docs/adr/ADR-054-diagnose-privacy-first-routing.md
OG T 15c7f6fcd3 docs(adr): 起草 ADR-054/055/056/057 — Phase 25 三方向架構決策
ADR-054: DIAGNOSE Privacy-First Routing (已批准)
  - _local_fallback_chain 設計決策
  - NEMOTRON privacy_level=local 首席架構師裁示
  - 全部 local 失敗 → REJECT + Telegram

ADR-055: Knowledge Auto-Harvesting (已批准)
  - AUTO_RUNBOOK DRAFT + ANTI_PATTERN PUBLISHED 設計理由
  - compute_hash() 碰撞風險說明
  - Fire-and-forget GC 防護強制規範

ADR-056: Config Drift Detection 四層架構 (已批准)
  - Detector→Analyzer→Interpreter→Remediator 職責邊界
  - AI 只做意圖分析不做修復決策
  - adopt() 暫停 + _recent_reports Phase 1 限制

ADR-057: adopt() Gitea PR API 實作路徑 (草案,待批准)
  - 解決 API Pod git add -A 安全風險
  - PR review 流程保障

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 00:24:50 +08:00

3.0 KiB
Raw Blame History

ADR-054: DIAGNOSE Privacy-First Routing本地隱私邊界

狀態: 已批准 日期: 2026-04-04 決策者: 統帥 + 首席架構師 首席架構師評分: 技術背書 關聯 ADR: ADR-052 (AI Provider Registry) 實作: Phase 25 P0 — commit 3455044, a562db4


背景

問題陳述

DIAGNOSE 任務類型(根本原因分析、服務診斷)會接收到包含機密基礎設施資訊的 Incident 資料Pod 名稱、錯誤堆疊、服務拓撲)。在 ADR-052 的 AI Provider Registry 架構下DIAGNOSE 原本沿用 _fallback_chain,可能將機密資料傳送至雲端 ProviderGemini、Claude

驅動因素

  1. 零信任原則: 機密基礎設施資料不應離開內網
  2. 合規要求: 避免系統診斷資料上傳至第三方雲端
  3. 能力需求: 診斷任務需要高推理能力,不能只用 Ollama

決策

D1: 建立 _local_fallback_chain

# ai_router.py
self._local_fallback_chain: list[tuple[AIProviderEnum, str]] = [
    (AIProviderEnum.NEMOTRON, self._nemotron_default),  # NIM 188主力
    (AIProviderEnum.OLLAMA, self._ollama_summary),       # Ollama 188備援
]

DIAGNOSE 任務強制使用此鏈,不允許降級至任何 privacy_level="cloud" 的 Provider。

D2: NEMOTRON Provider 的 privacy_level 裁定

首席架構師裁示 (2026-04-04)

  • NEMOTRON Provider 對應 NVIDIA NIM 部署在 192.168.0.188(內網 GPU 主機)
  • 非 NVIDIA 官方雲端 APIapi.nvidia.com
  • 屬於 local infraprivacy_level = "local",可納入 DIAGNOSE 隱私邊界
# nemotron.py
@property
def privacy_level(self) -> str:
    return "local"  # NIM 部署在 192.168.0.188(內網 GPU

D3: 全部 Local Provider 不可用時 → REJECT + Telegram

# 全部 local provider 失敗或不可用時
await tg.send_text("⚠️ DIAGNOSE 本地 Provider 不可用,需要人工介入")
return AIResult(success=False, reason="REJECT_PRIVACY_BOUNDARY")

不降級至雲端。必要時通知人工介入。

D4: route_sync() 同步版本同樣適用隱私邊界

route_sync() 補齊相同的 DIAGNOSE → _local_fallback_chain 判斷,確保同步路徑不繞過隱私邊界。


後果

正面影響

  • DIAGNOSE 資料的隱私保護有制度性保障
  • 失敗時告警人工介入,不靜默降級至雲端
  • NIM 188 具備足夠診斷能力Nemotron-4 340B 量化版)

負面影響 / 風險

  • 若 NIM 188 離線且 Ollama 超時DIAGNOSE 功能暫時中斷
  • 需要維護 NIM 188 的高可用性

未決事項

  • NIM 188 是否需要 Startup ProbeK0.5,待維護窗口)
  • 若未來引入第三個 local provider_local_fallback_chain 需更新

替代方案

方案 理由未採用
允許 DIAGNOSE 降級至 Gemini 違反零信任原則
只用 Ollama 做 DIAGNOSE 能力不足,診斷品質差
所有任務類型一律 local-only 過於保守,影響正常業務功能