yangshun 3 тижнів тому
батько
коміт
2bbf8b1393

+ 8 - 2
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatmessage/ChatMessageController.java

@@ -7,6 +7,7 @@ import com.cy.guoyan.admin.module.ai.controller.admin.chatmessage.vo.ChatMessage
 import com.cy.guoyan.admin.module.ai.controller.admin.chatmessage.vo.ChatMessageRespVO;
 import com.cy.guoyan.admin.module.ai.controller.admin.chatmessage.vo.ChatMessageSaveReqVO;
 import com.cy.guoyan.admin.module.ai.controller.admin.chatmessage.vo.ChatMessageSendReqVO;
+import com.cy.guoyan.admin.module.ai.service.aiservice.AiSelectionService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
@@ -40,6 +41,10 @@ public class ChatMessageController {
     @Resource
     private ChatMessageService chatMessageService;
 
+    @Resource
+    private AiSelectionService aiSelectionService;
+
+
     @PostMapping("/create")
     @Operation(summary = "创建AI聊天消息")
     @PreAuthorize("@ss.hasPermission('chatAi:chat-message:create')")
@@ -90,7 +95,7 @@ public class ChatMessageController {
         List<ChatMessageRespVO> respVOS = new ArrayList<>();
         for (ChatMessageDO doItem : result) {
             ChatMessageRespVO respVO = new ChatMessageRespVO();
-            // 复制除 metadataJson 以外的属性
+            // 复制除 difyMetadataJson 以外的属性
             BeanUtil.copyProperties(doItem, respVO, CopyOptions.create().setIgnoreProperties("metadataJson"));
             // 处理 metadataJson 字符串转 JSONObject
             if (StringUtils.isNotBlank(doItem.getMetadataJson())) {
@@ -133,7 +138,8 @@ public class ChatMessageController {
     @PostMapping("/send-block")
     @Operation(summary = "发送聊天消息(阻塞式)")
     public CommonResult<ChatMessageRespVO> sendChatBlock(@RequestBody ChatMessageSendReqVO sendReqVO) throws IOException{
-            return success(chatMessageService.sendChatMessageBlock(sendReqVO));
+        return success(aiSelectionService.sendChatMessageBlock(sendReqVO));
+//            return success(chatMessageService.sendChatMessageBlock(sendReqVO));
     }
 
 

+ 3 - 3
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatmessage/vo/ChatMessagePageReqVO.java

@@ -32,7 +32,7 @@ public class ChatMessagePageReqVO extends PageParam {
     private LocalDateTime[] messageTime;
 
     @Schema(description = "Dify 消息唯一 ID(message_id)", example = "8251")
-    private String difyMessageId;
+    private String messageId;
 
     @Schema(description = "Dify 任务 ID(task_id)", example = "2681")
     private String difyTaskId;
@@ -40,8 +40,8 @@ public class ChatMessagePageReqVO extends PageParam {
     @Schema(description = "Dify 事件类型,如 message, message_end 等")
     private String difyEvent;
 
-    @Schema(description = "Dify 会话 ID", example = "15161")
-    private String difyConversationId;
+    @Schema(description = " 会话 ID", example = "15161")
+    private String conversationId;
 
     @Schema(description = "Dify 消息创建时间戳")
     private Long createdTimestamp;

+ 2 - 2
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatmessage/vo/ChatMessageRespVO.java

@@ -38,7 +38,7 @@ public class ChatMessageRespVO {
 
     @Schema(description = "Dify 消息唯一 ID(message_id)", example = "8251")
     @ExcelProperty("Dify 消息唯一 ID(message_id)")
-    private String difyMessageId;
+    private String messageId;
 
     @Schema(description = "Dify 任务 ID(task_id)", example = "2681")
     @ExcelProperty("Dify 任务 ID(task_id)")
@@ -50,7 +50,7 @@ public class ChatMessageRespVO {
 
     @Schema(description = "Dify 会话 ID", example = "15161")
     @ExcelProperty("Dify 会话 ID")
-    private String difyConversationId;
+    private String conversationId;
 
     @Schema(description = "Dify 消息创建时间戳")
     @ExcelProperty("Dify 消息创建时间戳")

+ 3 - 3
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatmessage/vo/ChatMessageSaveReqVO.java

@@ -34,7 +34,7 @@ public class ChatMessageSaveReqVO {
     private LocalDateTime messageTime;
 
     @Schema(description = "Dify 消息唯一 ID(message_id)", example = "8251")
-    private String difyMessageId;
+    private String messageId;
 
     @Schema(description = "Dify 任务 ID(task_id)", example = "2681")
     private String difyTaskId;
@@ -43,7 +43,7 @@ public class ChatMessageSaveReqVO {
     private String difyEvent;
 
     @Schema(description = "Dify 会话 ID", example = "15161")
-    private String difyConversationId;
+    private String conversationId;
 
     @Schema(description = "Dify 消息创建时间戳")
     private Long createdTimestamp;
@@ -75,7 +75,7 @@ public class ChatMessageSaveReqVO {
     private Boolean isVisible;
 
     @Schema(description = "元数据 JSON(如使用模型、引用信息等)")
-    private JSONObject metadataJson;
+    private JSONObject difyMetadataJson;
 
     @Schema(description = "模型用量 JSON(如 tokens 消耗)")
     private JSONObject usageJson;

+ 2 - 2
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatmessage/vo/ChatMessageSendReqVO.java

@@ -15,9 +15,9 @@ public class ChatMessageSendReqVO {
 
     private String user;
 
-    private String difyConversationId;
+    private String conversationId;
 
-    private Integer difyDatasetId;
+    private Integer appType;
 
     private String name;
 

+ 4 - 4
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/dal/dataobject/chatmessage/ChatMessageDO.java

@@ -11,8 +11,8 @@ import com.cy.guoyan.admin.framework.mybatis.core.dataobject.BaseDO;
  *
  * @author 管理员
  */
-@TableName("ai_chat_message")
-@KeySequence("ai_chat_message_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@TableName("ai_message")
+@KeySequence("ai_message_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
@@ -49,7 +49,7 @@ public class ChatMessageDO extends BaseDO {
     /**
      * Dify 消息唯一 ID(message_id)
      */
-    private String difyMessageId;
+    private String messageId;
     /**
      * Dify 任务 ID(task_id)
      */
@@ -61,7 +61,7 @@ public class ChatMessageDO extends BaseDO {
     /**
      * Dify 会话 ID
      */
-    private String difyConversationId;
+    private String conversationId;
     /**
      * Dify 消息创建时间戳
      */

+ 2 - 2
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/dal/mysql/chatmessage/ChatMessageMapper.java

@@ -22,10 +22,10 @@ public interface ChatMessageMapper extends BaseMapperX<ChatMessageDO> {
                 .eqIfPresent(ChatMessageDO::getRole, reqVO.getRole())
                 .eqIfPresent(ChatMessageDO::getContent, reqVO.getContent())
                 .betweenIfPresent(ChatMessageDO::getMessageTime, reqVO.getMessageTime())
-                .eqIfPresent(ChatMessageDO::getDifyMessageId, reqVO.getDifyMessageId())
+                .eqIfPresent(ChatMessageDO::getMessageId, reqVO.getMessageId())
                 .eqIfPresent(ChatMessageDO::getDifyTaskId, reqVO.getDifyTaskId())
                 .eqIfPresent(ChatMessageDO::getDifyEvent, reqVO.getDifyEvent())
-                .eqIfPresent(ChatMessageDO::getDifyConversationId, reqVO.getDifyConversationId())
+                .eqIfPresent(ChatMessageDO::getConversationId, reqVO.getConversationId())
                 .eqIfPresent(ChatMessageDO::getCreatedTimestamp, reqVO.getCreatedTimestamp())
                 .eqIfPresent(ChatMessageDO::getAgentThought, reqVO.getAgentThought())
                 .eqIfPresent(ChatMessageDO::getAgentObservation, reqVO.getAgentObservation())

+ 17 - 17
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/service/chatmessage/ChatMessageServiceImpl.java

@@ -99,7 +99,7 @@ public class ChatMessageServiceImpl implements ChatMessageService {
         String nickname = String.valueOf(SecurityFrameworkUtils.getLoginUser().getInfo().get("nickname"));
 
         // ====== 1. 如果未传 conversationId,则不发送(Dify 会自动生成) ======
-        String conversationId = sendReqVO.getDifyConversationId();
+        String conversationId = sendReqVO.getConversationId();
 
         // ====== 2. 构造 Dify 请求体 ======
         JSONObject requestBody = new JSONObject();
@@ -160,8 +160,8 @@ public class ChatMessageServiceImpl implements ChatMessageService {
                         returnedConversationId = json.getString("conversation_id");
                         // 保存聊天记录
                         ChatMessageDO message = new ChatMessageDO();
-                        message.setDifyMessageId(messageId);
-                        message.setDifyConversationId(returnedConversationId);
+                        message.setMessageId(messageId);
+                        message.setConversationId(returnedConversationId);
                         message.setUserId(nickname);
                         message.setCreateTime(LocalDateTime.now());
                         // 若之前没有本地会话,创建并记录 UUID
@@ -170,7 +170,7 @@ public class ChatMessageServiceImpl implements ChatMessageService {
                             session.setName("新会话 - " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                             session.setUserId(nickname);
                             session.setAppId(appDO.getId());
-                            session.setDifyConversationId(returnedConversationId); // 假设你有这个字段
+                            session.setConversationId(returnedConversationId); // 假设你有这个字段
                             chatSessionMapper.insert(session);
                             message.setSessionId(session.getId());
                             asyncUpdateSessionName(returnedConversationId, session.getId(),appDO.getAppKey());
@@ -256,7 +256,7 @@ public class ChatMessageServiceImpl implements ChatMessageService {
 
     @Override
     public ChatMessageRespVO sendChatMessageBlock(ChatMessageSendReqVO sendReqVO) throws IOException {
-        String conversationId = sendReqVO.getDifyConversationId();
+        String conversationId = sendReqVO.getConversationId();
         // 1. 从登录上下文取用户昵称
         String nickname = String.valueOf(SecurityFrameworkUtils.getLoginUser().getInfo().get("nickname"));
         ChatMessageDO msg = new ChatMessageDO();
@@ -264,7 +264,7 @@ public class ChatMessageServiceImpl implements ChatMessageService {
         msg.setContent(sendReqVO.getQuery());
         msg.setRole("user");
         if (StringUtils.isNotBlank(conversationId)) {
-            msg.setDifyConversationId(conversationId);
+            msg.setConversationId(conversationId);
         }
         chatMessageMapper.insert(msg);
         ChatAppDO appDO = getAppKey(sendReqVO);
@@ -280,8 +280,8 @@ public class ChatMessageServiceImpl implements ChatMessageService {
         body.put("response_mode", "blocking");
         body.put("auto_generate_name", true);
         body.put("enable_retrieval", true);
-//        ChatKnowledgeDatasetDO datasetDO = chatKnowledgeDatasetMapper.selectById(sendReqVO.getDifyDatasetId());
-//        body.put("datasets", Collections.singletonList(datasetDO.getDifyDatasetId()));
+//        ChatKnowledgeDatasetDO datasetDO = chatKnowledgeDatasetMapper.selectById(sendReqVO.getDatasetId());
+//        body.put("datasets", Collections.singletonList(datasetDO.getDatasetId()));
         log.info("Dify 请求体: {}", body.toJSONString());
         // 3. 发起 HTTP POST
         URL url = new URL(difyBaseUrl + "/v1/chat-messages");
@@ -322,27 +322,27 @@ public class ChatMessageServiceImpl implements ChatMessageService {
         String did = json.getString("conversation_id");
 
         // 6.1 本地如果尚未存 Dify 的 conversation_id,则更新
-        ChatSessionDO session = chatSessionMapper.selectOne(new LambdaQueryWrapperX<ChatSessionDO>().eq(ChatSessionDO::getDifyConversationId, did));
+        ChatSessionDO session = chatSessionMapper.selectOne(new LambdaQueryWrapperX<ChatSessionDO>().eq(ChatSessionDO::getConversationId, did));
         if (session == null) {
             session = new ChatSessionDO();
             session.setName(msg.getContent());
             session.setUserId(nickname);
-            session.setDifyConversationId(did);
+            session.setConversationId(did);
             session.setAppId(appDO.getId());
             chatSessionMapper.insert(session);
             // ======== 补充:从 Dify 获取会话名称(同步 + 异步)=======
 //            asyncUpdateSessionName(did, session.getId());
 
         }
-        chatMessageMapper.updateById(msg.setDifyConversationId(did).setSessionId(session.getId()));
+        chatMessageMapper.updateById(msg.setConversationId(did).setSessionId(session.getId()));
         JSONObject metadata = json.getJSONObject("metadata");
         String metadataStr = metadata.toJSONString();
         // 6.2 保存消息
         ChatMessageDO m = new ChatMessageDO();
-        m.setDifyConversationId(did);
+        m.setConversationId(did);
         m.setSessionId(session.getId());
         m.setUserId(nickname);
-        m.setDifyMessageId(json.getString("message_id"));
+        m.setMessageId(json.getString("message_id"));
         m.setContent(json.getString("answer"));
         m.setRole("assistant");
         m.setMetadataJson(metadataStr);
@@ -351,9 +351,9 @@ public class ChatMessageServiceImpl implements ChatMessageService {
         // 7. 组装 VO 返回
         ChatMessageRespVO vo = new ChatMessageRespVO();
         vo.setSessionId(session.getId());
-        vo.setDifyConversationId(did);
+        vo.setConversationId(did);
         vo.setUserId(nickname);
-        vo.setDifyMessageId(m.getDifyMessageId());
+        vo.setMessageId(m.getMessageId());
         vo.setContent(m.getContent());
         vo.setRole(m.getRole());
         vo.setMessageTime(m.getCreateTime());
@@ -372,10 +372,10 @@ public class ChatMessageServiceImpl implements ChatMessageService {
                 .eqIfPresent(ChatMessageDO::getRole, reqVO.getRole())
                 .eqIfPresent(ChatMessageDO::getContent, reqVO.getContent())
                 .betweenIfPresent(ChatMessageDO::getMessageTime, reqVO.getMessageTime())
-                .eqIfPresent(ChatMessageDO::getDifyMessageId, reqVO.getDifyMessageId())
+                .eqIfPresent(ChatMessageDO::getMessageId, reqVO.getMessageId())
                 .eqIfPresent(ChatMessageDO::getDifyTaskId, reqVO.getDifyTaskId())
                 .eqIfPresent(ChatMessageDO::getDifyEvent, reqVO.getDifyEvent())
-                .eqIfPresent(ChatMessageDO::getDifyConversationId, reqVO.getDifyConversationId())
+                .eqIfPresent(ChatMessageDO::getConversationId, reqVO.getConversationId())
                 .eqIfPresent(ChatMessageDO::getCreatedTimestamp, reqVO.getCreatedTimestamp())
                 .eqIfPresent(ChatMessageDO::getAgentThought, reqVO.getAgentThought())
                 .eqIfPresent(ChatMessageDO::getAgentObservation, reqVO.getAgentObservation())