mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-11-04 08:06:12 +08:00 
			
		
		
		
	【新增】AI:聊天对话的更新标题
This commit is contained in:
		@ -10,26 +10,28 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 | 
				
			|||||||
public interface ErrorCodeConstants {
 | 
					public interface ErrorCodeConstants {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // ========== API 密钥 1-040-000-000 ==========
 | 
					    // ========== API 密钥 1-040-000-000 ==========
 | 
				
			||||||
    ErrorCode API_KEY_NOT_EXISTS = new ErrorCode(1_040_000_000, "AI API 密钥不存在");
 | 
					    ErrorCode API_KEY_NOT_EXISTS = new ErrorCode(1_040_000_000, "API 密钥不存在");
 | 
				
			||||||
    ErrorCode API_KEY_DISABLE = new ErrorCode(1_040_000_001, "AI API 密钥已禁用!");
 | 
					    ErrorCode API_KEY_DISABLE = new ErrorCode(1_040_000_001, "API 密钥已禁用!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // ========== API 聊天模型 1-040-001-000 ==========
 | 
					    // ========== API 聊天模型 1-040-001-000 ==========
 | 
				
			||||||
    ErrorCode CHAT_MODEL_NOT_EXISTS = new ErrorCode(1_040_001_000, "AI 模型不存在!");
 | 
					    ErrorCode CHAT_MODEL_NOT_EXISTS = new ErrorCode(1_040_001_000, "模型不存在!");
 | 
				
			||||||
    ErrorCode CHAT_MODEL_DISABLE = new ErrorCode(1_040_001_001, "AI 模型({})已禁用!");
 | 
					    ErrorCode CHAT_MODEL_DISABLE = new ErrorCode(1_040_001_001, "模型({})已禁用!");
 | 
				
			||||||
    ErrorCode CHAT_MODEL_DEFAULT_NOT_EXISTS = new ErrorCode(1_040_001_002, "操作失败,找不到默认聊天模型");
 | 
					    ErrorCode CHAT_MODEL_DEFAULT_NOT_EXISTS = new ErrorCode(1_040_001_002, "操作失败,找不到默认聊天模型");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // ========== API 聊天模型 1-040-002-000 ==========
 | 
					    // ========== API 聊天模型 1-040-002-000 ==========
 | 
				
			||||||
    ErrorCode CHAT_ROLE_NOT_EXISTS = new ErrorCode(1_040_002_000, "AI 聊天角色不存在");
 | 
					    ErrorCode CHAT_ROLE_NOT_EXISTS = new ErrorCode(1_040_002_000, "聊天角色不存在");
 | 
				
			||||||
    ErrorCode CHAT_ROLE_DISABLE = new ErrorCode(1_040_001_001, "AI 聊天角色({})已禁用!");
 | 
					    ErrorCode CHAT_ROLE_DISABLE = new ErrorCode(1_040_001_001, "聊天角色({})已禁用!");
 | 
				
			||||||
    ErrorCode CHAT_ROLE_DEFAULT_NOT_EXISTS = new ErrorCode(1_040_001_002, "操作失败,找不到默认聊天角色");
 | 
					    ErrorCode CHAT_ROLE_DEFAULT_NOT_EXISTS = new ErrorCode(1_040_001_002, "操作失败,找不到默认聊天角色");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // ========== API 聊天会话 1-040-003-000 ==========
 | 
					    // ========== API 聊天会话 1-040-003-000 ==========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ErrorCode CHAT_CONVERSATION_NOT_EXISTS = new ErrorCode(1_040_003_000, "AI 对话不存在!");
 | 
					    ErrorCode CHAT_CONVERSATION_NOT_EXISTS = new ErrorCode(1_040_003_000, "对话不存在!");
 | 
				
			||||||
    ErrorCode CHAT_CONVERSATION_MODEL_ERROR = new ErrorCode(1_040_003_001, "操作失败,该聊天模型的配置不完整");
 | 
					    ErrorCode CHAT_CONVERSATION_MODEL_ERROR = new ErrorCode(1_040_003_001, "操作失败,该聊天模型的配置不完整");
 | 
				
			||||||
 | 
					    ErrorCode CHAT_CONVERSATION_UPDATE_MAX_TOKENS_ERROR = new ErrorCode(1_040_003_002, "更新对话失败,最大 Token 超过上限");
 | 
				
			||||||
 | 
					    ErrorCode CHAT_CONVERSATION_UPDATE_MAX_CONTEXTS_ERROR = new ErrorCode(1_040_003_002, "更新对话失败,最大 Context 超过上限");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // chat
 | 
					    // chat
 | 
				
			||||||
    ErrorCode AI_CHAT_MESSAGE_NOT_EXIST = new ErrorCode(1_022_000_100, "AI 提问的 MessageId 不存在!");
 | 
					    ErrorCode AI_CHAT_MESSAGE_NOT_EXIST = new ErrorCode(1_022_000_100, "提问的 MessageId 不存在!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // midjourney
 | 
					    // midjourney
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 | 
				
			|||||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
					import com.baomidou.mybatisplus.annotation.TableName;
 | 
				
			||||||
import lombok.*;
 | 
					import lombok.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.time.LocalDateTime;
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * AI Chat 会话 DO
 | 
					 * AI Chat 会话 DO
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@ -51,6 +54,10 @@ public class AiChatConversationDO extends BaseDO {
 | 
				
			|||||||
     * 是否置顶
 | 
					     * 是否置顶
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private Boolean pinned;
 | 
					    private Boolean pinned;
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 置顶时间
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private LocalDateTime pinnedTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 角色编号
 | 
					     * 角色编号
 | 
				
			||||||
 | 
				
			|||||||
@ -20,11 +20,11 @@ import lombok.extern.slf4j.Slf4j;
 | 
				
			|||||||
import org.springframework.stereotype.Service;
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
import org.springframework.validation.annotation.Validated;
 | 
					import org.springframework.validation.annotation.Validated;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.time.LocalDateTime;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.*;
 | 
					import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.*;
 | 
				
			||||||
import static cn.iocoder.yudao.module.ai.ErrorCodeConstants.CHAT_CONVERSATION_MODEL_ERROR;
 | 
					import static cn.iocoder.yudao.module.ai.ErrorCodeConstants.*;
 | 
				
			||||||
import static cn.iocoder.yudao.module.ai.ErrorCodeConstants.CHAT_CONVERSATION_NOT_EXISTS;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * AI 聊天对话 Service 实现类
 | 
					 * AI 聊天对话 Service 实现类
 | 
				
			||||||
@ -72,16 +72,26 @@ public class AiChatConversationServiceImpl implements AiChatConversationService
 | 
				
			|||||||
        if (ObjUtil.notEqual(conversation.getUserId(), userId)) {
 | 
					        if (ObjUtil.notEqual(conversation.getUserId(), userId)) {
 | 
				
			||||||
            throw exception(CHAT_CONVERSATION_NOT_EXISTS);
 | 
					            throw exception(CHAT_CONVERSATION_NOT_EXISTS);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 1.2 校验模型是否存在
 | 
					        // 1.2 校验模型是否存在(修改模型的情况)
 | 
				
			||||||
        AiChatModelDO model;
 | 
					        if (!ObjectUtil.isAllEmpty(updateReqVO.getModelId(), updateReqVO.getMaxTokens(), updateReqVO.getMaxContexts())) {
 | 
				
			||||||
        if (updateReqVO.getModelId() != null) {
 | 
					            AiChatModelDO model = chatModalService.validateChatModel(updateReqVO.getModelId());
 | 
				
			||||||
            model = chatModalService.validateChatModel(updateReqVO.getModelId());
 | 
					 | 
				
			||||||
            Assert.notNull(model, "必须找到默认模型");
 | 
					            Assert.notNull(model, "必须找到默认模型");
 | 
				
			||||||
 | 
					            validateChatModel(model);
 | 
				
			||||||
 | 
					            // 校验 Token 数量、上下文数量
 | 
				
			||||||
 | 
					            if (updateReqVO.getMaxTokens() != null && updateReqVO.getMaxTokens() > model.getMaxTokens()) {
 | 
				
			||||||
 | 
					                throw exception(CHAT_CONVERSATION_UPDATE_MAX_TOKENS_ERROR);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (updateReqVO.getMaxContexts() != null && updateReqVO.getMaxContexts() > model.getMaxContexts()) {
 | 
				
			||||||
 | 
					                throw exception(CHAT_CONVERSATION_UPDATE_MAX_CONTEXTS_ERROR);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 1.3 校验温度参数、Token 数量、消息数量 TODO
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 更新对话信息
 | 
					        // 更新对话信息
 | 
				
			||||||
        chatConversationMapper.updateById(BeanUtils.toBean(updateReqVO, AiChatConversationDO.class));
 | 
					        AiChatConversationDO updateObj = BeanUtils.toBean(updateReqVO, AiChatConversationDO.class);
 | 
				
			||||||
 | 
					        if (Boolean.TRUE.equals(updateReqVO.getPinned())) {
 | 
				
			||||||
 | 
					            updateObj.setPinnedTime(LocalDateTime.now());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        chatConversationMapper.updateById(updateObj);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user