zrd 3 週間 前
コミット
6d84504122

+ 1 - 0
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessagePageReqVO.java

@@ -25,6 +25,7 @@ public class AiChatMessagePageReqVO extends PageParam {
     @Schema(description = "消息内容", example = "你好")
     private String content;
     private Integer contentType;
+    private Long stateId;
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;

+ 1 - 0
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageRespVO.java

@@ -19,6 +19,7 @@ public class AiChatMessageRespVO {
     @Schema(description = "回复消息编号", example = "1024")
     private Long replyId;
     private Integer contentType;
+    private Long stateId;
     @Schema(description = "消息类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "role")
     private String type; // 参见 MessageType 枚举类
 

+ 1 - 0
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendReqVO.java

@@ -27,6 +27,7 @@ public class AiChatMessageSendReqVO {
     @Schema(description = "令牌")
     private String token;
     private Integer contentType;
+    private Long stateId;
     @Schema(description = "是否携带上下文", example = "true")
     private Boolean useContext;
     

+ 1 - 1
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendRespVO.java

@@ -29,7 +29,7 @@ public class AiChatMessageSendRespVO {
         @Schema(description = "聊天内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你好啊")
         private String content;
         private String event;
-
+        private Long stateId;
         @Schema(description = "知识库段落编号数组", example = "[1,2,3]")
         private List<Long> segmentIds;
 

+ 1 - 0
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatMessageDO.java

@@ -75,6 +75,7 @@ public class AiChatMessageDO extends BaseDO {
      * 关联 {@link AiChatRoleDO#getId()} 字段
      */
     private Long roleId;
+    private Long stateId;
 
     /**
      * 模型标志

+ 8 - 7
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java

@@ -118,12 +118,12 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
         // 3. 插入 user 发送消息
         AiChatMessageDO userMessage = createChatMessage(conversation.getId(), null, model,
                 userId, conversation.getRoleId(), MessageType.USER, sendReqVO.getContent(), sendReqVO.getUseContext(),
-                null, sendReqVO.getContentType());
+                null, sendReqVO.getContentType(), sendReqVO.getStateId());
 
         // 3.1 插入 assistant 接收消息
         AiChatMessageDO assistantMessage = createChatMessage(conversation.getId(), userMessage.getId(), model,
                 userId, conversation.getRoleId(), MessageType.ASSISTANT, "", sendReqVO.getUseContext(),
-                knowledgeSegments, sendReqVO.getContentType());
+                knowledgeSegments, sendReqVO.getContentType(), sendReqVO.getStateId());
 
         // 3.2 创建 chat 需要的 Prompt
         Prompt prompt = buildPrompt(conversation, historyMessages, knowledgeSegments, model, sendReqVO);
@@ -167,12 +167,12 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
         // 3. 插入 user 发送消息
         AiChatMessageDO userMessage = createChatMessage(conversation.getId(), null, model,
                 userId, conversation.getRoleId(), MessageType.USER, sendReqVO.getContent(), sendReqVO.getUseContext(),
-                null, sendReqVO.getContentType());
+                null, sendReqVO.getContentType(), sendReqVO.getStateId());
 
         // 4.1 插入 assistant 接收消息
         AiChatMessageDO assistantMessage = createChatMessage(conversation.getId(), userMessage.getId(), model,
                 userId, conversation.getRoleId(), MessageType.ASSISTANT, "", sendReqVO.getUseContext(),
-                knowledgeSegments, sendReqVO.getContentType());
+                knowledgeSegments, sendReqVO.getContentType(), sendReqVO.getStateId());
 
         // 4.2 构建 Prompt,并进行调用
         Prompt prompt = buildPrompt(conversation, historyMessages, knowledgeSegments, model, sendReqVO);
@@ -229,7 +229,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
         // 3. 插入 user 发送消息
         AiChatMessageDO userMessage = createChatMessage(conversation.getId(), null, model,
                 userId, conversation.getRoleId(), MessageType.USER, sendReqVO.getContent(), sendReqVO.getUseContext(),
-                null, sendReqVO.getContentType());
+                null, sendReqVO.getContentType(), sendReqVO.getStateId());
         String apiKey = DictFrameworkUtils.parseDictDataValue("ai_key", "多轮对话");
         JSONObject requestBody = new JSONObject();
         if (StrUtil.isNotBlank(conversation.getDifyConversationId())) {
@@ -291,7 +291,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
         StringBuffer difyId = new StringBuffer();
         AiChatMessageDO assistantMessage = createChatMessage(conversation.getId(), userMessage.getId(), model,
                 userId, conversation.getRoleId(), MessageType.ASSISTANT, "", sendReqVO.getUseContext(),
-                knowledgeSegments, sendReqVO.getContentType());
+                knowledgeSegments, sendReqVO.getContentType(), sendReqVO.getStateId());
         return flux.map(chunk -> {
             String newContent = chunk.getContent();
             contentBuffer.append(newContent);
@@ -495,13 +495,14 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
             AiModelDO model, Long userId, Long roleId,
             MessageType messageType, String content, Boolean useContext,
                                               List<AiKnowledgeSegmentSearchRespBO> knowledgeSegments,
-                                              Integer contentType) {
+                                              Integer contentType, Long stateId) {
         AiChatMessageDO message = new AiChatMessageDO().setConversationId(conversationId).setReplyId(replyId)
                 .setModel(model.getModel()).setModelId(model.getId()).setUserId(userId).setRoleId(roleId)
                 .setType(messageType.getValue()).setContent(content).setUseContext(useContext)
                 .setSegmentIds(convertList(knowledgeSegments, AiKnowledgeSegmentSearchRespBO::getId));
         message.setCreateTime(LocalDateTime.now());
         message.setContentType(contentType);
+        message.setStateId(stateId);
         chatMessageMapper.insert(message);
         return message;
     }