|
@@ -9,29 +9,25 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.module.ai.ErrorCodeConstants;
|
|
|
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation.AiChatConversationPageReqVO;
|
|
|
import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessagePageReqVO;
|
|
|
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessageSendRespVO;
|
|
|
-import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
|
|
|
-import cn.iocoder.yudao.module.ai.service.model.AiApiKeyService;
|
|
|
-import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
-import jakarta.annotation.Resource;
|
|
|
-import org.springframework.ai.chat.ChatResponse;
|
|
|
-import org.springframework.ai.chat.StreamingChatClient;
|
|
|
-import org.springframework.ai.chat.messages.*;
|
|
|
-import org.springframework.ai.chat.prompt.ChatOptions;
|
|
|
-import org.springframework.ai.chat.prompt.Prompt;
|
|
|
-import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessageRespVO;
|
|
|
import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessageSendReqVO;
|
|
|
+import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessageSendRespVO;
|
|
|
+import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
|
|
|
import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO;
|
|
|
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
|
|
|
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
|
|
|
import cn.iocoder.yudao.module.ai.dal.mysql.chat.AiChatMessageMapper;
|
|
|
+import cn.iocoder.yudao.module.ai.service.model.AiApiKeyService;
|
|
|
import cn.iocoder.yudao.module.ai.service.model.AiChatModelService;
|
|
|
import cn.iocoder.yudao.module.ai.service.model.AiChatRoleService;
|
|
|
+import jakarta.annotation.Resource;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.ai.chat.ChatResponse;
|
|
|
+import org.springframework.ai.chat.StreamingChatClient;
|
|
|
+import org.springframework.ai.chat.messages.*;
|
|
|
+import org.springframework.ai.chat.prompt.ChatOptions;
|
|
|
+import org.springframework.ai.chat.prompt.Prompt;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import reactor.core.publisher.Flux;
|
|
@@ -70,9 +66,6 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
|
|
|
@Resource
|
|
|
private AiApiKeyService apiKeyService;
|
|
|
|
|
|
- @Resource
|
|
|
- private AdminUserApi adminUserApi;
|
|
|
-
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public AiChatMessageRespVO sendMessage(AiChatMessageSendReqVO req) {
|
|
|
return null; // TODO 芋艿:一起改
|
|
@@ -124,7 +117,6 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
|
|
|
AiChatModelDO model = chatModalService.validateChatModel(conversation.getModelId());
|
|
|
StreamingChatClient chatClient = apiKeyService.getStreamingChatClient(model.getKeyId());
|
|
|
// 1.3 获取用户头像、角色头像
|
|
|
- AdminUserRespDTO user = adminUserApi.getUser(SecurityFrameworkUtils.getLoginUserId());
|
|
|
AiChatRoleDO role = conversation.getRoleId() != null ? chatRoleService.getChatRole(conversation.getRoleId()) : null;
|
|
|
|
|
|
// 2. 插入 user 发送消息
|
|
@@ -147,11 +139,8 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
|
|
|
newContent = StrUtil.nullToDefault(newContent, ""); // 避免 null 的 情况
|
|
|
contentBuffer.append(newContent);
|
|
|
// 响应结果
|
|
|
- AiChatMessageSendRespVO.Message send = BeanUtils.toBean(userMessage, AiChatMessageSendRespVO.Message.class,
|
|
|
- o -> o.setUserAvatar(user.getAvatar()));
|
|
|
- AiChatMessageSendRespVO.Message receive = BeanUtils.toBean(assistantMessage, AiChatMessageSendRespVO.Message.class,
|
|
|
- o -> o.setRoleAvatar(role != null ? role.getAvatar() : null)).setContent(newContent);
|
|
|
- return success(new AiChatMessageSendRespVO().setSend(send).setReceive(receive));
|
|
|
+ return success(new AiChatMessageSendRespVO().setSend(BeanUtils.toBean(userMessage, AiChatMessageSendRespVO.Message.class))
|
|
|
+ .setReceive(BeanUtils.toBean(assistantMessage, AiChatMessageSendRespVO.Message.class).setContent(newContent)));
|
|
|
}).doOnComplete(() -> {
|
|
|
chatMessageMapper.updateById(new AiChatMessageDO().setId(assistantMessage.getId()).setContent(contentBuffer.toString()));
|
|
|
}).doOnError(throwable -> {
|