fix(webhooks+prompts): 修復 LLM 對所有告警一律輸出「重啟 AWOOOI 服務」的根本問題
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
根因 (INC-20260416-C365D0 postgres 磁碟告警事故): 1. alert_context 中 alertname 埋在 labels 深處,LLM 看到 alert_type="custom" → 不知道是什麼告警 2. 快取鍵用 alert_type:target_resource → 不同 alertname 共用同一快取 → 全部回傳第一個 LLM 結果 3. 系統 Prompt 無 alert-category 指導 → LLM 永遠輸出 kubectl rollout restart 修復: - webhooks.py: alert_context 置頂加入 alertname + alert_category + annotations - openclaw.py: 快取鍵改用 alertname:target_resource(告警名稱才是主要識別符) - prompts.py: OPENCLAW_SYSTEM_PROMPT + NEMOTRON_SYSTEM_PROMPT 加入 Alert-Specific Analysis Rules database/storage 告警 → NO_ACTION + 調查指令;K8s 告警 → 對應重啟指令 禁止對非 K8s 告警輸出 kubectl rollout restart deployment/awoooi-prod 2026-04-16 ogt + Claude Sonnet 4.6(亞太) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -741,10 +741,15 @@ class OpenClawService:
|
||||
2026-03-29 ogt: 加入 Token/Cost 追蹤
|
||||
"""
|
||||
# 生成快取鍵 (基於 prompt + alert_context hash)
|
||||
# 2026-04-16 ogt + Claude Sonnet 4.6: 修復 — alertname 才是主要識別符
|
||||
# 舊版用 alert_type:target_resource → 不同告警 (e.g. PostgreSQLDiskGrowth vs PodCrashLoop)
|
||||
# 在 alert_type="custom" 時共用同一快取鍵 → 全部回傳相同 LLM 結果
|
||||
context_hash = ""
|
||||
if alert_context:
|
||||
# 使用告警類型 + 目標資源作為上下文 hash
|
||||
context_hash = f"{alert_context.get('alert_type', '')}:{alert_context.get('target_resource', '')}"
|
||||
# alertname 優先;無 alertname 時 fallback 到 alert_type
|
||||
_alertname = alert_context.get("alertname") or alert_context.get("alert_type", "")
|
||||
_target = alert_context.get("target_resource", "")
|
||||
context_hash = f"{_alertname}:{_target}"
|
||||
|
||||
cache_key = self._generate_cache_key(prompt, context_hash)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user