From 0a7091b19b9dffecca0e09cd8d30a6b12afa7fab Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 12 三月 2026 13:35:21 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/ai/service/WcsDiagnosisService.java | 132 +++++++------------------------------------
1 files changed, 23 insertions(+), 109 deletions(-)
diff --git a/src/main/java/com/zy/ai/service/WcsDiagnosisService.java b/src/main/java/com/zy/ai/service/WcsDiagnosisService.java
index 83f0380..7c10893 100644
--- a/src/main/java/com/zy/ai/service/WcsDiagnosisService.java
+++ b/src/main/java/com/zy/ai/service/WcsDiagnosisService.java
@@ -35,7 +35,7 @@
private AiPromptUtils aiPromptUtils;
@Autowired
private AiUtils aiUtils;
- @Autowired(required = false)
+ @Autowired
private SpringAiMcpToolManager mcpToolManager;
public void diagnoseStream(WcsDiagnosisRequest request, SseEmitter emitter) {
@@ -49,44 +49,10 @@
mcpUser.setRole("user");
mcpUser.setContent(aiUtils.buildDiagnosisUserContentMcp(request));
- if (runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, 0.3, 2048, emitter, null)) {
- return;
- }
-
- messages = new ArrayList<>();
- ChatCompletionRequest.Message system = new ChatCompletionRequest.Message();
- system.setRole("system");
- system.setContent(aiPromptUtils.getAiDiagnosePrompt());
- messages.add(system);
-
- ChatCompletionRequest.Message user = new ChatCompletionRequest.Message();
- user.setRole("user");
- user.setContent(aiUtils.buildDiagnosisUserContent(request));
- messages.add(user);
-
- llmChatService.chatStream(messages, 0.3, 2048, s -> {
- try {
- String safe = s == null ? "" : s.replace("\r", "").replace("\n", "\\n");
- if (!safe.isEmpty()) {
- emitter.send(SseEmitter.event().data(safe));
- }
- } catch (Exception ignore) {}
- }, () -> {
- try {
- log.info("AI diagnose stream stopped: normal end");
- emitter.complete();
- } catch (Exception ignore) {}
- }, e -> {
- try {
- try { emitter.send(SseEmitter.event().data("銆怉I銆戣繍琛屽凡鍋滄锛堝紓甯革級")); } catch (Exception ignore) {}
- log.error("AI diagnose stream stopped: error", e);
- emitter.complete();
- } catch (Exception ignore) {}
- });
+ runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, 0.3, 2048, emitter, null);
}
- public void askStream(WcsDiagnosisRequest request,
- String prompt,
+ public void askStream(String prompt,
String chatId,
boolean reset,
SseEmitter emitter) {
@@ -114,11 +80,7 @@
}
}
- StringBuilder assistantBuffer = new StringBuilder();
final String finalChatId = chatId;
- final String finalHistoryKey = historyKey;
- final String finalMetaKey = metaKey;
- final String finalPrompt = prompt;
ChatCompletionRequest.Message mcpSystem = new ChatCompletionRequest.Message();
mcpSystem.setRole("system");
@@ -128,60 +90,7 @@
mcpUser.setRole("user");
mcpUser.setContent("銆愮敤鎴锋彁闂�慭n" + (prompt == null ? "" : prompt));
- if (runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, 0.3, 2048, emitter, finalChatId)) {
- return;
- }
-
- messages = new ArrayList<>();
- ChatCompletionRequest.Message system = new ChatCompletionRequest.Message();
- system.setRole("system");
- system.setContent(aiPromptUtils.getWcsSensorPrompt());
- messages.add(system);
-
- ChatCompletionRequest.Message questionMsg = new ChatCompletionRequest.Message();
- questionMsg.setRole("user");
- questionMsg.setContent("銆愮敤鎴锋彁闂�慭n" + (prompt == null ? "" : prompt));
- messages.add(questionMsg);
-
- llmChatService.chatStream(messages, 0.3, 2048, s -> {
- try {
- String safe = s == null ? "" : s.replace("\r", "").replace("\n", "\\n");
- if (!safe.isEmpty()) {
- emitter.send(SseEmitter.event().data(safe));
- assistantBuffer.append(s);
- }
- } catch (Exception ignore) {}
- }, () -> {
- try {
- if (finalChatId != null && !finalChatId.isEmpty()) {
- ChatCompletionRequest.Message q = new ChatCompletionRequest.Message();
- q.setRole("user");
- q.setContent(finalPrompt == null ? "" : finalPrompt);
- ChatCompletionRequest.Message a = new ChatCompletionRequest.Message();
- a.setRole("assistant");
- a.setContent(assistantBuffer.toString());
- redisUtil.lSet(finalHistoryKey, q);
- redisUtil.lSet(finalHistoryKey, a);
- redisUtil.expire(finalHistoryKey, CHAT_TTL_SECONDS);
- Map<Object, Object> old = redisUtil.hmget(finalMetaKey);
- Long createdAt = old != null && old.get("createdAt") != null ?
- (old.get("createdAt") instanceof Number ? ((Number) old.get("createdAt")).longValue() : Long.valueOf(String.valueOf(old.get("createdAt"))))
- : System.currentTimeMillis();
- Map<String, Object> meta = new java.util.HashMap<>();
- meta.put("chatId", finalChatId);
- meta.put("title", buildTitleFromPrompt(finalPrompt));
- meta.put("createdAt", createdAt);
- meta.put("updatedAt", System.currentTimeMillis());
- redisUtil.hmset(finalMetaKey, meta, CHAT_TTL_SECONDS);
- }
- emitter.complete();
- } catch (Exception ignore) {}
- }, e -> {
- try {
- try { emitter.send(SseEmitter.event().data("銆怉I銆戣繍琛屽凡鍋滄锛堝紓甯革級")); } catch (Exception ignore) {}
- emitter.complete();
- } catch (Exception ignore) {}
- });
+ runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, 0.3, 2048, emitter, finalChatId);
}
public List<Map<String, Object>> listChats() {
@@ -249,17 +158,21 @@
return p.length() > 20 ? p.substring(0, 20) : p;
}
- private boolean runMcpStreamingDiagnosis(List<ChatCompletionRequest.Message> baseMessages,
- ChatCompletionRequest.Message systemPrompt,
- ChatCompletionRequest.Message userQuestion,
- Double temperature,
- Integer maxTokens,
- SseEmitter emitter,
- String chatId) {
+ private void runMcpStreamingDiagnosis(List<ChatCompletionRequest.Message> baseMessages,
+ ChatCompletionRequest.Message systemPrompt,
+ ChatCompletionRequest.Message userQuestion,
+ Double temperature,
+ Integer maxTokens,
+ SseEmitter emitter,
+ String chatId) {
try {
- if (mcpToolManager == null) return false;
+ if (mcpToolManager == null) {
+ throw new IllegalStateException("Spring AI MCP tool manager is unavailable");
+ }
List<Object> tools = mcpToolManager.buildOpenAiTools();
- if (tools.isEmpty()) return false;
+ if (tools.isEmpty()) {
+ throw new IllegalStateException("No MCP tools registered");
+ }
baseMessages.add(systemPrompt);
baseMessages.add(userQuestion);
@@ -275,8 +188,7 @@
sse(emitter, "\\n姝e湪鍒嗘瀽锛堢" + (i + 1) + "杞級...\\n");
ChatCompletionResponse resp = llmChatService.chatCompletion(messages, temperature, maxTokens, tools);
if (resp == null || resp.getChoices() == null || resp.getChoices().isEmpty() || resp.getChoices().get(0).getMessage() == null) {
- sse(emitter, "\\n鍒嗘瀽鍑洪敊锛屾鍦ㄥ洖閫�...\\n");
- return false;
+ throw new IllegalStateException("LLM returned empty response");
}
ChatCompletionRequest.Message assistant = resp.getChoices().get(0).getMessage();
@@ -366,16 +278,18 @@
}
} catch (Exception ignore) {}
}, e -> {
- sse(emitter, "\\n\\n銆怉I銆戝垎鏋愬嚭閿欙紝姝e湪鍥為��...\\n\\n");
+ try {
+ sse(emitter, "\\n\\n銆怉I銆戝垎鏋愬嚭閿欙紝杩愯宸插仠姝紙寮傚父锛塡\n\\n");
+ log.error("AI MCP diagnose stopped: stream error", e);
+ emitter.complete();
+ } catch (Exception ignore) {}
});
- return true;
} catch (Exception e) {
try {
sse(emitter, "\\n\\n銆怉I銆戣繍琛屽凡鍋滄锛堝紓甯革級\\n\\n");
log.error("AI MCP diagnose stopped: error", e);
emitter.complete();
} catch (Exception ignore) {}
- return true;
}
}
--
Gitblit v1.9.1