Browse Source

修改文件名称及添加deeepseeek

unknown 1 month ago
parent
commit
e3309245e7

+ 3 - 3
base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/RuoYiAIApplication.java → base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/AIQuestionApplication.java

@@ -21,11 +21,11 @@ import java.net.UnknownHostException;
 @MapperScan(value = "com.usky.ai.mapper")
 @ComponentScan(basePackages = {"com.usky"})
 @SpringBootApplication
-public class RuoYiAIApplication {
-        private static final Logger LOGGER = LoggerFactory.getLogger(RuoYiAIApplication.class);
+public class AIQuestionApplication {
+        private static final Logger LOGGER = LoggerFactory.getLogger(AIQuestionApplication.class);
 
         public static void main (String[]args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(RuoYiAIApplication.class, args);
+        ConfigurableApplicationContext application = SpringApplication.run(AIQuestionApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");

+ 181 - 0
base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/controller/web/AiQuestionController.java

@@ -0,0 +1,181 @@
+package com.usky.ai.controller.web;
+
+import com.alibaba.dashscope.aigc.generation.Generation;
+import com.alibaba.dashscope.aigc.generation.GenerationParam;
+import com.alibaba.dashscope.aigc.generation.GenerationResult;
+import com.alibaba.dashscope.common.Message;
+import com.alibaba.dashscope.common.Role;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.usky.ai.mapper.AiQuestionMapper;
+import com.usky.ai.service.AiQuestion;
+import com.usky.common.security.utils.SecurityUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@RestController
+@RequestMapping("/ai")
+public class AiQuestionController {
+
+    @Value("${ai.api.key}")
+    private String apiKey;
+
+    @Resource
+    private Generation generation;
+
+    @Autowired
+    private AiQuestionMapper aiQuestionMapper;
+
+    // 查询所有数据
+    @GetMapping("/all")
+    public List<AiQuestion> getAllQuestions() {
+        return aiQuestionMapper.findAll();
+    }
+
+    // 根据 userId 查询数据
+    @GetMapping("/user/{userId}")
+    public List<AiQuestion> getQuestionsByUserId(@PathVariable Long userId) {
+        return aiQuestionMapper.findByUserId(userId);
+    }
+
+    // 根据 id 删除数据
+    @DeleteMapping("/deleted/{id}")
+    public String deleteQuestion(@PathVariable Long id) {
+        aiQuestionMapper.deleteById(id);
+        return "Question with id " + id + " deleted successfully.";
+    }
+
+    // 根据 userId 和 sessionId 查询数据
+    @GetMapping("/session/{sessionId}/user/{userId}")
+    public List<AiQuestion> getQuestionsByUserIdAndSessionId(@PathVariable String sessionId, @PathVariable Long userId) {
+        return aiQuestionMapper.findByUserIdAndSessionId(sessionId, userId);
+    }
+
+    //阿里百炼通义千问大模型
+    @PostMapping(value = "/aliTyqw")
+    public String send1(@RequestBody String content, @RequestParam(required = false) String sessionId) throws NoApiKeyException, InputRequiredException {
+
+        //获取当前登录用户的信息
+        Long userId = SecurityUtils.getUserId();
+        String userName = SecurityUtils.getLoginUser().getSysUser().getNickName();
+
+        // 如果没有传入 sessionId,则创建一个新的会话ID
+        if (sessionId == null || sessionId.isEmpty()) {
+            sessionId = java.util.UUID.randomUUID().toString();
+        }
+
+        // 获取当前用户的对话历史
+        log.info("会话ID: {}, 用户ID: {}", sessionId, userId);
+        List<AiQuestion> conversationHistory = aiQuestionMapper.findByUserIdAndSessionId(sessionId, userId);
+
+        // 构建对话历史消息
+        List<Message> messages = conversationHistory.stream()
+                .map(q -> Message.builder()
+                        .role(q.getUserId().equals(userId) ? Role.USER.getValue() : Role.ASSISTANT.getValue())
+                        .content(q.getUserId().equals(userId) ? q.getQuestion() : q.getAnswer())
+                        .build())
+                .collect(Collectors.toList());
+
+        // 用户与模型的对话历史
+        // 添加用户的新消息
+        Message userMessage = Message.builder()
+                .role(Role.USER.getValue())
+                .content(content)
+                .build();
+        messages.add(userMessage);
+
+        GenerationParam param = GenerationParam.builder()
+                .model("qwen-turbo")
+                .messages(messages)
+                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
+                .topP(0.8)
+                .apiKey(apiKey)
+                .enableSearch(true)
+                .build();
+
+        GenerationResult generationResult = generation.call(param);
+
+        // 获取回答内容
+        String answer = generationResult.getOutput().getChoices().get(0).getMessage().getContent();
+
+        // 创建实体并保存到数据库
+        AiQuestion aiQuestion = new AiQuestion();
+        aiQuestion.setModel("qwen-turbo");
+        aiQuestion.setSessionId(sessionId);
+        aiQuestion.setUserId(userId);
+        aiQuestion.setUserName(userName);
+        aiQuestion.setQuestion(content);
+        aiQuestion.setAnswer(answer);
+        aiQuestion.setAskTime(LocalDateTime.now());
+        aiQuestionMapper.save(aiQuestion);
+
+        return answer;
+    }
+
+    //阿里百炼DeepSeek大模型
+    @PostMapping(value = "/aliDeepSeek")
+    public String send2(@RequestBody String content, @RequestParam(required = false) String sessionId) throws NoApiKeyException, InputRequiredException {
+
+        //获取当前登录用户的信息
+        Long userId = SecurityUtils.getUserId();
+        String userName = SecurityUtils.getLoginUser().getSysUser().getNickName();
+
+        // 如果没有传入 sessionId,则创建一个新的会话ID
+        if (sessionId == null || sessionId.isEmpty()) {
+            sessionId = java.util.UUID.randomUUID().toString();
+        }
+
+        // 获取当前用户的对话历史
+        log.info("会话ID: {}, 用户ID: {}", sessionId, userId);
+        List<AiQuestion> conversationHistory = aiQuestionMapper.findByUserIdAndSessionId(sessionId, userId);
+
+        // 构建对话历史消息
+        List<Message> messages = conversationHistory.stream()
+                .map(q -> Message.builder()
+                        .role(q.getUserId().equals(userId) ? Role.USER.getValue() : Role.ASSISTANT.getValue())
+                        .content(q.getUserId().equals(userId) ? q.getQuestion() : q.getAnswer())
+                        .build())
+                .collect(Collectors.toList());
+
+        // 用户与模型的对话历史
+        // 添加用户的新消息
+        Message userMessage = Message.builder()
+                .role(Role.USER.getValue())
+                .content(content)
+                .build();
+        messages.add(userMessage);
+
+        GenerationParam param = GenerationParam.builder()
+                .model("deepseek-v3")
+                .messages(messages)
+                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
+                .apiKey(apiKey)
+                .build();
+
+        GenerationResult generationResult = generation.call(param);
+
+        // 获取回答内容
+        String answer = generationResult.getOutput().getChoices().get(0).getMessage().getContent();
+
+        // 创建实体并保存到数据库
+        AiQuestion aiQuestion = new AiQuestion();
+        aiQuestion.setModel("deepseek-v3");
+        aiQuestion.setSessionId(sessionId);
+        aiQuestion.setUserId(userId);
+        aiQuestion.setUserName(userName);
+        aiQuestion.setQuestion(content);
+        aiQuestion.setAnswer(answer);
+        aiQuestion.setAskTime(LocalDateTime.now());
+        aiQuestionMapper.save(aiQuestion);
+
+        return answer;
+    }
+}

+ 0 - 92
base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/controller/web/AliAiController.java

@@ -1,92 +0,0 @@
-package com.usky.ai.controller.web;
-
-import com.alibaba.dashscope.aigc.generation.Generation;
-import com.alibaba.dashscope.aigc.generation.GenerationParam;
-import com.alibaba.dashscope.aigc.generation.GenerationResult;
-import com.alibaba.dashscope.common.Message;
-import com.alibaba.dashscope.common.Role;
-import com.alibaba.dashscope.exception.InputRequiredException;
-import com.alibaba.dashscope.exception.NoApiKeyException;
-import com.usky.ai.mapper.AiQuestionMapper;
-import com.usky.ai.service.AiQuestion;
-import com.usky.common.security.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.time.LocalDateTime;
-import java.util.Arrays;
-import java.util.List;
-
-@RestController
-@RequestMapping("/ai")
-public class AliAiController {
-
-    @Value("${ai.api.key}")
-    private String apiKey;
-
-    @Resource
-    private Generation generation;
-
-    @Autowired
-    private AiQuestionMapper aiQuestionMapper;
-
-    @PostMapping(value = "/aliTyqw")
-    public String send(@RequestBody String content) throws NoApiKeyException, InputRequiredException {
-
-        // 用户与模型的对话历史
-        Message userMessage = Message.builder()
-                .role(Role.USER.getValue())
-                .content(content)
-                .build();
-
-        GenerationParam param = GenerationParam.builder()
-                .model("qwen-turbo")
-                .messages(Arrays.asList(userMessage))
-                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
-                .topP(0.8)
-                .apiKey(apiKey)
-                .enableSearch(true)
-                .build();
-
-        GenerationResult generationResult = generation.call(param);
-
-        // 获取回答内容
-        String answer = generationResult.getOutput().getChoices().get(0).getMessage().getContent();
-
-        //获取当前登录用户的信息
-        Long userId = SecurityUtils.getUserId();
-        String userName = SecurityUtils.getUsername();
-
-        // 创建实体并保存到数据库
-        AiQuestion aiQuestion = new AiQuestion();
-        aiQuestion.setUserId(userId);
-        aiQuestion.setUserName(userName);
-        aiQuestion.setQuestion(content);
-        aiQuestion.setAnswer(answer);
-        aiQuestion.setAskTime(LocalDateTime.now());
-        aiQuestionMapper.save(aiQuestion);
-
-        return answer;
-    }
-
-    // 查询所有数据
-    @GetMapping("/questions")
-    public List<AiQuestion> getAllQuestions() {
-        return aiQuestionMapper.findAll();
-    }
-
-    // 根据 userId 查询数据
-    @GetMapping("/questions/user/{userId}")
-    public List<AiQuestion> getQuestionsByUserId(@PathVariable Long userId) {
-        return aiQuestionMapper.findByUserId(userId);
-    }
-
-    // 根据 id 删除数据
-    @DeleteMapping("/questions/deleted/{id}")
-    public String deleteQuestion(@PathVariable Long id) {
-        aiQuestionMapper.deleteById(id);
-        return "Question with id " + id + " deleted successfully.";
-    }
-}

+ 7 - 6
base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/mapper/AiQuestionMapper.java

@@ -1,17 +1,14 @@
 package com.usky.ai.mapper;
 
 import com.usky.ai.service.AiQuestion;
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.*;
 
 import java.util.List;
 
 @Mapper
 public interface AiQuestionMapper {
-    @Insert("INSERT INTO ai_questions (user_id, user_name, question, answer, ask_time) " +
-            "VALUES (#{userId}, #{userName}, #{question}, #{answer}, #{askTime})")
+    @Insert("INSERT INTO ai_questions (model, session_id, user_id, user_name, question, answer, ask_time) " +
+            "VALUES (#{model},  #{sessionId}, #{userId}, #{userName}, #{question}, #{answer}, #{askTime})")
     void save(AiQuestion aiQuestion);
 
     // 查询所有数据
@@ -25,4 +22,8 @@ public interface AiQuestionMapper {
     // 根据 id 删除数据
     @Delete("DELETE FROM ai_questions WHERE id = #{id}")
     void deleteById(Long id);
+
+    // 根据 sessionId  和 userId 查询数据
+    @Select("SELECT * FROM ai_questions WHERE session_id = #{sessionId} AND user_id = #{userId} ORDER BY ask_time ASC")
+    List<AiQuestion> findByUserIdAndSessionId(@Param("sessionId") String sessionId, @Param("userId") Long userId);
 }

+ 10 - 0
base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/service/AiQuestion.java

@@ -4,6 +4,8 @@ import java.time.LocalDateTime;
 
 public class AiQuestion {
     private Long id;
+    private String model;
+    private String sessionId;
     private Long userId; // 添加用户ID字段
     private String userName; // 添加用户名字段
     private String question;
@@ -19,6 +21,14 @@ public class AiQuestion {
         this.id = id;
     }
 
+    public String getModel() { return model; }
+
+    public void setModel(String model) { this.model = model; }
+
+    public String getSessionId() { return sessionId; }
+
+    public void setSessionId(String sessionId) { this.sessionId = sessionId; }
+
     public Long getUserId() {
         return userId;
     }

+ 1 - 1
base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/service/config/AliAiConfig.java → base-modules/service-ai/service-ai-biz/src/main/java/com/usky/ai/service/config/AiQuestionConfig.java

@@ -5,7 +5,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-public class AliAiConfig {
+public class AiQuestionConfig {
 
     @Bean
     public Generation generation() {