Commit 48c3210f5f0a2e95b006b609d0880deb93dc8eff

Authored by YunaiV
1 parent 10ca7a93

【新增】AI:新建对话时,不使用默认角色

yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/AiChatRoleMapper.java
... ... @@ -20,14 +20,6 @@ import java.util.List;
20 20 @Mapper
21 21 public interface AiChatRoleMapper extends BaseMapperX<AiChatRoleDO> {
22 22  
23   - default AiChatRoleDO selectFirstByPublicStatusAndStatus(Boolean publicStatus, Integer status) {
24   - return selectOne(new QueryWrapperX<AiChatRoleDO>()
25   - .eq("status", status)
26   - .eq("public_status", publicStatus)
27   - .limitN(1)
28   - .orderByAsc("sort"));
29   - }
30   -
31 23 default PageResult<AiChatRoleDO> selectPage(AiChatRolePageReqVO reqVO) {
32 24 return selectPage(reqVO, new LambdaQueryWrapperX<AiChatRoleDO>()
33 25 .likeIfPresent(AiChatRoleDO::getName, reqVO.getName())
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatConversationServiceImpl.java
... ... @@ -46,21 +46,22 @@ public class AiChatConversationServiceImpl implements AiChatConversationService
46 46 @Override
47 47 public Long createChatConversationMy(AiChatConversationCreateMyReqVO createReqVO, Long userId) {
48 48 // 1.1 获得 AiChatRoleDO 聊天角色
49   - AiChatRoleDO role = createReqVO.getRoleId() != null ? chatRoleService.validateChatRole(createReqVO.getRoleId())
50   - : chatRoleService.getRequiredDefaultChatRole();
51   - Assert.notNull(role, "必须找到聊天角色");
  49 + AiChatRoleDO role = createReqVO.getRoleId() != null ? chatRoleService.validateChatRole(createReqVO.getRoleId()) : null;
52 50 // 1.2 获得 AiChatModelDO 聊天模型
53   - AiChatModelDO model = role.getModelId() != null ? chatModalService.validateChatModel(role.getModelId())
  51 + AiChatModelDO model = role != null && role.getModelId() != null ? chatModalService.validateChatModel(role.getModelId())
54 52 : chatModalService.getRequiredDefaultChatModel();
55 53 Assert.notNull(model, "必须找到默认模型");
56 54 validateChatModel(model);
57 55  
58 56 // 2. 创建 AiChatConversationDO 聊天对话
59   - String title = createReqVO.getRoleId() == null ? AiChatConversationDO.TITLE_DEFAULT : role.getName();
60   - AiChatConversationDO conversation = new AiChatConversationDO()
61   - .setUserId(userId).setTitle(title).setPinned(false)
62   - .setRoleId(role.getId()).setModelId(model.getId()).setModel(model.getModel()).setSystemMessage(role.getSystemMessage())
  57 + AiChatConversationDO conversation = new AiChatConversationDO().setUserId(userId).setPinned(false)
  58 + .setModelId(model.getId()).setModel(model.getModel())
63 59 .setTemperature(model.getTemperature()).setMaxTokens(model.getMaxTokens()).setMaxContexts(model.getMaxContexts());
  60 + if (role != null) {
  61 + conversation.setTitle(role.getName()).setRoleId(role.getId()).setSystemMessage(role.getSystemMessage());
  62 + } else {
  63 + conversation.setTitle(AiChatConversationDO.TITLE_DEFAULT);
  64 + }
64 65 chatConversationMapper.insert(conversation);
65 66 return conversation.getId();
66 67 }
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java
... ... @@ -165,7 +165,9 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
165 165 // 1. 构建 Prompt Message 列表
166 166 List<Message> chatMessages = new ArrayList<>();
167 167 // 1.1 system context 角色设定
168   - chatMessages.add(new SystemMessage(conversation.getSystemMessage()));
  168 + if (StrUtil.isNotBlank(conversation.getSystemMessage())) {
  169 + chatMessages.add(new SystemMessage(conversation.getSystemMessage()));
  170 + }
169 171 // 1.2 history message 历史消息
170 172 List<AiChatMessageDO> contextMessages = filterContextMessages(messages, conversation, sendReqVO);
171 173 contextMessages.forEach(message -> chatMessages.add(new ChatMessage(message.getType().toUpperCase(), message.getContent())));
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/AiChatRoleService.java
... ... @@ -95,15 +95,6 @@ public interface AiChatRoleService {
95 95 AiChatRoleDO validateChatRole(Long id);
96 96  
97 97 /**
98   - * 获得默认的聊天角色
99   - *
100   - * 如果获取不到,则抛出 {@link cn.iocoder.yudao.framework.common.exception.ServiceException} 业务异常
101   - *
102   - * @return 聊天角色
103   - */
104   - AiChatRoleDO getRequiredDefaultChatRole();
105   -
106   - /**
107 98 * 获得聊天角色分页
108 99 *
109 100 * @param pageReqVO 分页查询
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/AiChatRoleServiceImpl.java
... ... @@ -122,16 +122,6 @@ public class AiChatRoleServiceImpl implements AiChatRoleService {
122 122 }
123 123  
124 124 @Override
125   - public AiChatRoleDO getRequiredDefaultChatRole() {
126   - AiChatRoleDO chatRole = chatRoleMapper.selectFirstByPublicStatusAndStatus(
127   - true, CommonStatusEnum.ENABLE.getStatus());
128   - if (chatRole == null) {
129   - throw exception(CHAT_ROLE_DEFAULT_NOT_EXISTS);
130   - }
131   - return chatRole;
132   - }
133   -
134   - @Override
135 125 public PageResult<AiChatRoleDO> getChatRolePage(AiChatRolePageReqVO pageReqVO) {
136 126 return chatRoleMapper.selectPage(pageReqVO);
137 127 }
... ...