Commit 5a711d988dddb972576ddc6e7743f52f3d755848
Merge remote-tracking branch 'origin/master-jdk21-ai' into master-jdk21-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 | 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 | } | ... | ... |