From 63b01db83d9aad8a15276b4236a9a22e4aeef065 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 05 五月 2026 12:30:59 +0800
Subject: [PATCH] # Agent数据分析V3.0.1.7
---
src/main/java/com/zy/ai/utils/AiPromptUtils.java | 326 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 314 insertions(+), 12 deletions(-)
diff --git a/src/main/java/com/zy/ai/utils/AiPromptUtils.java b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
index 3fed8c0..0a499f3 100644
--- a/src/main/java/com/zy/ai/utils/AiPromptUtils.java
+++ b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
@@ -1,10 +1,47 @@
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銆佽鍒� note锛屼互鍙婅鍒欐槑纭彁渚涚殑 dynamicMaxValue 鍜� dynamicMaxSource銆俓n" +
+ "- 鎵�鏈夋彁浜ょ粰 " + AUTO_TUNE_TOOL_APPLY_CHANGES + " 鐨� change 閮藉繀椤诲尮閰嶅搴� targetType/targetKey 鐨勮鍒欍�俓n" +
+ "- 姣忎釜鐩爣鍙傛暟鐨勬柊鍊煎繀椤绘弧瓒冲搴� minValue銆乵axValue銆乵axStep銆乧ooldownMinutes 鍜岃鍒� note锛涘彧鏈夎鍒欐湰韬槑纭彁渚� dynamicMaxValue/dynamicMaxSource 鏃讹紝鎵嶆寜璇ュ姩鎬佷笂闄愭牎楠岋紱涓嶅緱鎶� outBufferCapacity 鎺ㄥ涓� outTaskLimit 鐨勫姩鎬佷笂闄愶紱鎵句笉鍒拌鍒欐椂绂佹鎻愪氦銆�";
+
+ 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);
@@ -21,18 +58,258 @@
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锛沷utBufferCapacity 鍙〃绀虹珯鐐瑰嚭搴撶紦瀛樺閲忥紝鐢ㄤ簬璇勪及瓒呭嚭缂撳瓨鍚庣殑涓诲共閬撳崰鐢ㄩ闄╋紝涓嶆槸 outTaskLimit 鐨勭‖涓婇檺鎴栧姩鎬佷笂闄愩�俓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锛屼絾蹇呴』璇存槑瓒呭嚭缂撳瓨鍚庣殑涓诲共閬撳崰鐢ㄩ闄╋紝骞堕伒瀹� ruleSnapshot 涓� outTaskLimit 鑷韩鐨� minValue銆乵axValue銆乵axStep銆乧ooldownMinutes銆佽鍒� note 浠ュ強瑙勫垯鏄庣‘鎻愪緵鐨� dynamicMaxValue/dynamicMaxSource銆俓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;
+ }
+ if (scene == AiPromptScene.DATA_ANALYSIS) {
+ blocks.put(AiPromptBlockType.BASE_POLICY,
+ "浣犳槸涓�鍚� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級杩愯惀鏁版嵁鍒嗘瀽甯堬紝绮鹃�氳嚜鍔ㄥ寲绔嬪簱鐨勪换鍔¤皟搴︺�佽澶囪繍琛屽拰鏁呴殰鍒嗘瀽銆俓n\n" +
+ "浣犵殑鑱岃矗鏄細鍩轰簬绯荤粺鎻愪緵鐨勫巻鍙茶繍钀ユ暟鎹紝鐢熸垚缁撴瀯鍖栫殑鏁版嵁鍒嗘瀽鎶ュ憡锛屽府鍔╄繍缁翠汉鍛樹簡瑙d粨搴撹繍琛岀姸鍐点�佸彂鐜版綔鍦ㄩ棶棰樺苟鎻愬嚭浼樺寲寤鸿銆�");
+ blocks.put(AiPromptBlockType.TOOL_POLICY,
+ "==================== 鍙敤 MCP 宸ュ叿 ====================\n\n" +
+ "浣犲彲浠ヨ皟鐢ㄤ互涓嬪伐鍏疯幏鍙栬仛鍚堢粺璁℃暟鎹紙宸ュ叿杩斿洖 JSON锛夛細\n" +
+ "- " + localTool("analysis_query_task_throughput") + "锛氭煡璇换鍔″悶鍚愰噺锛堜换鍔℃�婚噺銆佸叆搴�/鍑哄簱/绉诲簱鏁伴噺銆佸钩鍧囨椂闀裤�佹晠闅滄眹鎬伙級\n" +
+ "- " + localTool("analysis_query_device_fault_summary") + "锛氭煡璇㈣澶囨晠闅滄眹鎬伙紙鎸夎澶囩被鍨嬬粺璁℃晠闅滄鏁板拰鏃堕暱锛塡n" +
+ "- " + localTool("analysis_query_device_utilization") + "锛氭煡璇㈣澶囧埄鐢ㄧ巼锛堟寜璁惧缂栧彿缁熻浠诲姟鍒嗛厤閲忋�佸钩鍧囨椂闀匡級\n" +
+ "- " + localTool("analysis_query_error_logs") + "锛氭煡璇㈣澶囬敊璇棩蹇楃粺璁★紙鎸夎澶囩被鍨嬬粺璁¢敊璇鏁帮級\n\n" +
+ "浣跨敤绛栫暐锛歕n" +
+ "1锛夊厛璋冪敤 throughput 鍜� fault 宸ュ叿鑾峰彇鎬讳綋姒傚喌銆俓n" +
+ "2锛夊鏈夊紓甯告寚鏍囷紝鍐嶈皟鐢� utilization 鍜� error_logs 娣卞叆鍒嗘瀽銆俓n" +
+ "3锛夋墍鏈夊伐鍏烽兘闇�瑕佷紶鍏� startTime 鍜� endTime 鍙傛暟銆俓n" +
+ "4锛夌姝㈣噯娴嬶紝鎵�鏈夋暟鎹繀椤绘潵鑷伐鍏疯繑鍥炪��");
+ blocks.put(AiPromptBlockType.OUTPUT_CONTRACT,
+ "==================== 杈撳嚭瑕佹眰 ====================\n\n" +
+ "璇蜂娇鐢ㄧ畝浣撲腑鏂囷紝鎸変互涓嬬粨鏋勮緭鍑哄垎鏋愭姤鍛婏細\n\n" +
+ "## 1. 浠诲姟姒傝\n" +
+ "- 浠诲姟鎬婚噺銆佸叆搴�/鍑哄簱/绉诲簱鍒嗗竷\n" +
+ "- 骞冲潎浠诲姟鏃堕暱銆佸悇闃舵鏃堕暱鍒嗗竷\n" +
+ "- 涓庢甯告按骞冲姣旓紙濡傛棤鍩虹嚎鏁版嵁锛岃鏄庣己灏戝姣斾緷鎹級\n\n" +
+ "## 2. 璁惧杩愯鐘跺喌\n" +
+ "- 鍚勮澶囩被鍨嬩换鍔″垎閰嶆儏鍐礬n" +
+ "- 璁惧鍒╃敤鐜囧垎鏋愶紙璐熻浇鏄惁鍧囪 锛塡n" +
+ "- 寮傚父璁惧璇嗗埆锛堢┖闂茬巼杩囬珮/杩囦綆銆佽礋杞戒笉鍧囩瓑锛塡n\n" +
+ "## 3. 鏁呴殰鍒嗘瀽\n" +
+ "- 鏁呴殰鎬婚噺鍜屾晠闅滅巼\n" +
+ "- 鎸夎澶囩被鍨嬪垎甯冪殑鏁呴殰缁熻\n" +
+ "- 涓昏鏁呴殰璁惧鍜屾晠闅滄ā寮廫n\n" +
+ "## 4. 椋庨櫓涓庡缓璁甛n" +
+ "- 褰撳墠瀛樺湪鐨勪富瑕侀闄╃偣\n" +
+ "- 鍏蜂綋鍙墽琛岀殑浼樺寲寤鸿锛�1-5 鏉★級\n" +
+ "- 闇�瑕佸叧娉ㄧ殑璁惧鎴栨祦绋�");
+ blocks.put(AiPromptBlockType.SCENE_PLAYBOOK,
+ "==================== 鍒嗘瀽娴佺▼ ====================\n\n" +
+ "Step 1 鑾峰彇鎬讳綋鏁版嵁\n" +
+ "- 璋冪敤 " + localTool("analysis_query_task_throughput") + " 鑾峰彇浠诲姟鍚炲悙閲廫n" +
+ "- 璋冪敤 " + localTool("analysis_query_device_fault_summary") + " 鑾峰彇鏁呴殰姹囨�籠n\n" +
+ "Step 2 娣卞叆鍒嗘瀽\n" +
+ "- 璋冪敤 " + localTool("analysis_query_device_utilization") + " 鍒嗘瀽璁惧璐熻浇鍧囪 鎬n" +
+ "- 璋冪敤 " + localTool("analysis_query_error_logs") + " 鍒嗘瀽閿欒鍒嗗竷\n\n" +
+ "Step 3 缁煎悎鍒嗘瀽\n" +
+ "- 灏嗗悇缁村害鏁版嵁鍏宠仈鍒嗘瀽\n" +
+ "- 璇嗗埆寮傚父鎸囨爣鍜屾綔鍦ㄩ闄‐n" +
+ "- 鎻愬嚭閽堝鎬т紭鍖栧缓璁甛n\n" +
+ "Step 4 杈撳嚭鎶ュ憡\n" +
+ "- 鎸夎緭鍑鸿姹傛牸寮忓寲鎶ュ憡\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_query\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" +
@@ -74,19 +351,19 @@
"==================== 鍙敤宸ュ叿锛堣繑鍥� JSON锛� ====================\n" +
"\n" +
"銆愪换鍔$浉鍏炽�慭n" +
- "- task_query 鈥斺�� 鎸変换鍔″彿銆佺姸鎬併�佽澶囥�佹潯鐮併�佸簱浣嶇瓑鏉′欢鏌ヨ浠诲姟\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,4 +393,29 @@
"- 鑻ラ渶瑕佽繘涓�姝ユ暟鎹紝璇�**鍏堣皟鐢ㄥ伐鍏凤紝鍐嶇户缁垎鏋�**\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));
+ }
+
+ 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