| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.zy.ai.entity.AiPromptTemplate; |
| | | import com.zy.ai.entity.ChatCompletionRequest; |
| | | import com.zy.ai.entity.ChatCompletionResponse; |
| | | import com.zy.ai.entity.WcsDiagnosisRequest; |
| | | import com.zy.ai.enums.AiPromptScene; |
| | | import com.zy.ai.mcp.service.SpringAiMcpToolManager; |
| | | import com.zy.ai.utils.AiPromptUtils; |
| | | import com.zy.ai.service.AiPromptTemplateService; |
| | | import com.zy.ai.utils.AiUtils; |
| | | import com.zy.common.utils.RedisUtil; |
| | | import com.zy.core.enums.RedisKeyType; |
| | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | @Autowired |
| | | private AiPromptUtils aiPromptUtils; |
| | | @Autowired |
| | | private AiUtils aiUtils; |
| | | @Autowired |
| | | private SpringAiMcpToolManager mcpToolManager; |
| | | @Autowired |
| | | private AiPromptTemplateService aiPromptTemplateService; |
| | | |
| | | public void diagnoseStream(WcsDiagnosisRequest request, SseEmitter emitter) { |
| | | List<ChatCompletionRequest.Message> messages = new ArrayList<>(); |
| | | AiPromptTemplate promptTemplate = aiPromptTemplateService.resolvePublished(AiPromptScene.DIAGNOSE_STREAM.getCode()); |
| | | |
| | | ChatCompletionRequest.Message mcpSystem = new ChatCompletionRequest.Message(); |
| | | mcpSystem.setRole("system"); |
| | | mcpSystem.setContent(aiPromptUtils.getAiDiagnosePromptMcp()); |
| | | mcpSystem.setContent(promptTemplate.getContent()); |
| | | |
| | | ChatCompletionRequest.Message mcpUser = new ChatCompletionRequest.Message(); |
| | | mcpUser.setRole("user"); |
| | | mcpUser.setContent(aiUtils.buildDiagnosisUserContentMcp(request)); |
| | | |
| | | runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, 0.3, 2048, emitter, null); |
| | | runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, promptTemplate, 0.3, 2048, emitter, null); |
| | | } |
| | | |
| | | public void askStream(String prompt, |
| | |
| | | } |
| | | |
| | | final String finalChatId = chatId; |
| | | AiPromptTemplate promptTemplate = aiPromptTemplateService.resolvePublished(AiPromptScene.SENSOR_CHAT.getCode()); |
| | | |
| | | ChatCompletionRequest.Message mcpSystem = new ChatCompletionRequest.Message(); |
| | | mcpSystem.setRole("system"); |
| | | mcpSystem.setContent(aiPromptUtils.getWcsSensorPromptMcp()); |
| | | mcpSystem.setContent(promptTemplate.getContent()); |
| | | |
| | | ChatCompletionRequest.Message mcpUser = new ChatCompletionRequest.Message(); |
| | | mcpUser.setRole("user"); |
| | | mcpUser.setContent("【用户提问】\n" + (prompt == null ? "" : prompt)); |
| | | |
| | | runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, 0.3, 2048, emitter, finalChatId); |
| | | runMcpStreamingDiagnosis(messages, mcpSystem, mcpUser, promptTemplate, 0.3, 2048, emitter, finalChatId); |
| | | } |
| | | |
| | | public List<Map<String, Object>> listChats() { |
| | |
| | | private void runMcpStreamingDiagnosis(List<ChatCompletionRequest.Message> baseMessages, |
| | | ChatCompletionRequest.Message systemPrompt, |
| | | ChatCompletionRequest.Message userQuestion, |
| | | AiPromptTemplate promptTemplate, |
| | | Double temperature, |
| | | Integer maxTokens, |
| | | SseEmitter emitter, |
| | |
| | | Map<String, Object> meta = new java.util.HashMap<>(); |
| | | meta.put("chatId", chatId); |
| | | meta.put("title", buildTitleFromPrompt(userQuestion.getContent())); |
| | | if (promptTemplate != null) { |
| | | meta.put("promptTemplateId", promptTemplate.getId()); |
| | | meta.put("promptSceneCode", promptTemplate.getSceneCode()); |
| | | meta.put("promptVersion", promptTemplate.getVersion()); |
| | | meta.put("promptName", promptTemplate.getName()); |
| | | } |
| | | meta.put("createdAt", createdAt); |
| | | meta.put("updatedAt", System.currentTimeMillis()); |
| | | redisUtil.hmset(metaKey, meta, CHAT_TTL_SECONDS); |