From b7a738a16531191b43ea2327acca7d861dfd9f09 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 13 三月 2026 14:25:31 +0800
Subject: [PATCH] #算法增加经过其他出库站点的惩罚系数
---
src/main/java/com/zy/ai/utils/AiPromptUtils.java | 147 +++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 135 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..fc442f0 100644
--- a/src/main/java/com/zy/ai/utils/AiPromptUtils.java
+++ b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
@@ -1,7 +1,10 @@
package com.zy.ai.utils;
+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 {
@@ -24,15 +27,131 @@
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;
+ }
+ 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()))) {
+ 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 +193,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 +235,8 @@
"- 鑻ラ渶瑕佽繘涓�姝ユ暟鎹紝璇�**鍏堣皟鐢ㄥ伐鍏凤紝鍐嶇户缁垎鏋�**\n";
return prompt;
}
+
+ private String localTool(String name) {
+ return "wcs_local_" + name;
+ }
}
--
Gitblit v1.9.1