From 84dc5107cd8c40508a0b8fc85304a0e36b3f420e Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 四月 2026 10:01:56 +0800
Subject: [PATCH] feat: add auto tune schema and prompt scaffolding

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

diff --git a/src/main/java/com/zy/ai/utils/AiPromptUtils.java b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
index fc442f0..c8be348 100644
--- a/src/main/java/com/zy/ai/utils/AiPromptUtils.java
+++ b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
@@ -24,6 +24,9 @@
         if (scene == AiPromptScene.SENSOR_CHAT) {
             return getWcsSensorPromptMcp();
         }
+        if (scene == AiPromptScene.AUTO_TUNE_DISPATCH) {
+            return getAutoTuneDispatchPromptMcp();
+        }
         throw new IllegalArgumentException("涓嶆敮鎸佺殑 Prompt 鍦烘櫙: " + scene.getCode());
     }
 
@@ -115,6 +118,55 @@
                             "- 銆愬彲鎵ц鐨勬帓鏌� / 澶勭悊寤鸿銆�");
             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" +
+                            "- dispatch_get_auto_tune_snapshot锛氳幏鍙栧綋鍓嶈皟搴︺�佽澶囥�佺珯鐐广�佸閲忎笌鍙啓鍙傛暟蹇収\n" +
+                            "- dispatch_get_recent_auto_tune_jobs锛氳幏鍙栬繎鏈熻嚜鍔ㄨ皟鍙備换鍔″拰鍙樻洿缁撴灉\n" +
+                            "- dispatch_apply_auto_tune_changes锛氭彁浜よ皟鍙傚彉鏇达紝蹇呴』鍏� dry-run 鍐嶅疄闄呭簲鐢╘n" +
+                            "- dispatch_revert_last_auto_tune_job锛氫粎鍦ㄦ槑纭渶瑕佸洖婊氭渶杩戜竴娆¤皟鍙傛椂浣跨敤\n\n" +
+                            "绂佹璋冪敤涓婅堪鍒楄〃涔嬪鐨勫伐鍏峰畬鎴愯皟鍙傘�傜姝㈣緭鍑鸿嚜鐢辨牸寮� JSON 璁╁灞傝В鏋愬悗璋冨弬锛涙墍鏈夊弬鏁拌鍙栥�佽瘯绠椼�佸簲鐢ㄥ拰鍥炴粴閮藉繀椤婚�氳繃 MCP 宸ュ叿瀹屾垚銆俓n\n" +
+                            "瀹為檯搴旂敤鍓嶅繀椤诲厛璋冪敤 dispatch_apply_auto_tune_changes 鎵ц dry-run銆傚彧鏈� dry-run 杩斿洖鍏佽搴旂敤涓旀病鏈夐珮椋庨櫓鎷掔粷鍘熷洜鏃讹紝鎵嶅彲浠ュ啀娆¤皟鐢� 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" +
+                            "Step 1 鑾峰彇浜嬪疄\n" +
+                            "- 鍏堣皟鐢� dispatch_get_auto_tune_snapshot 鑾峰彇鍚庣蹇収/MCP facts銆俓n" +
+                            "- 濡傞渶鍒ゆ柇杩戞湡璋冨弬褰卞搷锛屽啀璋冪敤 dispatch_get_recent_auto_tune_jobs銆俓n" +
+                            "- 鏂瑰悜涓庡閲忎簨瀹炲繀椤绘潵鑷悗绔揩鐓ф垨 MCP facts锛岀姝粠鍓嶇鍦板浘鎺ㄦ柇銆俓n\n" +
+                            "Step 2 鍒嗘瀽绔欑偣杩愯鎬乗n" +
+                            "- 杩愯鏃剁珯鐐瑰垎鏋愬彧鑳戒娇鐢� autoing銆乴oading銆乼askNo銆俓n" +
+                            "- 绂佹浣跨敤 taskWriteIdx 鎴� taskBufferItems 浣滀负璋冨弬渚濇嵁銆俓n\n" +
+                            "Step 3 闄愬埗鍙啓鍙傛暟\n" +
+                            "- sys_config.crnOutBatchRunningLimit\n" +
+                            "- sys_config.conveyorStationTaskLimit\n" +
+                            "- sys_config.aiAutoTuneIntervalMinutes\n" +
+                            "- asr_bas_station.out_task_limit\n" +
+                            "- asr_bas_crnp.maxOutTask\n" +
+                            "- asr_bas_dual_crnp.maxOutTask\n" +
+                            "- asr_bas_crnp.maxInTask\n" +
+                            "- asr_bas_dual_crnp.maxInTask\n\n" +
+                            "Step 4 鎻愪氦鍙樻洿\n" +
+                            "- 鍏堥�氳繃 dispatch_apply_auto_tune_changes 鎵ц dry-run銆俓n" +
+                            "- dry-run 閫氳繃鍚庢墠鍏佽閫氳繃鍚屼竴宸ュ叿瀹為檯搴旂敤銆俓n" +
+                            "- 濡傛灉宸ュ叿杩斿洖鎷掔粷銆佸喎鍗翠腑銆佸瓨鍦ㄦ椿鍔ㄤ换鍔¢闄╂垨鍙傛暟涓嶅湪鐧藉悕鍗曞唴锛屽繀椤诲仠姝㈠疄闄呭簲鐢ㄣ�俓n\n" +
+                            "Step 5 鍥炴粴杈圭晫\n" +
+                            "- 鍙湁褰撴渶杩戜竴娆¤嚜鍔ㄨ皟鍙傝 MCP facts 鏄庣‘璇佹槑閫犳垚寮傚父锛屾墠鍏佽璋冪敤 dispatch_revert_last_auto_tune_job銆俓n" +
+                            "- 涓嶅緱鑷嗘祴鍥炴粴鍘熷洜銆�");
+            return blocks;
+        }
         throw new IllegalArgumentException("涓嶆敮鎸佺殑 Prompt 鍦烘櫙: " + scene.getCode());
     }
 
@@ -124,7 +176,8 @@
             return getDefaultPromptBlocks(scene);
         }
         if ((scene == AiPromptScene.DIAGNOSE_STREAM && content.equals(getAiDiagnosePromptMcp()))
-                || (scene == AiPromptScene.SENSOR_CHAT && content.equals(getWcsSensorPromptMcp()))) {
+                || (scene == AiPromptScene.SENSOR_CHAT && content.equals(getWcsSensorPromptMcp()))
+                || (scene == AiPromptScene.AUTO_TUNE_DISPATCH && content.equals(getAutoTuneDispatchPromptMcp()))) {
             return getDefaultPromptBlocks(scene);
         }
         LinkedHashMap<AiPromptBlockType, String> blocks = new LinkedHashMap<>();
@@ -236,6 +289,16 @@
         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));
+    }
+
     private String localTool(String name) {
         return "wcs_local_" + name;
     }

--
Gitblit v1.9.1