Commit 48c3210f5f0a2e95b006b609d0880deb93dc8eff
1 parent
10ca7a93
【新增】AI:新建对话时,不使用默认角色
Showing
5 changed files
with
12 additions
and
36 deletions
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,14 +20,6 @@ import java.util.List; | ||
| 20 | @Mapper | 20 | @Mapper |
| 21 | public interface AiChatRoleMapper extends BaseMapperX<AiChatRoleDO> { | 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 | default PageResult<AiChatRoleDO> selectPage(AiChatRolePageReqVO reqVO) { | 23 | default PageResult<AiChatRoleDO> selectPage(AiChatRolePageReqVO reqVO) { |
| 32 | return selectPage(reqVO, new LambdaQueryWrapperX<AiChatRoleDO>() | 24 | return selectPage(reqVO, new LambdaQueryWrapperX<AiChatRoleDO>() |
| 33 | .likeIfPresent(AiChatRoleDO::getName, reqVO.getName()) | 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,21 +46,22 @@ public class AiChatConversationServiceImpl implements AiChatConversationService | ||
| 46 | @Override | 46 | @Override |
| 47 | public Long createChatConversationMy(AiChatConversationCreateMyReqVO createReqVO, Long userId) { | 47 | public Long createChatConversationMy(AiChatConversationCreateMyReqVO createReqVO, Long userId) { |
| 48 | // 1.1 获得 AiChatRoleDO 聊天角色 | 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 | // 1.2 获得 AiChatModelDO 聊天模型 | 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 | : chatModalService.getRequiredDefaultChatModel(); | 52 | : chatModalService.getRequiredDefaultChatModel(); |
| 55 | Assert.notNull(model, "必须找到默认模型"); | 53 | Assert.notNull(model, "必须找到默认模型"); |
| 56 | validateChatModel(model); | 54 | validateChatModel(model); |
| 57 | 55 | ||
| 58 | // 2. 创建 AiChatConversationDO 聊天对话 | 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 | .setTemperature(model.getTemperature()).setMaxTokens(model.getMaxTokens()).setMaxContexts(model.getMaxContexts()); | 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 | chatConversationMapper.insert(conversation); | 65 | chatConversationMapper.insert(conversation); |
| 65 | return conversation.getId(); | 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,7 +165,9 @@ public class AiChatMessageServiceImpl implements AiChatMessageService { | ||
| 165 | // 1. 构建 Prompt Message 列表 | 165 | // 1. 构建 Prompt Message 列表 |
| 166 | List<Message> chatMessages = new ArrayList<>(); | 166 | List<Message> chatMessages = new ArrayList<>(); |
| 167 | // 1.1 system context 角色设定 | 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 | // 1.2 history message 历史消息 | 171 | // 1.2 history message 历史消息 |
| 170 | List<AiChatMessageDO> contextMessages = filterContextMessages(messages, conversation, sendReqVO); | 172 | List<AiChatMessageDO> contextMessages = filterContextMessages(messages, conversation, sendReqVO); |
| 171 | contextMessages.forEach(message -> chatMessages.add(new ChatMessage(message.getType().toUpperCase(), message.getContent()))); | 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,15 +95,6 @@ public interface AiChatRoleService { | ||
| 95 | AiChatRoleDO validateChatRole(Long id); | 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 | * @param pageReqVO 分页查询 | 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,16 +122,6 @@ public class AiChatRoleServiceImpl implements AiChatRoleService { | ||
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | @Override | 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 | public PageResult<AiChatRoleDO> getChatRolePage(AiChatRolePageReqVO pageReqVO) { | 125 | public PageResult<AiChatRoleDO> getChatRolePage(AiChatRolePageReqVO pageReqVO) { |
| 136 | return chatRoleMapper.selectPage(pageReqVO); | 126 | return chatRoleMapper.selectPage(pageReqVO); |
| 137 | } | 127 | } |