From 81b02e68e7713d70b75ffd13e2280f1f3ac1c510 Mon Sep 17 00:00:00 2001 From: Chuck1sn Date: Wed, 11 Jun 2025 10:48:29 +0800 Subject: [PATCH] add deep seek tool action --- .../java/com/zl/mjga/config/ai/ToolsInitializer.java | 11 +++++++++++ .../java/com/zl/mjga/controller/AiController.java | 2 +- .../main/java/com/zl/mjga/service/AiChatService.java | 10 ++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java b/backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java index 9c9db26..cd38036 100644 --- a/backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java +++ b/backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java @@ -5,6 +5,7 @@ import com.zl.mjga.component.PositionOperatorTool; import com.zl.mjga.component.UserRolePermissionOperatorTool; import dev.langchain4j.community.model.zhipu.ZhipuAiStreamingChatModel; import dev.langchain4j.memory.chat.MessageWindowChatMemory; +import dev.langchain4j.model.openai.OpenAiStreamingChatModel; import dev.langchain4j.service.AiServices; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; @@ -28,4 +29,14 @@ public class ToolsInitializer { .tools(userRolePermissionOperatorTool, departmentOperatorTool, positionOperatorTool) .build(); } + + @Bean + @DependsOn("flywayInitializer") + public SystemToolAssistant deepSeekToolAssistant(OpenAiStreamingChatModel deepSeekChatModel) { + return AiServices.builder(SystemToolAssistant.class) + .streamingChatModel(deepSeekChatModel) + .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10)) + .tools(userRolePermissionOperatorTool, departmentOperatorTool, positionOperatorTool) + .build(); + } } diff --git a/backend/src/main/java/com/zl/mjga/controller/AiController.java b/backend/src/main/java/com/zl/mjga/controller/AiController.java index efd0db8..9095661 100644 --- a/backend/src/main/java/com/zl/mjga/controller/AiController.java +++ b/backend/src/main/java/com/zl/mjga/controller/AiController.java @@ -45,7 +45,7 @@ public class AiController { @PostMapping(value = "/action/execute", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux actionExecute(Principal principal, @RequestBody String userMessage) { Sinks.Many sink = Sinks.many().unicast().onBackpressureBuffer(); - TokenStream chat = aiChatService.actionExecuteWithZhiPu(principal.getName(), userMessage); + TokenStream chat = aiChatService.actionPrecedenceExecuteWith(principal.getName(), userMessage); chat.onPartialResponse( (text) -> { log.debug("ai action partialResponse: {}", text); diff --git a/backend/src/main/java/com/zl/mjga/service/AiChatService.java b/backend/src/main/java/com/zl/mjga/service/AiChatService.java index 262f9e3..dfa939c 100644 --- a/backend/src/main/java/com/zl/mjga/service/AiChatService.java +++ b/backend/src/main/java/com/zl/mjga/service/AiChatService.java @@ -19,6 +19,7 @@ public class AiChatService { private final AiChatAssistant deepSeekChatAssistant; private final AiChatAssistant zhiPuChatAssistant; private final SystemToolAssistant zhiPuToolAssistant; + private final SystemToolAssistant deepSeekToolAssistant; private final LlmService llmService; public TokenStream chatWithDeepSeek(String sessionIdentifier, String userMessage) { @@ -29,8 +30,13 @@ public class AiChatService { return zhiPuChatAssistant.chat(sessionIdentifier, userMessage); } - public TokenStream actionExecuteWithZhiPu(String sessionIdentifier, String userMessage) { - return zhiPuToolAssistant.ask(sessionIdentifier, userMessage); + public TokenStream actionPrecedenceExecuteWith(String sessionIdentifier, String userMessage) { + LlmCodeEnum code = getPrecedenceLlmCode(); + return switch (code) { + case ZHI_PU -> zhiPuToolAssistant.ask(sessionIdentifier, userMessage); + case DEEP_SEEK -> deepSeekToolAssistant.ask(sessionIdentifier, userMessage); + default -> throw new BusinessException(String.format("无效的模型代码 %s", code)); + }; } public TokenStream chatPrecedenceLlmWith(String sessionIdentifier, String userMessage) {