fix(phase5): 修復 Solver action 格式 — 強制輸出 kubectl 命令
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 9m33s

根因:_build_prompt() 的 action 範例為 "restart_service:awoooi-api"(自訂格式),
LLM 模仿此格式輸出自然語言描述而非 kubectl 命令。

影響鏈:
  Solver action = 自然語言描述
  → auto_approve Condition 1c 拒絕(無 kubectl 關鍵字)
  → _auto_execute() 永不被調用
  → blast_radius_calculator 永不被調用
  → blast_radius_score fill rate = 0/14 = 0%(Phase 5 驗收指標未達)

修復:
  1. blast_radius 參考從抽象描述改為實際 kubectl 命令示例
  2. 明確要求 action 欄位必須是真實 kubectl 命令(不可用自然語言)
  3. 正確範例:kubectl rollout restart deployment/awoooi-api -n awoooi-prod

預期效果:LLM 輸出 kubectl 命令 → auto_approve 通過(低 blast_radius 情境)
          → blast_radius_calculator 被調用 → fill rate 趨向 100%

2026-04-17 ogt + Claude Sonnet 4.6

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-17 12:44:36 +08:00
parent ce731c8ceb
commit e0bfcc7bd6

View File

@@ -144,6 +144,12 @@ class SolverAgent(BaseAgent):
)
def _build_prompt(self, context: dict[str, Any]) -> str:
# 2026-04-17 ogt + Claude Sonnet 4.6: 修復 Solver action 格式問題
# 根因:舊 prompt action 範例為 "restart_service:awoooi-api"(自訂格式)
# LLM 模仿範例輸出自然語言描述,而非 kubectl 命令
# → auto_approve Condition 1c 拒絕(無 kubectl 關鍵字)
# → blast_radius_calculator 永遠不被調用fill rate = 0%
# 修復:要求 action 必須是真實 kubectl 命令,並提供正確範例
return f"""你是 AWOOOI SRE 系統的軍師 Agent專職修復方案設計。
根因假設:{context.get("hypothesis", "")}
@@ -156,18 +162,22 @@ class SolverAgent(BaseAgent):
- rollback_cost0-100回滾難度越高 = 越難還原)
blast_radius 參考:
- 重啟單一 Pod = 10
- 重啟 Deployment = 25
- 調整 HPA = 30
- 刪除 StatefulSet = 80
- 清除 PVC = 95
- kubectl rollout restart deployment = 10
- kubectl scale deployment --replicas=N = 15
- kubectl rollout undo deployment = 25
- kubectl apply -f = 40
- kubectl delete deployment = 75
- kubectl delete pvc = 95
🔴 關鍵規則action 欄位必須是真實的 kubectl 命令,不可用自然語言描述。
目標資源格式deployment/<name>,命名空間統一用 awoooi-prod。
以 JSON 回覆:
{{
"candidates": [
{{
"action": "restart_service:awoooi-api",
"blast_radius": 15,
"action": "kubectl rollout restart deployment/awoooi-api -n awoooi-prod",
"blast_radius": 10,
"rollback_cost": 5,
"confidence": 0.8,
"rationale": "重啟可清除 OOM 導致的記憶體碎片化"