From e0bfcc7bd6beadb85d7c6b57579ac8ca6221a803 Mon Sep 17 00:00:00 2001 From: OG T Date: Fri, 17 Apr 2026 12:44:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(phase5):=20=E4=BF=AE=E5=BE=A9=20Solver=20ac?= =?UTF-8?q?tion=20=E6=A0=BC=E5=BC=8F=20=E2=80=94=20=E5=BC=B7=E5=88=B6?= =?UTF-8?q?=E8=BC=B8=E5=87=BA=20kubectl=20=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:_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 --- apps/api/src/agents/solver_agent.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/apps/api/src/agents/solver_agent.py b/apps/api/src/agents/solver_agent.py index e42cca7c..6678b97c 100644 --- a/apps/api/src/agents/solver_agent.py +++ b/apps/api/src/agents/solver_agent.py @@ -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_cost(0-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/,命名空間統一用 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 導致的記憶體碎片化"