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,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 }