Commit cad1ce4852f449785fee1b3d2fc9d7bc3acc42e1

Authored by cherishsince
1 parent 747b2ebc

【增加】AI message 增加用户头像、role头像

yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageRespVO.java
... ... @@ -36,4 +36,11 @@ public class AiChatMessageRespVO {
36 36 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-12 12:51")
37 37 private LocalDateTime createTime;
38 38  
  39 + // ========= 扩展字段
  40 +
  41 + @Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "http://xxx")
  42 + private String userAvatar;
  43 +
  44 + @Schema(description = "角色头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "http://xxx")
  45 + private String roleAvatar;
39 46 }
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/AiChatServiceImpl.java
... ... @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.ai.convert.AiChatMessageConvert;
13 13 import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
14 14 import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO;
15 15 import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
  16 +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
16 17 import cn.iocoder.yudao.module.ai.dal.mysql.AiChatMessageMapper;
17 18 import cn.iocoder.yudao.module.ai.service.AiChatService;
18 19 import cn.iocoder.yudao.module.ai.service.chat.AiChatConversationService;
... ... @@ -216,16 +217,22 @@ public class AiChatServiceImpl implements AiChatService {
216 217 // 获取对话所有 message
217 218 List<AiChatMessageDO> aiChatMessageDOList = chatMessageMapper.selectByConversationId(conversationId);
218 219 // 获取模型信息
219   - Set<Long> modalIds = aiChatMessageDOList.stream().map(AiChatMessageDO::getModelId).collect(Collectors.toSet());
220   - List<AiChatModelDO> modalList = chatModalService.getModalByIds(modalIds);
221   - Map<Long, AiChatModelDO> modalIdMap = modalList.stream().collect(Collectors.toMap(AiChatModelDO::getId, o -> o));
  220 + Set<Long> roleIds = aiChatMessageDOList.stream().map(AiChatMessageDO::getRoleId).collect(Collectors.toSet());
  221 + List<AiChatRoleDO> roleList;
  222 + if (!CollUtil.isEmpty(roleIds)) {
  223 + roleList = chatRoleService.getChatRoles(roleIds);
  224 + } else {
  225 + roleList = Collections.emptyList();
  226 + }
  227 + Map<Long, AiChatRoleDO> roleMap = roleList.stream().collect(Collectors.toMap(AiChatRoleDO::getId, o -> o));
222 228 // 转换 AiChatMessageRespVO
223 229 List<AiChatMessageRespVO> aiChatMessageRespList = AiChatMessageConvert.INSTANCE.convertAiChatMessageRespVOList(aiChatMessageDOList);
224   - // 设置用户头像 和 模型头像 todo @芋艿 这里需要转换 用户头像、模型头像
  230 + // 设置用户头像 和 模型头像
225 231 return aiChatMessageRespList.stream().map(item -> {
226   - if (modalIdMap.containsKey(item.getModelId())) {
227   -// modalIdMap.get(item.getModelId());
228   -// item.setModelImage()
  232 + // 设置 role 头像
  233 + if (roleMap.containsKey(item.getRoleId())) {
  234 + AiChatRoleDO role = roleMap.get(item.getRoleId());
  235 + item.setRoleAvatar(role.getAvatar());
229 236 }
230 237 return item;
231 238 }).collect(Collectors.toList());
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/AiChatRoleService.java
... ... @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
9 9 import jakarta.validation.Valid;
10 10  
11 11 import java.util.List;
  12 +import java.util.Set;
12 13  
13 14 /**
14 15 * AI 聊天角色 Service 接口
... ... @@ -73,6 +74,14 @@ public interface AiChatRoleService {
73 74 AiChatRoleDO getChatRole(Long id);
74 75  
75 76 /**
  77 + * 获得聊天角色 - 根据 ids
  78 + *
  79 + * @param roleIds
  80 + * @return
  81 + */
  82 + List<AiChatRoleDO> getChatRoles(Set<Long> roleIds);
  83 +
  84 + /**
76 85 * 校验聊天角色是否合法
77 86 *
78 87 * @param id 角色编号
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/AiChatRoleServiceImpl.java
... ... @@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
16 16  
17 17 import java.util.List;
18 18 import java.util.Objects;
  19 +import java.util.Set;
19 20 import java.util.function.Function;
20 21 import java.util.function.Predicate;
21 22 import java.util.stream.Collectors;
... ... @@ -106,6 +107,11 @@ public class AiChatRoleServiceImpl implements AiChatRoleService {
106 107 }
107 108  
108 109 @Override
  110 + public List<AiChatRoleDO> getChatRoles(Set<Long> roleIds) {
  111 + return chatRoleMapper.selectBatchIds(roleIds);
  112 + }
  113 +
  114 + @Override
109 115 public AiChatRoleDO validateChatRole(Long id) {
110 116 AiChatRoleDO chatRole = validateChatRoleExists(id);
111 117 if (CommonStatusEnum.isDisable(chatRole.getStatus())) {
... ...