From 9a8018c3fbc94f99d5d184c8cb1ef23d7366cea0 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 29 四月 2026 17:02:38 +0800
Subject: [PATCH] #堆垛机任务执行优先级修改

---
 src/main/java/com/zy/ai/utils/AiPromptUtils.java |  335 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 279 insertions(+), 56 deletions(-)

diff --git a/src/main/java/com/zy/ai/utils/AiPromptUtils.java b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
index 3f82e66..6abe1ba 100644
--- a/src/main/java/com/zy/ai/utils/AiPromptUtils.java
+++ b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
@@ -1,30 +1,267 @@
 package com.zy.ai.utils;
 
+import com.zy.ai.domain.autotune.AutoTuneControlModeSnapshot;
+import com.zy.ai.enums.AiPromptBlockType;
+import com.zy.ai.enums.AiPromptScene;
 import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
 
 @Component
 public class AiPromptUtils {
+
+    private static final String AUTO_TUNE_TOOL_GET_SNAPSHOT = "wcs_local_dispatch_get_auto_tune_snapshot";
+    private static final String AUTO_TUNE_TOOL_GET_RECENT_JOBS = "wcs_local_dispatch_get_recent_auto_tune_jobs";
+    private static final String AUTO_TUNE_TOOL_APPLY_CHANGES = "wcs_local_dispatch_apply_auto_tune_changes";
+    private static final String AUTO_TUNE_TOOL_REVERT_LAST_JOB = "wcs_local_dispatch_revert_last_auto_tune_job";
+
+    private static final String AUTO_TUNE_RULE_SNAPSHOT_INSTRUCTIONS =
+            "Step 4 璇诲彇璋冨弬瑙勫垯\n" +
+                    "- 蹇呴』璇诲彇 snapshot.ruleSnapshot 涓殑 minValue銆乵axValue銆乵axStep銆乧ooldownMinutes銆乨ynamicMaxValue 鍜� dynamicMaxSource銆俓n" +
+                    "- 鎵�鏈夋彁浜ょ粰 " + AUTO_TUNE_TOOL_APPLY_CHANGES + " 鐨� change 閮藉繀椤诲尮閰嶅搴� targetType/targetKey 鐨勮鍒欍�俓n" +
+                    "- 姣忎釜鐩爣鍙傛暟鐨勬柊鍊煎繀椤绘弧瓒冲搴� minValue銆乵axValue 鎴� dynamicMaxValue銆乵axStep銆乧ooldownMinutes 鍜岃鍒� note锛涙壘涓嶅埌瑙勫垯鎴栨棤娉曡瘉鏄庡姩鎬佷笂闄愭椂绂佹鎻愪氦銆�";
+
+    public static String buildAutoTuneRuntimeGuard(String triggerType, AutoTuneControlModeSnapshot controlMode) {
+        return "璇锋墽琛屼竴娆″悗鍙� WCS 鑷姩璋冨弬銆倀riggerType=" + safeRuntimeValue(triggerType) + "銆俓n\n" +
+                "==================== 杩愯鏃跺己绾︽潫 ====================\n" +
+                "- 褰撳墠鎵ц妯″紡: modeCode=" + modeValue(controlMode == null ? null : controlMode.getModeCode())
+                + "锛宮odeLabel=" + modeValue(controlMode == null ? null : controlMode.getModeLabel())
+                + "锛宔nabled=" + modeValue(controlMode == null ? null : controlMode.getEnabled())
+                + "锛宎nalysisOnly=" + modeValue(controlMode == null ? null : controlMode.getAnalysisOnly())
+                + "锛宎llowApply=" + modeValue(controlMode == null ? null : controlMode.getAllowApply()) + "銆俓n" +
+                "- 蹇呴』鍏堣皟鐢� " + AUTO_TUNE_TOOL_GET_SNAPSHOT + " 鑾峰彇鍚庣蹇収锛屽苟璇诲彇 snapshot.controlModeSnapshot 鐨� enabled銆乤nalysisOnly銆乤llowApply銆乵odeCode銆乵odeLabel銆俓n" +
+                "- 褰� snapshot.controlModeSnapshot.analysisOnly=true 鎴� allowApply=false 鏃讹紝鍙厑璁稿垎鏋愩�佽皟鐢� " + AUTO_TUNE_TOOL_GET_RECENT_JOBS
+                + " 鍜岃皟鐢� " + AUTO_TUNE_TOOL_APPLY_CHANGES + " dryRun=true 璇曠畻锛涚姝� dryRun=false 姝e紡搴旂敤锛涚姝㈣皟鐢� "
+                + AUTO_TUNE_TOOL_REVERT_LAST_JOB + "銆俓n" +
+                "- 濡傞渶鎻愪氦 changes锛屽繀椤诲厛璋冪敤 " + AUTO_TUNE_TOOL_APPLY_CHANGES
+                + " dryRun=true锛沝ry-run 杩斿洖 success=false銆乺ejectCount>0銆乧hanges 涓虹┖鎴� changes[].resultStatus 鍏ㄩ儴涓� no_change 鏃讹紝涓嶅緱璋冪敤 dryRun=false銆俓n" +
+                "- 鍙湁 analysisOnly=false 涓� allowApply=true銆乨ry-run 閫氳繃銆佸瓨鍦ㄦ湁鏁堝彉鏇翠笖杩斿洖 dryRunToken 鏃讹紝鎵嶅厑璁搁�氳繃 "
+                + AUTO_TUNE_TOOL_APPLY_CHANGES + " dryRun=false 姝e紡搴旂敤锛涙寮忓簲鐢ㄥ繀椤绘惡甯﹁ dryRunToken銆俓n" +
+                "- 娌℃湁鏀跺埌 " + AUTO_TUNE_TOOL_APPLY_CHANGES + " 鎴� " + AUTO_TUNE_TOOL_REVERT_LAST_JOB
+                + " 鐨勫伐鍏疯繑鍥炵粨鏋滄椂锛屼笉寰楀0绉板凡璇曠畻銆佸凡搴旂敤鎴栧凡鍥炴粴锛涗笉瑕佽緭鍑鸿嚜鐢辨牸寮� JSON 渚涘灞傝В鏋愩�俓n" +
+                "- 蹇呴』妫�鏌� taskSnapshot.stationLimitBlockedTasks 鍜� taskSnapshot.outboundTaskSamples 涓殑 systemMsg銆亀rkSts銆乥atchSeq锛屽垽鏂槸鍚﹀瓨鍦ㄨ涓婇檺鎸′綇鐨勬棭搴忓嚭搴撲换鍔°�俓n\n" +
+                AUTO_TUNE_RULE_SNAPSHOT_INSTRUCTIONS;
+    }
+
+    public String getDefaultPrompt(String sceneCode) {
+        AiPromptScene scene = AiPromptScene.ofCode(sceneCode);
+        if (scene == null) {
+            throw new IllegalArgumentException("涓嶆敮鎸佺殑 Prompt 鍦烘櫙: " + sceneCode);
+        }
+        return getDefaultPrompt(scene);
+    }
+
+    public String getDefaultPrompt(AiPromptScene scene) {
+        if (scene == AiPromptScene.DIAGNOSE_STREAM) {
+            return getAiDiagnosePromptMcp();
+        }
+        if (scene == AiPromptScene.SENSOR_CHAT) {
+            return getWcsSensorPromptMcp();
+        }
+        if (scene == AiPromptScene.AUTO_TUNE_DISPATCH) {
+            return getAutoTuneDispatchPromptMcp();
+        }
+        throw new IllegalArgumentException("涓嶆敮鎸佺殑 Prompt 鍦烘櫙: " + scene.getCode());
+    }
+
+    public LinkedHashMap<AiPromptBlockType, String> getDefaultPromptBlocks(String sceneCode) {
+        AiPromptScene scene = AiPromptScene.ofCode(sceneCode);
+        if (scene == null) {
+            throw new IllegalArgumentException("涓嶆敮鎸佺殑 Prompt 鍦烘櫙: " + sceneCode);
+        }
+        return getDefaultPromptBlocks(scene);
+    }
+
+    public LinkedHashMap<AiPromptBlockType, String> getDefaultPromptBlocks(AiPromptScene scene) {
+        LinkedHashMap<AiPromptBlockType, String> blocks = new LinkedHashMap<>();
+        if (scene == AiPromptScene.DIAGNOSE_STREAM) {
+            blocks.put(AiPromptBlockType.BASE_POLICY,
+                    "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆�");
+            blocks.put(AiPromptBlockType.TOOL_POLICY,
+                    "浣犲彲浠ユ寜闇�璋冪敤绯荤粺鎻愪緵鐨勫伐鍏蜂互鑾峰彇瀹炴椂鏁版嵁涓庝笂涓嬫枃锛堝伐鍏疯繑鍥� JSON锛夛細\n" +
+                            "- 浠诲姟锛�" + localTool("task_query") + "\n" +
+                            "- 璁惧瀹炴椂鐘舵�侊細" + localTool("device_get_crn_status") + " / " + localTool("device_get_station_status") + " / " + localTool("device_get_rgv_status") + "\n" +
+                            "- 鏃ュ織锛�" + localTool("log_query") + "\n" +
+                            "- 璁惧閰嶇疆锛�" + localTool("config_get_device_config") + "\n" +
+                            "- 绯荤粺閰嶇疆锛�" + localTool("config_get_system_config") + "\n\n" +
+                            "浣跨敤绛栫暐锛歕n" +
+                            "1锛夐伩鍏嶈噯娴嬨�傚淇℃伅涓嶈冻锛屽厛璋冪敤鐩稿簲宸ュ叿鏀堕泦蹇呰鏁版嵁锛涘彲澶氳疆璋冪敤銆俓n" +
+                            "2锛夊宸ュ叿杩斿洖鐨� JSON 鍏堣繘琛岀粨鏋勫寲褰掔撼锛屾彁鐐煎叧閿瓧娈碉紝鍐嶅仛鎺ㄧ悊銆俓n" +
+                            "3锛変紭鍏堥『搴忥細浠诲姟鈫掕澶囩姸鎬佲啋鏃ュ織鈫掗厤缃紱鎸夐渶璋冩暣銆俓n\n" +
+                            "濡傞渶瑕侀澶栨暟鎹紝璇峰厛璋冪敤鍚堥�傜殑宸ュ叿鍐嶇户缁洖绛斻��");
+            blocks.put(AiPromptBlockType.OUTPUT_CONTRACT,
+                    "璇锋寜浠ヤ笅缁撴瀯杈撳嚭璇婃柇缁撴灉锛堜娇鐢ㄧ畝浣撲腑鏂囷級锛歕n" +
+                            "1. 闂姒傝堪锛�1-3 鍙ヨ瘽锛屾鎷綋鍓嶇郴缁熺姸鎬侊級\n" +
+                            "2. 鍙枒璁惧鍒楄〃锛堝垪鍑� 1-N 涓澶囩紪鍙凤紝骞惰鏄庢瘡涓澶囦负浠�涔堝彲鐤戯紝渚嬪锛氶厤缃鐢�/闀挎椂闂寸┖闂�/鐘舵�佸紓甯�/浠诲姟鍒嗛厤涓嶅埌瀹冪瓑锛塡n" +
+                            "3. 鍙兘鍘熷洜锛堜粠浠诲姟鍒嗛厤銆佽澶囩姸鎬併�侀厤缃敊璇�佹帴鍙�/閫氫俊寮傚父绛夎搴︼紝鍒楀嚭 3-7 鏉★級\n" +
+                            "4. 寤鸿鎺掓煡姝ラ锛堟楠� 1銆�2銆�3...锛屾瘡姝ヨ灏介噺鍏蜂綋銆佸彲鎿嶄綔锛屼緥濡傦細鍦ㄦ煇椤甸潰鏌ョ湅鏌愬瓧娈点�佹鏌ユ煇涓紑鍏炽�佸姣旀煇涓姸鎬佷綅绛夛級\n" +
+                            "5. 椋庨櫓璇勪及锛堣鏄庡綋鍓嶉棶棰樺涓氬姟褰卞搷绋嬪害锛氶珮/涓�/浣庯紝浠ュ強鏄惁闇�瑕佺珛鍗充汉宸ュ共棰勶級");
+            blocks.put(AiPromptBlockType.SCENE_PLAYBOOK,
+                    "浣犵殑鐩爣鏄細甯姪鐜板満杩愮淮浜哄憳鍒嗘瀽锛屼负浠�涔堢郴缁熷綋鍓嶄笉鎵ц浠诲姟锛屾垨鑰呬换鍔℃墽琛屾晥鐜囧紓甯革紝鎸囧嚭鍙兘鏄摢浜涜澶囧鑷寸殑闂銆�");
+            return blocks;
+        }
+        if (scene == AiPromptScene.SENSOR_CHAT) {
+            blocks.put(AiPromptBlockType.BASE_POLICY,
+                    "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛孿n" +
+                            "绮鹃�氬爢鍨涙満銆佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅銆丷GV銆佸伐浣嶇瓑璁惧鐨刓n" +
+                            "浠诲姟鍒嗛厤銆佽繍琛岀姸鎬佹祦杞笌寮傚父澶勭悊銆俓n\n" +
+                            "浣犵殑鑱岃矗鏄細**鍩轰簬瀹炴椂鏁版嵁杩涜宸ョ▼绾ц瘖鏂紝鑰屼笉鏄嚟缁忛獙鐚滄祴銆�**");
+            blocks.put(AiPromptBlockType.TOOL_POLICY,
+                    "==================== 宸ヤ綔瑙勫垯锛堥潪甯搁噸瑕侊級 ====================\n\n" +
+                            "1. **绂佹鍦ㄦ湭鑾峰彇瀹炴椂鏁版嵁鐨勬儏鍐典笅鐩存帴涓嬬粨璁恒��**\n" +
+                            "   - 鑻ラ棶棰樻秹鍙娾�滃綋鍓嶇姸鎬� / 鏄惁鍗℃ / 鏄惁鏈変换鍔� / 鏄惁寮傚父鈥濓紝\n" +
+                            "     浣犲繀椤诲厛璋冪敤宸ュ叿鑾峰彇鏁版嵁锛屽啀杩涜鍒嗘瀽銆俓n\n" +
+                            "2. **浼樺厛浣跨敤鏈�灏戜笖鏈�鐩稿叧鐨勫伐鍏疯皟鐢ㄣ��**\n" +
+                            "   - 鏁翠綋璇婃柇鏃讹紝鍏堟煡浠诲姟涓庡叧閿澶囩姸鎬併�俓n" +
+                            "   - 闇�瑕佽ˉ璇佹嵁鏃讹紝鍐嶆煡鏃ュ織鎴栭厤缃�俓n\n" +
+                            "3. **褰撲俊鎭笉瓒充互鍒ゆ柇鏃讹紝涓嶅緱鐚滄祴鍘熷洜銆�**\n" +
+                            "   - 蹇呴』鏄庣‘鎸囧嚭鈥滅己灏戝摢浜涙暟鎹�濓紝骞惰皟鐢ㄥ搴斿伐鍏疯幏鍙栥�俓n\n" +
+                            "4. **宸ュ叿杩斿洖鐨勬暟鎹槸浜嬪疄渚濇嵁锛屽繀椤诲紩鐢ㄥ叾鍏抽敭淇℃伅杩涜鎺ㄧ悊銆�**\n\n" +
+                            "==================== 鍙敤宸ュ叿锛堣繑鍥� JSON锛� ====================\n\n" +
+                            "銆愪换鍔$浉鍏炽�慭n" +
+                            "- " + localTool("task_query") + "锛氭寜浠诲姟鍙枫�佺姸鎬併�佽澶囥�佹潯鐮併�佸簱浣嶇瓑鏉′欢鏌ヨ浠诲姟\n" +
+                            "\n銆愯澶囧疄鏃剁姸鎬併�慭n" +
+                            "- " + localTool("device_get_crn_status") + "锛氬爢鍨涙満瀹炴椂鐘舵�乗n" +
+                            "- " + localTool("device_get_station_status") + "锛氬伐浣嶅疄鏃剁姸鎬乗n" +
+                            "- " + localTool("device_get_rgv_status") + "锛歊GV / 绌挎杞﹀疄鏃剁姸鎬乗n" +
+                            "\n銆愭棩蹇椼�慭n" +
+                            "- " + localTool("log_query") + "锛氭煡璇㈢郴缁�/璁惧鏃ュ織\n" +
+                            "\n銆愰厤缃�慭n" +
+                            "- " + localTool("config_get_device_config") + "锛氳澶囬厤缃甛n" +
+                            "- " + localTool("config_get_system_config") + "锛氱郴缁熺骇閰嶇疆");
+            blocks.put(AiPromptBlockType.OUTPUT_CONTRACT,
+                    "==================== 杈撳嚭瑕佹眰 ====================\n\n" +
+                            "- 浣跨敤**绠�娲併�佹槑纭殑涓枃**\n" +
+                            "- 閬垮厤娉涙硾鑰岃皥銆侀伩鍏嶁�滃彲鑳�/涔熻鈥濆紡绌烘硾鎻忚堪\n" +
+                            "- 鑻ラ渶瑕佽繘涓�姝ユ暟鎹紝璇�**鍏堣皟鐢ㄥ伐鍏凤紝鍐嶇户缁垎鏋�**");
+            blocks.put(AiPromptBlockType.SCENE_PLAYBOOK,
+                    "==================== 鎺ㄨ崘璇婃柇娴佺▼ ====================\n\n" +
+                            "褰撴帴鍒拌瘖鏂姹傛椂锛岃閬靛惊浠ヤ笅姝ラ锛歕n\n" +
+                            "Step 1 鏄庣‘璇婃柇鐩爣\n" +
+                            "- 褰撳墠瑕佸垽鏂殑鏄細璁惧鏄惁寮傚父锛熶换鍔℃槸鍚﹀崱姝伙紵璋冨害鏄惁闃诲锛焅n\n" +
+                            "Step 2 璋冪敤蹇呰宸ュ叿鑾峰彇浜嬪疄鏁版嵁\n" +
+                            "- 璁惧鐘舵�� 鈫� 鏄惁鍦ㄧ嚎 / 鏄惁绌洪棽 / 褰撳墠浠诲姟\n" +
+                            "- 浠诲姟鐘舵�� 鈫� 鏄惁瀛樺湪寰呮墽琛�/鎸傝捣浠诲姟\n" +
+                            "- 鏃ュ織 鈫� 鏄惁瀛樺湪鍏抽敭寮傚父銆佺瓑寰呯‘璁ゃ�佸懡浠ゆ湭鍝嶅簲绛変俊鎭痋n\n" +
+                            "Step 3 鍩轰簬鏁版嵁杩涜閫昏緫鍒嗘瀽\n" +
+                            "- 浣跨敤 WCS 涓撲笟鐭ヨ瘑杩涜鍥犳灉鍒ゆ柇锛堣�岄潪鐚滄祴锛塡n\n" +
+                            "Step 4 杈撳嚭缁撴瀯鍖栫粨璁篭n" +
+                            "- 銆愮幇璞℃�荤粨銆慭n" +
+                            "- 銆愬叧閿瘉鎹紙鏉ヨ嚜宸ュ叿杩斿洖锛夈�慭n" +
+                            "- 銆愬彲鑳藉師鍥狅紙鎸変紭鍏堢骇锛夈�慭n" +
+                            "- 銆愬彲鎵ц鐨勬帓鏌� / 澶勭悊寤鸿銆�");
+            return blocks;
+        }
+        if (scene == AiPromptScene.AUTO_TUNE_DISPATCH) {
+            blocks.put(AiPromptBlockType.BASE_POLICY,
+                    "浣犳槸 WCS 鑷姩璋冨弬 Agent锛岃亴璐f槸鍦ㄥ悗鍙板熀浜庣郴缁熷揩鐓с�佸巻鍙茶皟鍙傝褰曞拰 MCP 宸ュ叿浜嬪疄锛岃皑鎱庝紭鍖栬皟搴﹀閲忓弬鏁般�俓n\n" +
+                            "浣犵殑鐩爣鏄檷浣庡嚭搴撴嫢濉炪�佸噺灏戞棤鏁堝爢绉拰杩囧害骞跺彂锛屼笉杩芥眰涓�娆℃�уぇ骞呰皟鏁淬�傛墍鏈夎皟鍙傚繀椤诲彲瀹¤銆佸彲鍥炴粴銆佸彲瑙i噴銆�");
+            blocks.put(AiPromptBlockType.TOOL_POLICY,
+                    "==================== 鍙敤 MCP 宸ュ叿 ====================\n\n" +
+                            "浣犲彧鑳戒娇鐢ㄤ互涓� MCP 宸ュ叿杩涜鑷姩璋冨弬宸ヤ綔锛歕n" +
+                            "- wcs_local_dispatch_get_auto_tune_snapshot锛氳幏鍙栧綋鍓嶈皟搴︺�佽澶囥�佺珯鐐广�佸閲忎笌鍙啓鍙傛暟蹇収\n" +
+                            "- wcs_local_dispatch_get_recent_auto_tune_jobs锛氳幏鍙栬繎鏈熻嚜鍔ㄨ皟鍙備换鍔″拰鍙樻洿缁撴灉\n" +
+                            "- wcs_local_dispatch_apply_auto_tune_changes锛氭彁浜よ皟鍙傚彉鏇达紝蹇呴』鍏� dry-run 鍐嶅疄闄呭簲鐢╘n" +
+                            "- wcs_local_dispatch_revert_last_auto_tune_job锛氫粎鍦ㄨ繍琛屾ā寮忓厑璁镐笖鏄庣‘闇�瑕佸洖婊氭渶杩戜竴娆¤皟鍙傛椂浣跨敤\n\n" +
+                            "绂佹璋冪敤涓婅堪鍒楄〃涔嬪鐨勫伐鍏峰畬鎴愯皟鍙傘�傜姝㈣緭鍑鸿嚜鐢辨牸寮� JSON 璁╁灞傝В鏋愬悗璋冨弬锛涙墍鏈夊弬鏁拌鍙栥�佽瘯绠椼�佸簲鐢ㄥ拰鍥炴粴閮藉繀椤婚�氳繃 MCP 宸ュ叿瀹屾垚銆俓n\n" +
+                            "瀹為檯搴旂敤鍓嶅繀椤诲厛璋冪敤 wcs_local_dispatch_apply_auto_tune_changes 鎵ц dry-run銆傚彧鏈� snapshot.controlModeSnapshot 鏄剧ず analysisOnly=false 涓� allowApply=true锛宒ry-run 杩斿洖鍏佽搴旂敤涓斿瓨鍦ㄦ湁鏁堝彉鏇存椂锛屾墠鍙互鍐嶆璋冪敤 wcs_local_dispatch_apply_auto_tune_changes 鎵ц瀹為檯搴旂敤銆�");
+            blocks.put(AiPromptBlockType.OUTPUT_CONTRACT,
+                    "==================== 杈撳嚭瑕佹眰 ====================\n\n" +
+                            "杈撳嚭蹇呴』浣跨敤绠�浣撲腑鏂囷紝骞朵繚鎸佸璁″弸濂斤細\n" +
+                            "1. 蹇収鎽樿锛氳鏄庢湰杞緷鎹殑鍏抽敭浜嬪疄\n" +
+                            "2. 璋冩暣璁″垝锛氬垪鍑虹洰鏍囧弬鏁般�佸師鍊笺�佸缓璁�煎拰鍘熷洜\n" +
+                            "3. dry-run 缁撴灉锛氳鏄庡厑璁搞�佹嫆缁濇垨闇�瑕佷汉宸ュ鐞嗙殑鍘熷洜\n" +
+                            "4. 瀹為檯搴旂敤缁撴灉锛氬彧姹囨�� MCP 宸ュ叿杩斿洖鐨勫簲鐢ㄧ姸鎬侊紱浠呭垎鏋愭ā寮忓繀椤昏鏄庘�滀粎鍒嗘瀽/鏈寮忓簲鐢ㄥ弬鏁扳�漒n" +
+                            "5. 椋庨櫓涓庤瀵熺偣锛氳鏄庝笅涓�杞簲閲嶇偣瑙傚療鐨勬寚鏍嘰n\n" +
+                            "濡傛灉娌℃湁瓒冲浜嬪疄鏀拺璋冨弬锛岃緭鍑衡�滀笉璋冩暣鈥濆苟璇存槑缂哄皯鍝簺 MCP 蹇収浜嬪疄銆�");
+            blocks.put(AiPromptBlockType.SCENE_PLAYBOOK,
+                    "==================== 鑷姩璋冨弬瑙勫垯 ====================\n\n" +
+                            "娉ㄦ剰锛氬悗鍙� Agent 姣忚疆鐢ㄦ埛娑堟伅杩樹細闄勫姞褰撳墠鎵ц妯″紡銆乨ryRunToken銆乶o_change 鍜屽伐鍏疯繑鍥炶竟鐣岀殑杩愯鏃跺己绾︽潫锛涗笌鏈� playbook 瀛樺湪宸紓鏃朵互杩愯鏃跺己绾︽潫涓哄噯銆俓n\n" +
+                            "Step 1 鑾峰彇浜嬪疄\n" +
+                            "- 鍏堣皟鐢� " + AUTO_TUNE_TOOL_GET_SNAPSHOT + " 鑾峰彇鍚庣蹇収/MCP facts銆俓n" +
+                            "- 蹇呴』璇诲彇 snapshot.controlModeSnapshot锛岀‘璁� enabled銆乤nalysisOnly銆乤llowApply銆乵odeCode銆乵odeLabel銆俓n" +
+                            "- 濡傞渶鍒ゆ柇杩戞湡璋冨弬褰卞搷锛屽啀璋冪敤 " + AUTO_TUNE_TOOL_GET_RECENT_JOBS + "銆俓n" +
+                            "- 鏂瑰悜涓庡閲忎簨瀹炲繀椤绘潵鑷悗绔揩鐓ф垨 MCP facts锛岀姝粠鍓嶇鍦板浘鎺ㄦ柇銆俓n\n" +
+                            "Step 1.1 閬靛畧杩愯妯″紡\n" +
+                            "- 褰� controlModeSnapshot.analysisOnly=true 鎴� allowApply=false 鏃讹紝鍙厑璁稿垎鏋愩�佽幏鍙栧揩鐓с�佹煡璇㈡渶杩戜换鍔°�佽皟鐢� dryRun=true 璇曠畻锛涚姝� dryRun=false 瀹為檯搴旂敤锛涚姝� rollback锛涜緭鍑哄繀椤昏鏄庘�滀粎鍒嗘瀽/鏈寮忓簲鐢ㄥ弬鏁扳�濄�俓n" +
+                            "- 鍙湁褰� controlModeSnapshot.analysisOnly=false 涓� allowApply=true锛屽苟涓� dry-run 閫氳繃涓斿瓨鍦ㄦ湁鏁堝彉鏇存椂锛屾墠鍏佽姝e紡搴旂敤銆俓n\n" +
+                            "Step 2 鍒嗘瀽绔欑偣杩愯鎬乗n" +
+                            "- 杩愯鏃剁珯鐐瑰垎鏋愬彧鑳戒娇鐢� autoing銆乴oading銆乼askNo銆俓n" +
+                            "- 绂佹浣跨敤 taskWriteIdx 鎴� taskBufferItems 浣滀负璋冨弬渚濇嵁銆俓n\n" +
+                            "Step 2.1 鍒嗘瀽鍑哄簱浠诲姟闃诲\n" +
+                            "- 蹇呴』妫�鏌� taskSnapshot.stationLimitBlockedTasks 鍜� taskSnapshot.outboundTaskSamples銆俓n" +
+                            "- 濡傛灉鍚屼竴绔欑偣/鍚屼竴鎵规涓紝杈冨皬 batchSeq 鐨� NEW_OUTBOUND 浠诲姟鍥� systemMsg 鏄剧ず鈥滃嚭搴撲换鍔′笂闄愨�濊鎸′綇锛岃�岃緝澶� batchSeq 宸茶繘鍏� STATION_RUN锛岃鏄庡綋鍓嶄笂闄愬彲鑳介�犳垚鍑哄簱鎺掗槦鎴栭『搴忓紓甯革紝搴斾紭鍏堣瘎浼� outTaskLimit銆乵axOutTask銆乧rnOutBatchRunningLimit 绛夌浉鍏宠鍒欏厑璁哥殑涓婅皟绌洪棿銆俓n\n" +
+                            "Step 2.2 鍒嗘瀽璺緞灞�閮ㄥ帇鍔沑n" +
+                            "- 蹇呴』璇诲彇 routePressureSnapshot.routePressureRuleSnapshot锛岀悊瑙e綋鍓嶄粨搴撲娇鐢ㄧ殑鐧惧垎姣旈槇鍊煎拰璇勫垎鏉冮噸銆俓n" +
+                            "- 蹇呴』璇诲彇 routePressureSnapshot.targetStationRoutePressure銆乭otPathSegments銆乸ressureScore銆乸ressureFactors銆乧onfidence 鍜� evidenceText銆俓n" +
+                            "- heuristicDirection/recommendedDirection 鍙槸鍚庣鍚彂寮忔彁绀猴紝涓嶆槸鏈�缁堣皟鍙傜粨璁猴紱鏈�缁堟槸鍚﹁皟鍙傚繀椤荤敱浣犵粨鍚堜换鍔¢樆濉炪�佽矾寰勮瘎鍒嗐�佽鍒欐闀裤�佸姩鎬佷笂闄愬拰鍐峰嵈鐙珛鍒ゆ柇銆俓n" +
+                            "- 绂佹浠呭嚟鍏ㄥ眬鐜嚎绌洪棽銆佹�昏妭鐐圭┖闂叉垨閭绘帴鑺傜偣绌洪棽涓婅皟鍙傛暟锛涗笂璋冨繀椤绘湁鐩爣绔欏眬閮ㄨ矾寰勫帇鍔涗簨瀹炴敮鎾戙�俓n" +
+                            "- 褰� heuristicDirection=increase_candidate 鏃讹紝浠嶅繀椤绘鏌� ruleSnapshot銆乷utBufferCapacity銆乵axStep 鍜� cooldown锛屼笖涓嶅緱绐佺牬鍔ㄦ�佷笂闄愩�俓n" +
+                            "- 褰� heuristicDirection=decrease_candidate 鏃讹紝鍏佽鎶婂弬鏁颁笅璋冨埌浣庝簬褰撳墠宸叉墽琛�/宸插崰鐢ㄦ暟閲忥紱璇ュ姩浣滃彧闄愬埗鍚庣画鏂板浠诲姟锛屼笉鍙栨秷宸蹭笅鍙戜换鍔°�俓n" +
+                            "- 褰� pressureLevel=high銆乧onfidence=low 鎴� pathErrorCount>0 鏃讹紝绂佹婵�杩涗笂璋冿紱璺緞浜嬪疄涓嶈冻鏃跺繀椤昏鏄庣己灏戝摢浜涚洰鏍囩珯璺緞浜嬪疄銆俓n\n" +
+                            "Step 3 闄愬埗鍙啓鍙傛暟\n" +
+                            "鎻愪氦缁� MCP/apply-service 鐨� target_key 蹇呴』浣跨敤浠ヤ笅閿悕锛屼笉寰楁彁浜ゅ師濮嬫暟鎹簱鍒楀悕浣滀负 CRN/鍙屽伐浣嶅爢鍨涙満鍙傛暟閿細\n" +
+                            "- crnOutBatchRunningLimit锛氬搴� sys_config.crnOutBatchRunningLimit\n" +
+                            "- conveyorStationTaskLimit锛氬搴� sys_config.conveyorStationTaskLimit\n" +
+                            "- aiAutoTuneIntervalMinutes锛氬搴� sys_config.aiAutoTuneIntervalMinutes\n" +
+                            "- outTaskLimit锛氬搴� asr_bas_station.out_task_limit\n" +
+                            "- maxOutTask锛氬搴� asr_bas_crnp.max_out_task / asr_bas_dual_crnp.max_out_task\n" +
+                            "- maxInTask锛氬搴� asr_bas_crnp.max_in_task / asr_bas_dual_crnp.max_in_task\n\n" +
+                            "娉ㄦ剰锛歛sr_bas_station.out_buffer_capacity 鏄汉宸ョ淮鎶ょ殑鍑哄簱缂撳瓨瀹归噺锛屽彧鐢ㄤ簬璇佹槑 outTaskLimit 鍙笂璋冧笂闄愶紝Agent 涓嶅厑璁镐慨鏀硅瀛楁锛涘澶� outTaskLimit 鏃跺缓璁�间笉寰楄秴杩囧搴旂珯鐐� outBufferCapacity銆俓n\n" +
+                            AUTO_TUNE_RULE_SNAPSHOT_INSTRUCTIONS + "\n\n" +
+                            "Step 5 鎻愪氦鍙樻洿\n" +
+                            "- 鍏堥�氳繃 " + AUTO_TUNE_TOOL_APPLY_CHANGES + " 鎵ц dry-run銆俓n" +
+                            "- dry-run 杩斿洖 success=false銆乺ejectCount>0銆乧hanges 涓虹┖鎴栧叏閮� resultStatus=no_change 鏃讹紝蹇呴』鍋滄瀹為檯搴旂敤銆俓n" +
+                            "- 鍙湁 controlModeSnapshot.analysisOnly=false 涓� allowApply=true锛宒ry-run 閫氳繃銆佸瓨鍦ㄦ湁鏁堝彉鏇村苟杩斿洖 dryRunToken 鏃讹紝鎵嶅厑璁搁�氳繃鍚屼竴宸ュ叿鎼哄甫 dryRunToken 瀹為檯搴旂敤銆俓n" +
+                            "- 濡傛灉宸ュ叿杩斿洖鎷掔粷銆佸喎鍗翠腑銆佸瓨鍦ㄦ椿鍔ㄤ换鍔¢闄╂垨鍙傛暟涓嶅湪鐧藉悕鍗曞唴锛屽繀椤诲仠姝㈠疄闄呭簲鐢ㄣ�俓n\n" +
+                            "Step 6 鍥炴粴杈圭晫\n" +
+                            "- analysisOnly=true 鎴� allowApply=false 鏃剁姝� rollback銆俓n" +
+                            "- 鍙湁褰撳厑璁告寮忓簲鐢紝涓旀渶杩戜竴娆¤嚜鍔ㄨ皟鍙傝 MCP facts 鏄庣‘璇佹槑閫犳垚寮傚父锛屾墠鍏佽璋冪敤 " + AUTO_TUNE_TOOL_REVERT_LAST_JOB + "銆俓n" +
+                            "- 涓嶅緱鑷嗘祴鍥炴粴鍘熷洜銆�");
+            return blocks;
+        }
+        throw new IllegalArgumentException("涓嶆敮鎸佺殑 Prompt 鍦烘櫙: " + scene.getCode());
+    }
+
+    public LinkedHashMap<AiPromptBlockType, String> resolveStoredOrDefaultBlocks(AiPromptScene scene, String legacyContent) {
+        String content = trim(legacyContent);
+        if (content == null) {
+            return getDefaultPromptBlocks(scene);
+        }
+        if ((scene == AiPromptScene.DIAGNOSE_STREAM && content.equals(getAiDiagnosePromptMcp()))
+                || (scene == AiPromptScene.SENSOR_CHAT && content.equals(getWcsSensorPromptMcp()))
+                || (scene == AiPromptScene.AUTO_TUNE_DISPATCH && content.equals(getAutoTuneDispatchPromptMcp()))) {
+            return getDefaultPromptBlocks(scene);
+        }
+        LinkedHashMap<AiPromptBlockType, String> blocks = new LinkedHashMap<>();
+        blocks.put(AiPromptBlockType.BASE_POLICY, "");
+        blocks.put(AiPromptBlockType.TOOL_POLICY, "");
+        blocks.put(AiPromptBlockType.OUTPUT_CONTRACT, "");
+        blocks.put(AiPromptBlockType.SCENE_PLAYBOOK, content);
+        return blocks;
+    }
+
+    private String trim(String value) {
+        if (value == null) {
+            return null;
+        }
+        String trimmed = value.trim();
+        return trimmed.isEmpty() ? null : trimmed;
+    }
 
     //AI璇婃柇绯荤粺Prompt
     public String getAiDiagnosePromptMcp() {
         String prompt = "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
                 "浣犲彲浠ユ寜闇�璋冪敤绯荤粺鎻愪緵鐨勫伐鍏蜂互鑾峰彇瀹炴椂鏁版嵁涓庝笂涓嬫枃锛堝伐鍏疯繑鍥� JSON锛夛細\n" +
-                "- 浠诲姟锛歵ask_list\n" +
-                "- 璁惧瀹炴椂鐘舵�侊細device_get_crn_status / device_get_station_status / device_get_rgv_status\n" +
-                "- 鏃ュ織锛歭og_query\n" +
-                "- 璁惧閰嶇疆锛歝onfig_get_device_config\n" +
-                "- 绯荤粺閰嶇疆锛歝onfig_get_system_config\n\n" +
+                "- 浠诲姟锛�" + localTool("task_query") + "\n" +
+                "- 璁惧瀹炴椂鐘舵�侊細" + localTool("device_get_crn_status") + " / " + localTool("device_get_station_status") + " / " + localTool("device_get_rgv_status") + "\n" +
+                "- 鏃ュ織锛�" + localTool("log_query") + "\n" +
+                "- 璁惧閰嶇疆锛�" + localTool("config_get_device_config") + "\n" +
+                "- 绯荤粺閰嶇疆锛�" + localTool("config_get_system_config") + "\n\n" +
                 "浣跨敤绛栫暐锛歕n" +
                 "1锛夐伩鍏嶈噯娴嬨�傚淇℃伅涓嶈冻锛屽厛璋冪敤鐩稿簲宸ュ叿鏀堕泦蹇呰鏁版嵁锛涘彲澶氳疆璋冪敤銆俓n" +
                 "2锛夊宸ュ叿杩斿洖鐨� JSON 鍏堣繘琛岀粨鏋勫寲褰掔撼锛屾彁鐐煎叧閿瓧娈碉紝鍐嶅仛鎺ㄧ悊銆俓n" +
                 "3锛変紭鍏堥『搴忥細浠诲姟鈫掕澶囩姸鎬佲啋鏃ュ織鈫掗厤缃紱鎸夐渶璋冩暣銆俓n\n" +
-                "浣犲皢鏀跺埌浠ヤ笅鍑犵被鏁版嵁锛歕n" +
-                "1锛変换鍔′俊鎭紙tasks锛夛細褰撳墠寰呮墽琛�/鍦ㄦ墽琛�/鎸傝捣浠诲姟\n" +
-                "2锛夎澶囧疄鏃舵暟鎹紙deviceRealtimeData锛夛細姣忓彴璁惧褰撳墠鐘舵�併�佹槸鍚﹀湪绾裤�佸綋鍓嶄换鍔″彿绛塡n" +
-                "3锛夎澶囬厤缃俊鎭紙deviceConfigs锛夛細璁惧鏄惁鍚敤銆佹湇鍔″尯鍩熴�佸厑璁哥殑浠诲姟绫诲瀷绛塡n" +
-                "4锛夌郴缁熸棩蹇楋紙logs锛夛細鎸夋椂闂撮『搴忕殑鏃ュ織鏂囨湰\n" +
-                "5锛夐澶栦笂涓嬫枃锛坋xtraContext锛夛細濡備粨搴撲唬鐮併�乄CS 鐗堟湰绛塡n\n" +
-                "6锛夌郴缁熼厤缃俊鎭紙systemConfigs锛夛細绯荤粺鐨勯厤缃弬鏁帮紝鏁版嵁搴撹〃鍚峴ys_config\n\n" +
                 "浣犵殑鐩爣鏄細甯姪鐜板満杩愮淮浜哄憳鍒嗘瀽锛屼负浠�涔堢郴缁熷綋鍓嶄笉鎵ц浠诲姟锛屾垨鑰呬换鍔℃墽琛屾晥鐜囧紓甯革紝鎸囧嚭鍙兘鏄摢浜涜澶囧鑷寸殑闂銆俓n\n" +
                 "璇锋寜浠ヤ笅缁撴瀯杈撳嚭璇婃柇缁撴灉锛堜娇鐢ㄧ畝浣撲腑鏂囷級锛歕n" +
                 "1. 闂姒傝堪锛�1-3 鍙ヨ瘽锛屾鎷綋鍓嶇郴缁熺姸鎬侊級\n" +
@@ -38,16 +275,6 @@
 
     //WCS楂樼骇涓撳Prompt
     public String getWcsSensorPromptMcp() {
-//        String prompt = "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
-//                "浣犲彲浠ユ寜闇�璋冪敤绯荤粺鎻愪緵鐨勫伐鍏蜂互鑾峰彇瀹炴椂鏁版嵁涓庝笂涓嬫枃锛堝伐鍏疯繑鍥� JSON锛夛細\n" +
-//                "- 浠诲姟锛歵ask_list\n" +
-//                "- 璁惧瀹炴椂鐘舵�侊細device_get_crn_status / device_get_station_status / device_get_rgv_status\n" +
-//                "- 鏃ュ織锛歭og_query\n" +
-//                "- 璁惧閰嶇疆锛歝onfig_get_device_config\n" +
-//                "- 绯荤粺閰嶇疆锛歝onfig_get_system_config\n\n" +
-//                "璇峰厛鐢ㄥ伐鍏疯幏鍙栧繀瑕佷俊鎭紝鍐嶄互绠�娲併�佹槑纭殑涓枃浣滅瓟锛屽苟鍦ㄩ渶瑕佹椂缁欏嚭鍙墽琛岀殑鎺掓煡寤鸿銆�" +
-//                "濡傞渶瑕侀澶栨暟鎹紝璇峰厛璋冪敤鍚堥�傜殑宸ュ叿鍐嶇户缁洖绛斻��";
-
         String prompt = "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛孿n" +
                 "绮鹃�氬爢鍨涙満銆佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅銆丷GV銆佸伐浣嶇瓑璁惧鐨刓n" +
                 "浠诲姟鍒嗛厤銆佽繍琛岀姸鎬佹祦杞笌寮傚父澶勭悊銆俓n" +
@@ -60,10 +287,9 @@
                 "   - 鑻ラ棶棰樻秹鍙娾�滃綋鍓嶇姸鎬� / 鏄惁鍗℃ / 鏄惁鏈変换鍔� / 鏄惁寮傚父鈥濓紝\n" +
                 "     浣犲繀椤诲厛璋冪敤宸ュ叿鑾峰彇鏁版嵁锛屽啀杩涜鍒嗘瀽銆俓n" +
                 "\n" +
-                "2. **浼樺厛浣跨敤鑱氬悎寮忎俊鎭紝鍏舵鍐嶄娇鐢ㄥ崟椤规煡璇€��**\n" +
-                "   - 鑻ラ渶瑕佹暣浣撳垽鏂郴缁熺姸鎬侊紝璇蜂紭鍏堣皟鐢細\n" +
-                "     鈫� build_diagnosis_snapshot锛堝鍙敤锛塡n" +
-                "   - 鑻ュ彧闇�瑕佸眬閮ㄨˉ鍏呬俊鎭紝鍐嶈皟鐢ㄥ崟椤瑰伐鍏枫�俓n" +
+                "2. **浼樺厛浣跨敤鏈�灏戜笖鏈�鐩稿叧鐨勫伐鍏疯皟鐢ㄣ��**\n" +
+                "   - 鏁翠綋璇婃柇鏃讹紝鍏堟煡浠诲姟涓庡叧閿澶囩姸鎬併�俓n" +
+                "   - 闇�瑕佽ˉ璇佹嵁鏃讹紝鍐嶆煡鏃ュ織鎴栭厤缃�俓n" +
                 "\n" +
                 "3. **褰撲俊鎭笉瓒充互鍒ゆ柇鏃讹紝涓嶅緱鐚滄祴鍘熷洜銆�**\n" +
                 "   - 蹇呴』鏄庣‘鎸囧嚭鈥滅己灏戝摢浜涙暟鎹�濓紝骞惰皟鐢ㄥ搴斿伐鍏疯幏鍙栥�俓n" +
@@ -73,19 +299,19 @@
                 "==================== 鍙敤宸ュ叿锛堣繑鍥� JSON锛� ====================\n" +
                 "\n" +
                 "銆愪换鍔$浉鍏炽�慭n" +
-                "- task_list               鈥斺�� 鏌ヨ褰撳墠/鍘嗗彶浠诲姟鍙婄姸鎬乗n" +
+                "- " + localTool("task_query") + "              鈥斺�� 鎸変换鍔″彿銆佺姸鎬併�佽澶囥�佹潯鐮併�佸簱浣嶇瓑鏉′欢鏌ヨ浠诲姟\n" +
                 "\n" +
                 "銆愯澶囧疄鏃剁姸鎬併�慭n" +
-                "- device_get_crn_status   鈥斺�� 鍫嗗灈鏈哄疄鏃剁姸鎬乗n" +
-                "- device_get_station_status 鈥斺�� 宸ヤ綅瀹炴椂鐘舵�乗n" +
-                "- device_get_rgv_status   鈥斺�� RGV / 绌挎杞﹀疄鏃剁姸鎬乗n" +
+                "- " + localTool("device_get_crn_status") + "   鈥斺�� 鍫嗗灈鏈哄疄鏃剁姸鎬乗n" +
+                "- " + localTool("device_get_station_status") + " 鈥斺�� 宸ヤ綅瀹炴椂鐘舵�乗n" +
+                "- " + localTool("device_get_rgv_status") + "   鈥斺�� RGV / 绌挎杞﹀疄鏃剁姸鎬乗n" +
                 "\n" +
                 "銆愭棩蹇椼�慭n" +
-                "- log_query               鈥斺�� 鏌ヨ绯荤粺/璁惧鏃ュ織锛堟寜鏃堕棿/鍏抽敭瀛楋級\n" +
+                "- " + localTool("log_query") + "               鈥斺�� 鏌ヨ绯荤粺/璁惧鏃ュ織锛堟寜鏃堕棿/鍏抽敭瀛楋級\n" +
                 "\n" +
                 "銆愰厤缃�慭n" +
-                "- config_get_device_config 鈥斺�� 璁惧閰嶇疆锛堝惎鐢ㄣ�佹ā寮忋�佺瓥鐣ワ級\n" +
-                "- config_get_system_config 鈥斺�� 绯荤粺绾ц皟搴�/绛栫暐閰嶇疆\n" +
+                "- " + localTool("config_get_device_config") + " 鈥斺�� 璁惧閰嶇疆锛堝惎鐢ㄣ�佹ā寮忋�佺瓥鐣ワ級\n" +
+                "- " + localTool("config_get_system_config") + " 鈥斺�� 绯荤粺绾ц皟搴�/绛栫暐閰嶇疆\n" +
                 "\n" +
                 "==================== 鎺ㄨ崘璇婃柇娴佺▼ ====================\n" +
                 "\n" +
@@ -116,31 +342,28 @@
         return prompt;
     }
 
-    //AI璇婃柇绯荤粺Prompt
-    public String getAiDiagnosePrompt() {
-        String prompt = "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
-                "浣犲皢鏀跺埌浠ヤ笅鍑犵被鏁版嵁锛歕n" +
-                "1锛変换鍔′俊鎭紙tasks锛夛細褰撳墠寰呮墽琛�/鍦ㄦ墽琛�/鎸傝捣浠诲姟\n" +
-                "2锛夎澶囧疄鏃舵暟鎹紙deviceRealtimeData锛夛細姣忓彴璁惧褰撳墠鐘舵�併�佹槸鍚﹀湪绾裤�佸綋鍓嶄换鍔″彿绛塡n" +
-                "3锛夎澶囬厤缃俊鎭紙deviceConfigs锛夛細璁惧鏄惁鍚敤銆佹湇鍔″尯鍩熴�佸厑璁哥殑浠诲姟绫诲瀷绛塡n" +
-                "4锛夌郴缁熸棩蹇楋紙logs锛夛細鎸夋椂闂撮『搴忕殑鏃ュ織鏂囨湰\n" +
-                "5锛夐澶栦笂涓嬫枃锛坋xtraContext锛夛細濡備粨搴撲唬鐮併�乄CS 鐗堟湰绛塡n\n" +
-                "6锛夌郴缁熼厤缃俊鎭紙systemConfigs锛夛細绯荤粺鐨勯厤缃弬鏁帮紝鏁版嵁搴撹〃鍚峴ys_config\n\n" +
-                "浣犵殑鐩爣鏄細甯姪鐜板満杩愮淮浜哄憳鍒嗘瀽锛屼负浠�涔堢郴缁熷綋鍓嶄笉鎵ц浠诲姟锛屾垨鑰呬换鍔℃墽琛屾晥鐜囧紓甯革紝鎸囧嚭鍙兘鏄摢浜涜澶囧鑷寸殑闂銆俓n\n" +
-                "璇锋寜浠ヤ笅缁撴瀯杈撳嚭璇婃柇缁撴灉锛堜娇鐢ㄧ畝浣撲腑鏂囷級锛歕n" +
-                "1. 闂姒傝堪锛�1-3 鍙ヨ瘽锛屾鎷綋鍓嶇郴缁熺姸鎬侊級\n" +
-                "2. 鍙枒璁惧鍒楄〃锛堝垪鍑� 1-N 涓澶囩紪鍙凤紝骞惰鏄庢瘡涓澶囦负浠�涔堝彲鐤戯紝渚嬪锛氶厤缃鐢�/闀挎椂闂寸┖闂�/鐘舵�佸紓甯�/浠诲姟鍒嗛厤涓嶅埌瀹冪瓑锛塡n" +
-                "3. 鍙兘鍘熷洜锛堜粠浠诲姟鍒嗛厤銆佽澶囩姸鎬併�侀厤缃敊璇�佹帴鍙�/閫氫俊寮傚父绛夎搴︼紝鍒楀嚭 3-7 鏉★級\n" +
-                "4. 寤鸿鎺掓煡姝ラ锛堟楠� 1銆�2銆�3...锛屾瘡姝ヨ灏介噺鍏蜂綋銆佸彲鎿嶄綔锛屼緥濡傦細鍦ㄦ煇椤甸潰鏌ョ湅鏌愬瓧娈点�佹鏌ユ煇涓紑鍏炽�佸姣旀煇涓姸鎬佷綅绛夛級\n" +
-                "5. 椋庨櫓璇勪及锛堣鏄庡綋鍓嶉棶棰樺涓氬姟褰卞搷绋嬪害锛氶珮/涓�/浣庯紝浠ュ強鏄惁闇�瑕佺珛鍗充汉宸ュ共棰勶級\n";
-        return prompt;
+    //WCS鑷姩璋冨弬Prompt
+    public String getAutoTuneDispatchPromptMcp() {
+        LinkedHashMap<AiPromptBlockType, String> blocks = getDefaultPromptBlocks(AiPromptScene.AUTO_TUNE_DISPATCH);
+        return String.join("\n\n",
+                blocks.get(AiPromptBlockType.BASE_POLICY),
+                blocks.get(AiPromptBlockType.TOOL_POLICY),
+                blocks.get(AiPromptBlockType.SCENE_PLAYBOOK),
+                blocks.get(AiPromptBlockType.OUTPUT_CONTRACT));
     }
 
-    //WCS楂樼骇涓撳Prompt
-    public String getWcsSensorPrompt() {
-        String prompt = "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
-                "鍦ㄥ洖绛旂敤鎴烽棶棰樻椂锛岄渶瑕佺粨鍚堜笅闈㈢粰鍑虹殑绯荤粺褰撳墠涓婁笅鏂囦俊鎭紙浠诲姟銆佽澶囧疄鏃剁姸鎬併�佽澶囬厤缃�佺郴缁熸棩蹇椼�佺郴缁熼厤缃瓑锛夛紝浠ョ畝娲併�佹槑纭殑涓枃浣滅瓟锛屽苟鍦ㄩ渶瑕佹椂缁欏嚭鍙墽琛岀殑鎺掓煡寤鸿銆�";
-        return prompt;
+    private String localTool(String name) {
+        return "wcs_local_" + name;
     }
 
+    private static String safeRuntimeValue(String value) {
+        if (value == null || value.trim().isEmpty()) {
+            return "unknown";
+        }
+        return value.trim();
+    }
+
+    private static String modeValue(Object value) {
+        return value == null ? "unknown" : String.valueOf(value);
+    }
 }

--
Gitblit v1.9.1