fix(watchdog): 修复 Trust Drift 重复告警 + 建立 GCP Ollama nginx proxy
Some checks failed
Code Review / ai-code-review (push) Successful in 45s
Ansible Lint / lint (push) Has been cancelled

- ai_slo_watchdog_job: 改用 trust_drift_detector 纯统计 lib
  避免与 governance_agent 每小时自检查重复触发 Telegram

- infra/ansible: 建立 110 nginx proxy 转发到 GCP-A/B
  端口 11435 -> 34.143.170.20:11434 (GCP-A)
  端口 11436 -> 34.21.145.224:11434 (GCP-B)

- docs/runbooks: DEPLOY-GCP-OLLAMA-PROXY.md 完整部署指南
- ops/nginx: 手动部署脚本供 110 直接执行

ADR-110 三层容灾启用前提:先部署 proxy,再改 ConfigMap
This commit is contained in:
Your Name
2026-05-04 23:12:35 +08:00
parent a1b61289f5
commit ec013f662d
5 changed files with 446 additions and 14 deletions

View File

@@ -159,21 +159,17 @@ async def _check_once() -> None:
# W-6: Trust Drift 偵測Playbook 信任度漂移)
# 2026-05-02 ogt + Claude Sonnet 4.6(亞太): 整併雙寫路徑
# 原行為:呼叫 trust_drift_detector.run() 直接寫 event_type=trust_drift 到 PG
# governance_agent.check_trust_drift() 每 1h 也寫同一 event_type → 雙寫
# 整併:改呼叫 governance_agent.check_trust_drift() 為唯一 source-of-truth
# W-6 watchdog 仍每 15 分鐘執行感知器violations 計數用於 meta-alert 觸發
# PG 寫入由 governance_agent._alert() 統一處理,避免雙寫
# 2026-05-04 ogt + Claude: 修復重複告警 — 改為直接用 trust_drift_detector 純統計
# 背景:原本呼叫 governance_agent.check_trust_drift() 會觸發 Telegram 告警
# governance_agent.run_self_check() 每 1h 也會呼叫同一方法 → 雙重 Telegram
# 修正:watchdog 只取統計數字,不觸發 Telegram告警由 governance_agent 獨家負責
try:
from src.services.governance_agent import get_governance_agent
trust_result = await get_governance_agent().check_trust_drift()
if trust_result.get("drifted", 0) > 0:
drifted = trust_result["drifted"]
auto_deprecated = trust_result.get("auto_deprecated", 0)
kept = trust_result.get("kept", 0)
from src.services.trust_drift_detector import get_trust_drift_detector
dist = await get_trust_drift_detector().detect()
if dist.drift_detected:
violations.append(
f"Trust Drift 偵測到 {drifted} 個 Playbook 信任度低落"
f"auto-deprecated: {auto_deprecated},待人工審核: {kept}"
f"Trust Drift 偵測到 {dist.low_count} 個 Playbook 信任度低落"
f"low_ratio: {dist.low_ratio:.1%}mean_trust: {dist.mean_trust:.2f}"
)
except Exception as e:
logger.warning("watchdog_w6_trust_drift_check_failed", error=str(e))