From d8896f48cf6d3ab0b38d289522be15ad239552d3 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期一, 15 十二月 2025 14:20:16 +0800
Subject: [PATCH] #AI
---
src/main/java/com/zy/ai/utils/AiUtils.java | 129 +++++++++++++++++++++
src/main/java/com/zy/ai/utils/AiPromptUtils.java | 35 +++++
src/main/java/com/zy/ai/service/WcsDiagnosisService.java | 161 +++-----------------------
src/main/java/com/zy/ai/entity/WcsDiagnosisRequest.java | 6 +
4 files changed, 188 insertions(+), 143 deletions(-)
diff --git a/src/main/java/com/zy/ai/entity/WcsDiagnosisRequest.java b/src/main/java/com/zy/ai/entity/WcsDiagnosisRequest.java
index b49f84b..8cdf8a1 100644
--- a/src/main/java/com/zy/ai/entity/WcsDiagnosisRequest.java
+++ b/src/main/java/com/zy/ai/entity/WcsDiagnosisRequest.java
@@ -1,6 +1,7 @@
package com.zy.ai.entity;
import com.zy.asrs.entity.WrkMast;
+import com.zy.system.entity.Config;
import lombok.Data;
import java.util.List;
@@ -50,6 +51,11 @@
private List<DeviceConfigsData> deviceConfigs;
/**
+ * 绯荤粺閰嶇疆淇℃伅
+ */
+ private List<Config> systemConfigs;
+
+ /**
* 棰濆涓婁笅鏂囷紝渚嬪锛�
* warehouseCode, shift, wcsVersion, plcVersion 绛�
*/
diff --git a/src/main/java/com/zy/ai/service/WcsDiagnosisService.java b/src/main/java/com/zy/ai/service/WcsDiagnosisService.java
index 8ea08e6..1272f6a 100644
--- a/src/main/java/com/zy/ai/service/WcsDiagnosisService.java
+++ b/src/main/java/com/zy/ai/service/WcsDiagnosisService.java
@@ -3,8 +3,11 @@
import com.alibaba.fastjson.JSON;
import com.zy.ai.entity.ChatCompletionRequest;
import com.zy.ai.entity.WcsDiagnosisRequest;
+import com.zy.ai.utils.AiPromptUtils;
+import com.zy.ai.utils.AiUtils;
import com.zy.common.utils.RedisUtil;
import com.zy.core.enums.RedisKeyType;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -17,9 +20,16 @@
@RequiredArgsConstructor
public class WcsDiagnosisService {
- private final LlmChatService llmChatService;
- private final RedisUtil redisUtil;
private static final long CHAT_TTL_SECONDS = 7L * 24 * 3600;
+
+ @Autowired
+ private LlmChatService llmChatService;
+ @Autowired
+ private RedisUtil redisUtil;
+ @Autowired
+ private AiPromptUtils aiPromptUtils;
+ @Autowired
+ private AiUtils aiUtils;
/**
* 閽堝鈥滅郴缁熶笉鎵ц浠诲姟 / 涓嶇煡閬撳摢涓澶囨病鍦ㄨ繍琛屸�濈殑閫氱敤 AI 璇婃柇
@@ -30,29 +40,12 @@
// 1. system锛氬畾涔変笓瀹惰韩浠� + 杈撳嚭缁撴瀯
ChatCompletionRequest.Message system = new ChatCompletionRequest.Message();
system.setRole("system");
- system.setContent(
- "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛�" +
- "涔熺啛鎮夊父瑙佺殑绯荤粺鍗℃銆佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
- "浣犲皢鏀跺埌浠ヤ笅鍑犵被鏁版嵁锛歕n" +
- "1锛変换鍔′俊鎭紙tasks锛夛細褰撳墠寰呮墽琛�/鍦ㄦ墽琛�/鎸傝捣浠诲姟\n" +
- "2锛夎澶囧疄鏃舵暟鎹紙deviceRealtimeData锛夛細姣忓彴璁惧褰撳墠鐘舵�併�佹槸鍚﹀湪绾裤�佸綋鍓嶄换鍔″彿绛塡n" +
- "3锛夎澶囬厤缃俊鎭紙deviceConfigs锛夛細璁惧鏄惁鍚敤銆佹湇鍔″尯鍩熴�佸厑璁哥殑浠诲姟绫诲瀷绛塡n" +
- "4锛夌郴缁熸棩蹇楋紙logs锛夛細鎸夋椂闂撮『搴忕殑鏃ュ織鏂囨湰\n" +
- "5锛夐澶栦笂涓嬫枃锛坋xtraContext锛夛細濡備粨搴撲唬鐮併�乄CS 鐗堟湰绛塡n\n" +
- "浣犵殑鐩爣鏄細甯姪鐜板満杩愮淮浜哄憳鍒嗘瀽锛屼负浠�涔堢郴缁熷綋鍓嶄笉鎵ц浠诲姟锛屾垨鑰呬换鍔℃墽琛屾晥鐜囧紓甯革紝鎸囧嚭鍙兘鏄摢浜涜澶囧鑷寸殑闂銆俓n\n" +
- "璇锋寜浠ヤ笅缁撴瀯杈撳嚭璇婃柇缁撴灉锛堜娇鐢ㄧ畝浣撲腑鏂囷級锛歕n" +
- "1. 闂姒傝堪锛�1-3 鍙ヨ瘽锛屾鎷綋鍓嶇郴缁熺姸鎬侊級\n" +
- "2. 鍙枒璁惧鍒楄〃锛堝垪鍑� 1-N 涓澶囩紪鍙凤紝骞惰鏄庢瘡涓澶囦负浠�涔堝彲鐤戯紝渚嬪锛氶厤缃鐢�/闀挎椂闂寸┖闂�/鐘舵�佸紓甯�/浠诲姟鍒嗛厤涓嶅埌瀹冪瓑锛塡n" +
- "3. 鍙兘鍘熷洜锛堜粠浠诲姟鍒嗛厤銆佽澶囩姸鎬併�侀厤缃敊璇�佹帴鍙�/閫氫俊寮傚父绛夎搴︼紝鍒楀嚭 3-7 鏉★級\n" +
- "4. 寤鸿鎺掓煡姝ラ锛堟楠� 1銆�2銆�3...锛屾瘡姝ヨ灏介噺鍏蜂綋銆佸彲鎿嶄綔锛屼緥濡傦細鍦ㄦ煇椤甸潰鏌ョ湅鏌愬瓧娈点�佹鏌ユ煇涓紑鍏炽�佸姣旀煇涓姸鎬佷綅绛夛級\n" +
- "5. 椋庨櫓璇勪及锛堣鏄庡綋鍓嶉棶棰樺涓氬姟褰卞搷绋嬪害锛氶珮/涓�/浣庯紝浠ュ強鏄惁闇�瑕佺珛鍗充汉宸ュ共棰勶級\n" +
- "6. WCS 閫昏緫浼樺寲寤鸿锛堝鏋滀粠鏃ュ織/鏁版嵁鐪嬪嚭鍙兘鐨勭郴缁熼�昏緫缂洪櫡锛岃缁欏嚭绠�瑕佸缓璁紝渚嬪澧炲姞鏌愪釜闃插憜鏍¢獙銆佸憡璀︺�佺洃鎺х瓑锛塡n"
- );
+ system.setContent(aiPromptUtils.getAiDiagnosePrompt());
messages.add(system);
ChatCompletionRequest.Message user = new ChatCompletionRequest.Message();
user.setRole("user");
- user.setContent(buildDiagnosisUserContent(request));
+ user.setContent(aiUtils.buildDiagnosisUserContent(request));
messages.add(user);
// 璋冪敤澶фā鍨�
@@ -64,27 +57,12 @@
ChatCompletionRequest.Message system = new ChatCompletionRequest.Message();
system.setRole("system");
- system.setContent(
- "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
- "浣犲皢鏀跺埌浠ヤ笅鍑犵被鏁版嵁锛歕n" +
- "1锛変换鍔′俊鎭紙tasks锛夛細褰撳墠寰呮墽琛�/鍦ㄦ墽琛�/鎸傝捣浠诲姟\n" +
- "2锛夎澶囧疄鏃舵暟鎹紙deviceRealtimeData锛夛細姣忓彴璁惧褰撳墠鐘舵�併�佹槸鍚﹀湪绾裤�佸綋鍓嶄换鍔″彿绛塡n" +
- "3锛夎澶囬厤缃俊鎭紙deviceConfigs锛夛細璁惧鏄惁鍚敤銆佹湇鍔″尯鍩熴�佸厑璁哥殑浠诲姟绫诲瀷绛塡n" +
- "4锛夌郴缁熸棩蹇楋紙logs锛夛細鎸夋椂闂撮『搴忕殑鏃ュ織鏂囨湰\n" +
- "5锛夐澶栦笂涓嬫枃锛坋xtraContext锛夛細濡備粨搴撲唬鐮併�乄CS 鐗堟湰绛塡n\n" +
- "浣犵殑鐩爣鏄細甯姪鐜板満杩愮淮浜哄憳鍒嗘瀽锛屼负浠�涔堢郴缁熷綋鍓嶄笉鎵ц浠诲姟锛屾垨鑰呬换鍔℃墽琛屾晥鐜囧紓甯革紝鎸囧嚭鍙兘鏄摢浜涜澶囧鑷寸殑闂銆俓n\n" +
- "璇锋寜浠ヤ笅缁撴瀯杈撳嚭璇婃柇缁撴灉锛堜娇鐢ㄧ畝浣撲腑鏂囷級锛歕n" +
- "1. 闂姒傝堪锛�1-3 鍙ヨ瘽锛屾鎷綋鍓嶇郴缁熺姸鎬侊級\n" +
- "2. 鍙枒璁惧鍒楄〃锛堝垪鍑� 1-N 涓澶囩紪鍙凤紝骞惰鏄庢瘡涓澶囦负浠�涔堝彲鐤戯紝渚嬪锛氶厤缃鐢�/闀挎椂闂寸┖闂�/鐘舵�佸紓甯�/浠诲姟鍒嗛厤涓嶅埌瀹冪瓑锛塡n" +
- "3. 鍙兘鍘熷洜锛堜粠浠诲姟鍒嗛厤銆佽澶囩姸鎬併�侀厤缃敊璇�佹帴鍙�/閫氫俊寮傚父绛夎搴︼紝鍒楀嚭 3-7 鏉★級\n" +
- "4. 寤鸿鎺掓煡姝ラ锛堟楠� 1銆�2銆�3...锛屾瘡姝ヨ灏介噺鍏蜂綋銆佸彲鎿嶄綔锛屼緥濡傦細鍦ㄦ煇椤甸潰鏌ョ湅鏌愬瓧娈点�佹鏌ユ煇涓紑鍏炽�佸姣旀煇涓姸鎬佷綅绛夛級\n" +
- "5. 椋庨櫓璇勪及锛堣鏄庡綋鍓嶉棶棰樺涓氬姟褰卞搷绋嬪害锛氶珮/涓�/浣庯紝浠ュ強鏄惁闇�瑕佺珛鍗充汉宸ュ共棰勶級\n"
- );
+ system.setContent(aiPromptUtils.getAiDiagnosePrompt());
messages.add(system);
ChatCompletionRequest.Message user = new ChatCompletionRequest.Message();
user.setRole("user");
- user.setContent(buildDiagnosisUserContent(request));
+ user.setContent(aiUtils.buildDiagnosisUserContent(request));
messages.add(user);
llmChatService.chatStream(messages, 0.2, 2048, s -> {
@@ -110,10 +88,7 @@
ChatCompletionRequest.Message system = new ChatCompletionRequest.Message();
system.setRole("system");
- system.setContent(
- "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
- "鍦ㄥ洖绛旂敤鎴烽棶棰樻椂锛岄渶瑕佺粨鍚堜笅闈㈢粰鍑虹殑绯荤粺褰撳墠涓婁笅鏂囦俊鎭紙浠诲姟銆佽澶囧疄鏃剁姸鎬併�佽澶囬厤缃�佺郴缁熸棩蹇楃瓑锛夛紝浠ョ畝娲併�佹槑纭殑涓枃浣滅瓟锛屽苟鍦ㄩ渶瑕佹椂缁欏嚭鍙墽琛岀殑鎺掓煡寤鸿銆�"
- );
+ system.setContent(aiPromptUtils.getWcsSensorPrompt());
base.add(system);
List<ChatCompletionRequest.Message> history = null;
@@ -140,7 +115,7 @@
ChatCompletionRequest.Message contextMsg = new ChatCompletionRequest.Message();
contextMsg.setRole("user");
- contextMsg.setContent(buildAskUserContent(request));
+ contextMsg.setContent(aiUtils.buildAskUserContent(request));
base.add(contextMsg);
ChatCompletionRequest.Message questionMsg = new ChatCompletionRequest.Message();
@@ -257,104 +232,4 @@
return p.length() > 20 ? p.substring(0, 20) : p;
}
- private String buildDiagnosisUserContent(WcsDiagnosisRequest request) {
- StringBuilder sb = new StringBuilder();
-
- if (request.getAlarmMessage() != null && !request.getAlarmMessage().isEmpty()) {
- sb.append("銆愰棶棰樻弿杩般�慭n");
- sb.append(request.getAlarmMessage()).append("\n\n");
- }
-
- sb.append("銆愯澶囦俊鎭�慭n");
- sb.append("鍏虫敞璁惧锛堝鏋滄湁鎸囧畾锛�: ")
- .append(request.getCraneNo() != null ? request.getCraneNo() : "鏈寚瀹氾紝闇�鏁翠綋鍒嗘瀽")
- .append("\n\n");
-
- Object pseudo = redisUtil.get(com.zy.core.enums.RedisKeyType.MAIN_PROCESS_PSEUDOCODE.key);
- if (pseudo != null) {
- sb.append("銆愪富娴佺▼浼唬鐮� mainProcessPseudo銆慭n");
- sb.append(String.valueOf(pseudo)).append("\n\n");
- }
-
- if (request.getExtraContext() != null && !request.getExtraContext().isEmpty()) {
- sb.append("銆愰澶栦笂涓嬫枃 extraContext銆慭n");
- sb.append(JSON.toJSONString(request.getExtraContext(), true)).append("\n\n");
- }
-
- if (request.getTasks() != null && !request.getTasks().isEmpty()) {
- sb.append("銆愪换鍔′俊鎭� tasks銆慭n");
- sb.append("涓嬮潰鏄綋鍓嶇浉鍏充换鍔″垪琛ㄧ殑 JSON 鏁版嵁锛歕n");
- sb.append(JSON.toJSONString(request.getTasks(), true)).append("\n\n");
- } else {
- sb.append("銆愪换鍔′俊鎭� tasks銆慭n");
- sb.append("褰撳墠鏈彁渚涗换鍔′俊鎭�俓n\n");
- }
-
- if (request.getDeviceRealtimeData() != null && !request.getDeviceRealtimeData().isEmpty()) {
- sb.append("銆愯澶囧疄鏃舵暟鎹� deviceRealtimeData銆慭n");
- sb.append("涓嬮潰鏄悇璁惧褰撳墠瀹炴椂鐘舵�佺殑 JSON 鏁版嵁锛歕n");
- sb.append(JSON.toJSONString(request.getDeviceRealtimeData(), true)).append("\n\n");
- } else {
- sb.append("銆愯澶囧疄鏃舵暟鎹� deviceRealtimeData銆慭n");
- sb.append("褰撳墠鏈彁渚涜澶囧疄鏃舵暟鎹�俓n\n");
- }
-
- if (request.getDeviceConfigs() != null && !request.getDeviceConfigs().isEmpty()) {
- sb.append("銆愯澶囬厤缃俊鎭� deviceConfigs銆慭n");
- sb.append("涓嬮潰鏄悇璁惧閰嶇疆鐨� JSON 鏁版嵁锛歕n");
- sb.append(JSON.toJSONString(request.getDeviceConfigs(), true)).append("\n\n");
- } else {
- sb.append("銆愯澶囬厤缃俊鎭� deviceConfigs銆慭n");
- sb.append("褰撳墠鏈彁渚涜澶囬厤缃俊鎭�俓n\n");
- }
-
- sb.append("銆愮郴缁熸棩蹇� logs锛堟寜鏃堕棿椤哄簭锛夈�慭n");
- if (request.getLogs() != null && !request.getLogs().isEmpty()) {
- for (String logLine : request.getLogs()) {
- sb.append(logLine).append("\n");
- }
- } else {
- sb.append("褰撳墠鏈彁渚涙棩蹇椾俊鎭�俓n");
- }
-
- sb.append("\n璇锋牴鎹互涓婃墍鏈変俊鎭紝缁撳悎浣犵殑缁忛獙杩涜鍒嗘瀽璇婃柇銆�");
-
- return sb.toString();
- }
-
- private String buildAskUserContent(WcsDiagnosisRequest request) {
- StringBuilder sb = new StringBuilder();
-
- if (request.getExtraContext() != null && !request.getExtraContext().isEmpty()) {
- sb.append("銆愰澶栦笂涓嬫枃 extraContext銆慭n");
- sb.append(JSON.toJSONString(request.getExtraContext(), true)).append("\n\n");
- }
-
- if (request.getTasks() != null && !request.getTasks().isEmpty()) {
- sb.append("銆愪换鍔′俊鎭� tasks銆慭n");
- sb.append("涓嬮潰鏄綋鍓嶇浉鍏充换鍔″垪琛ㄧ殑 JSON 鏁版嵁锛歕n");
- sb.append(JSON.toJSONString(request.getTasks(), true)).append("\n\n");
- }
-
- if (request.getDeviceRealtimeData() != null && !request.getDeviceRealtimeData().isEmpty()) {
- sb.append("銆愯澶囧疄鏃舵暟鎹� deviceRealtimeData銆慭n");
- sb.append("涓嬮潰鏄悇璁惧褰撳墠瀹炴椂鐘舵�佺殑 JSON 鏁版嵁锛歕n");
- sb.append(JSON.toJSONString(request.getDeviceRealtimeData(), true)).append("\n\n");
- }
-
- if (request.getDeviceConfigs() != null && !request.getDeviceConfigs().isEmpty()) {
- sb.append("銆愯澶囬厤缃俊鎭� deviceConfigs銆慭n");
- sb.append("涓嬮潰鏄悇璁惧閰嶇疆鐨� JSON 鏁版嵁锛歕n");
- sb.append(JSON.toJSONString(request.getDeviceConfigs(), true)).append("\n\n");
- }
-
- sb.append("銆愮郴缁熸棩蹇� logs锛堟寜鏃堕棿椤哄簭锛夈�慭n");
- if (request.getLogs() != null && !request.getLogs().isEmpty()) {
- for (String logLine : request.getLogs()) {
- sb.append(logLine).append("\n");
- }
- }
-
- return sb.toString();
- }
}
diff --git a/src/main/java/com/zy/ai/utils/AiPromptUtils.java b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
new file mode 100644
index 0000000..98aae55
--- /dev/null
+++ b/src/main/java/com/zy/ai/utils/AiPromptUtils.java
@@ -0,0 +1,35 @@
+package com.zy.ai.utils;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class AiPromptUtils {
+
+ //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 getWcsSensorPrompt() {
+ String prompt = "浣犳槸涓�鍚嶈祫娣� WCS锛堜粨鍌ㄦ帶鍒剁郴缁燂級涓庤嚜鍔ㄥ寲绔嬪簱涓撳锛岀啛鎮夛細鍫嗗灈鏈恒�佽緭閫佺嚎銆佹彁鍗囨満銆佺┛姊溅绛夎澶囩殑浠诲姟鍒嗛厤鍜岃繍琛岄�昏緫锛屼篃鐔熸倝甯歌鐨勭郴缁熷崱姝汇�佷换鍔′笉鎵ц銆佽澶囩┖闂蹭絾鏃犱换鍔$瓑闂妯″紡銆俓n\n" +
+ "鍦ㄥ洖绛旂敤鎴烽棶棰樻椂锛岄渶瑕佺粨鍚堜笅闈㈢粰鍑虹殑绯荤粺褰撳墠涓婁笅鏂囦俊鎭紙浠诲姟銆佽澶囧疄鏃剁姸鎬併�佽澶囬厤缃�佺郴缁熸棩蹇椼�佺郴缁熼厤缃瓑锛夛紝浠ョ畝娲併�佹槑纭殑涓枃浣滅瓟锛屽苟鍦ㄩ渶瑕佹椂缁欏嚭鍙墽琛岀殑鎺掓煡寤鸿銆�";
+ return prompt;
+ }
+
+}
diff --git a/src/main/java/com/zy/ai/utils/AiUtils.java b/src/main/java/com/zy/ai/utils/AiUtils.java
index 8be437b..a7cdeb9 100644
--- a/src/main/java/com/zy/ai/utils/AiUtils.java
+++ b/src/main/java/com/zy/ai/utils/AiUtils.java
@@ -1,5 +1,6 @@
package com.zy.ai.utils;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.ai.entity.DeviceConfigsData;
import com.zy.ai.entity.DeviceRealTimeData;
@@ -11,6 +12,7 @@
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.WrkMastService;
+import com.zy.common.utils.RedisUtil;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.StationObjModel;
@@ -18,6 +20,8 @@
import com.zy.core.model.protocol.StationProtocol;
import com.zy.core.thread.CrnThread;
import com.zy.core.thread.StationThread;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -34,6 +38,10 @@
private BasCrnpService basCrnpService;
@Autowired
private BasDevpService basDevpService;
+ @Autowired
+ private ConfigService configService;
+ @Autowired
+ private RedisUtil redisUtil;
public WcsDiagnosisRequest makeAiRequest(int logLimit, String alarmMessage) {
WcsDiagnosisRequest request = new WcsDiagnosisRequest();
@@ -124,6 +132,9 @@
deviceRealTimeDataList.add(stationData);
}
+ //鍓旈櫎鍏ㄩ儴杈撻�佺珯鐐逛俊鎭紝浠ュ厤鏁版嵁閲忚繃澶э紝鍚庢湡鐪嬪疄闄呮儏鍐垫槸鍚︽墦寮�
+ basDevp.setStationList(null);
+
DeviceConfigsData deviceConfigsData = new DeviceConfigsData();
deviceConfigsData.setDeviceNo(basDevp.getDevpNo());
deviceConfigsData.setDeviceType(String.valueOf(SlaveType.Devp));
@@ -133,7 +144,125 @@
request.setDeviceRealtimeData(deviceRealTimeDataList);
request.setDeviceConfigs(deviceConfigsDataList);
+
+ List<Config> systemConfigList = configService.selectList(new EntityWrapper<Config>().notIn("dingdingReportUrl"));
+ request.setSystemConfigs(systemConfigList);
+
return request;
}
+ public String buildDiagnosisUserContent(WcsDiagnosisRequest request) {
+ StringBuilder sb = new StringBuilder();
+
+ if (request.getAlarmMessage() != null && !request.getAlarmMessage().isEmpty()) {
+ sb.append("銆愰棶棰樻弿杩般�慭n");
+ sb.append(request.getAlarmMessage()).append("\n\n");
+ }
+
+ sb.append("銆愯澶囦俊鎭�慭n");
+ sb.append("鍏虫敞璁惧锛堝鏋滄湁鎸囧畾锛�: ")
+ .append(request.getCraneNo() != null ? request.getCraneNo() : "鏈寚瀹氾紝闇�鏁翠綋鍒嗘瀽")
+ .append("\n\n");
+
+ Object pseudo = redisUtil.get(com.zy.core.enums.RedisKeyType.MAIN_PROCESS_PSEUDOCODE.key);
+ if (pseudo != null) {
+ sb.append("銆愪富娴佺▼浼唬鐮� mainProcessPseudo銆慭n");
+ sb.append(String.valueOf(pseudo)).append("\n\n");
+ }
+
+ if (request.getExtraContext() != null && !request.getExtraContext().isEmpty()) {
+ sb.append("銆愰澶栦笂涓嬫枃 extraContext銆慭n");
+ sb.append(JSON.toJSONString(request.getExtraContext(), true)).append("\n\n");
+ }
+
+ if (request.getTasks() != null && !request.getTasks().isEmpty()) {
+ sb.append("銆愪换鍔′俊鎭� tasks銆慭n");
+ sb.append("涓嬮潰鏄綋鍓嶇浉鍏充换鍔″垪琛ㄧ殑 JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getTasks(), true)).append("\n\n");
+ } else {
+ sb.append("銆愪换鍔′俊鎭� tasks銆慭n");
+ sb.append("褰撳墠鏈彁渚涗换鍔′俊鎭�俓n\n");
+ }
+
+ if (request.getDeviceRealtimeData() != null && !request.getDeviceRealtimeData().isEmpty()) {
+ sb.append("銆愯澶囧疄鏃舵暟鎹� deviceRealtimeData銆慭n");
+ sb.append("涓嬮潰鏄悇璁惧褰撳墠瀹炴椂鐘舵�佺殑 JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getDeviceRealtimeData(), true)).append("\n\n");
+ } else {
+ sb.append("銆愯澶囧疄鏃舵暟鎹� deviceRealtimeData銆慭n");
+ sb.append("褰撳墠鏈彁渚涜澶囧疄鏃舵暟鎹�俓n\n");
+ }
+
+ if (request.getDeviceConfigs() != null && !request.getDeviceConfigs().isEmpty()) {
+ sb.append("銆愯澶囬厤缃俊鎭� deviceConfigs銆慭n");
+ sb.append("涓嬮潰鏄悇璁惧閰嶇疆鐨� JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getDeviceConfigs(), true)).append("\n\n");
+ } else {
+ sb.append("銆愯澶囬厤缃俊鎭� deviceConfigs銆慭n");
+ sb.append("褰撳墠鏈彁渚涜澶囬厤缃俊鎭�俓n\n");
+ }
+
+ if (request.getLogs() != null && !request.getLogs().isEmpty()) {
+ sb.append("銆愮郴缁熸棩蹇� logs锛堟寜鏃堕棿椤哄簭锛夈�慭n");
+ for (String logLine : request.getLogs()) {
+ sb.append(logLine).append("\n");
+ }
+ } else {
+ sb.append("銆愮郴缁熸棩蹇� logs锛堟寜鏃堕棿椤哄簭锛夈�慭n");
+ sb.append("褰撳墠鏈彁渚涙棩蹇椾俊鎭�俓n");
+ }
+
+ if (request.getSystemConfigs() != null && !request.getSystemConfigs().isEmpty()) {
+ sb.append("銆愮郴缁熼厤缃� sys_config銆慭n");
+ sb.append("涓嬮潰鏄悇绯荤粺閰嶇疆鐨� JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getSystemConfigs(), true)).append("\n\n");
+ }
+
+ sb.append("\n璇锋牴鎹互涓婃墍鏈変俊鎭紝缁撳悎浣犵殑缁忛獙杩涜鍒嗘瀽璇婃柇銆�");
+
+ return sb.toString();
+ }
+
+ public String buildAskUserContent(WcsDiagnosisRequest request) {
+ StringBuilder sb = new StringBuilder();
+
+ if (request.getExtraContext() != null && !request.getExtraContext().isEmpty()) {
+ sb.append("銆愰澶栦笂涓嬫枃 extraContext銆慭n");
+ sb.append(JSON.toJSONString(request.getExtraContext(), true)).append("\n\n");
+ }
+
+ if (request.getTasks() != null && !request.getTasks().isEmpty()) {
+ sb.append("銆愪换鍔′俊鎭� tasks銆慭n");
+ sb.append("涓嬮潰鏄綋鍓嶇浉鍏充换鍔″垪琛ㄧ殑 JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getTasks(), true)).append("\n\n");
+ }
+
+ if (request.getDeviceRealtimeData() != null && !request.getDeviceRealtimeData().isEmpty()) {
+ sb.append("銆愯澶囧疄鏃舵暟鎹� deviceRealtimeData銆慭n");
+ sb.append("涓嬮潰鏄悇璁惧褰撳墠瀹炴椂鐘舵�佺殑 JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getDeviceRealtimeData(), true)).append("\n\n");
+ }
+
+ if (request.getDeviceConfigs() != null && !request.getDeviceConfigs().isEmpty()) {
+ sb.append("銆愯澶囬厤缃俊鎭� deviceConfigs銆慭n");
+ sb.append("涓嬮潰鏄悇璁惧閰嶇疆鐨� JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getDeviceConfigs(), true)).append("\n\n");
+ }
+
+ if (request.getLogs() != null && !request.getLogs().isEmpty()) {
+ sb.append("銆愮郴缁熸棩蹇� logs锛堟寜鏃堕棿椤哄簭锛夈�慭n");
+ for (String logLine : request.getLogs()) {
+ sb.append(logLine).append("\n");
+ }
+ }
+
+ if (request.getSystemConfigs() != null && !request.getSystemConfigs().isEmpty()) {
+ sb.append("銆愮郴缁熼厤缃� sys_config銆慭n");
+ sb.append("涓嬮潰鏄悇绯荤粺閰嶇疆鐨� JSON 鏁版嵁锛歕n");
+ sb.append(JSON.toJSONString(request.getSystemConfigs(), true)).append("\n\n");
+ }
+
+ return sb.toString();
+ }
+
}
--
Gitblit v1.9.1