feat: 代码优化
This commit is contained in:
@@ -257,7 +257,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
|
|||||||
reasoningContentBuffer.append(newReasoningContent);
|
reasoningContentBuffer.append(newReasoningContent);
|
||||||
}
|
}
|
||||||
return success(new AiChatMessageSendRespVO()
|
return success(new AiChatMessageSendRespVO()
|
||||||
.setSend(BeanUtils.toBean(userMessage, AiChatMessageSendRespVO.Message.class))
|
//.setSend(BeanUtils.toBean(userMessage, AiChatMessageSendRespVO.Message.class))
|
||||||
.setReceive(BeanUtils.toBean(assistantMessage, AiChatMessageSendRespVO.Message.class)
|
.setReceive(BeanUtils.toBean(assistantMessage, AiChatMessageSendRespVO.Message.class)
|
||||||
.setContent(StrUtil.nullToDefault(newContent, "")) // 避免 null 的 情况
|
.setContent(StrUtil.nullToDefault(newContent, "")) // 避免 null 的 情况
|
||||||
.setReasoningContent(StrUtil.nullToDefault(newReasoningContent, "")) // 避免 null 的 情况
|
.setReasoningContent(StrUtil.nullToDefault(newReasoningContent, "")) // 避免 null 的 情况
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.controller.app;
|
package cn.iocoder.yudao.module.tik.chat.controller;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.tik.chat.vo.app.AppAiChatConversationCreateMyReqVO;
|
import cn.iocoder.yudao.module.tik.chat.vo.AppAiChatConversationCreateMyReqVO;
|
||||||
import cn.iocoder.yudao.module.tik.chat.vo.app.AppAiChatConversationRespVO;
|
import cn.iocoder.yudao.module.tik.chat.vo.AppAiChatConversationRespVO;
|
||||||
import cn.iocoder.yudao.module.tik.chat.vo.app.AppAiChatConversationUpdateMyReqVO;
|
import cn.iocoder.yudao.module.tik.chat.vo.AppAiChatConversationUpdateMyReqVO;
|
||||||
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.conversation.AiChatConversationCreateMyReqVO;
|
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.conversation.AiChatConversationCreateMyReqVO;
|
||||||
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.conversation.AiChatConversationUpdateMyReqVO;
|
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.conversation.AiChatConversationUpdateMyReqVO;
|
||||||
import cn.iocoder.yudao.module.tik.dal.dataobject.chat.AiChatConversationDO;
|
import cn.iocoder.yudao.module.tik.dal.dataobject.chat.AiChatConversationDO;
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.controller.app;
|
package cn.iocoder.yudao.module.tik.chat.controller;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.tik.chat.vo.app.AppAiChatMessageRespVO;
|
import cn.iocoder.yudao.module.tik.chat.vo.AppAiChatMessageRespVO;
|
||||||
import cn.iocoder.yudao.module.tik.chat.vo.app.AppAiChatMessageSendReqVO;
|
|
||||||
import cn.iocoder.yudao.module.tik.chat.vo.app.AppAiChatMessageSendRespVO;
|
|
||||||
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.message.AiChatMessageSendReqVO;
|
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.message.AiChatMessageSendReqVO;
|
||||||
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.message.AiChatMessageSendRespVO;
|
import cn.iocoder.yudao.module.tik.controller.admin.chat.vo.message.AiChatMessageSendRespVO;
|
||||||
import cn.iocoder.yudao.module.tik.dal.dataobject.chat.AiChatConversationDO;
|
import cn.iocoder.yudao.module.tik.dal.dataobject.chat.AiChatConversationDO;
|
||||||
@@ -52,68 +50,6 @@ public class AppAiChatMessageController {
|
|||||||
@Resource
|
@Resource
|
||||||
private AiKnowledgeDocumentService knowledgeDocumentService;
|
private AiKnowledgeDocumentService knowledgeDocumentService;
|
||||||
|
|
||||||
@Operation(summary = "发送消息(段式)", description = "一次性返回,响应较慢")
|
|
||||||
@PostMapping("/send")
|
|
||||||
public CommonResult<AppAiChatMessageSendRespVO> sendMessage(@Valid @RequestBody AppAiChatMessageSendReqVO sendReqVO) {
|
|
||||||
// 将 App VO 转换为 Admin VO
|
|
||||||
AiChatMessageSendReqVO adminReqVO = BeanUtils.toBean(sendReqVO, AiChatMessageSendReqVO.class);
|
|
||||||
// 调用 Service,然后转换响应
|
|
||||||
AiChatMessageSendRespVO adminResp = chatMessageService.sendMessage(adminReqVO, getLoginUserId());
|
|
||||||
// 手动转换 segments,因为内部类类型不同
|
|
||||||
AppAiChatMessageSendRespVO appResp = convertSendRespVO(adminResp);
|
|
||||||
return success(appResp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将 Admin 的 SendRespVO 转换为 App 的 SendRespVO
|
|
||||||
* 主要处理 segments 字段的类型转换
|
|
||||||
*/
|
|
||||||
private AppAiChatMessageSendRespVO convertSendRespVO(cn.iocoder.yudao.module.tik.controller.admin.chat.vo.message.AiChatMessageSendRespVO adminResp) {
|
|
||||||
if (adminResp == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
AppAiChatMessageSendRespVO appResp = new AppAiChatMessageSendRespVO();
|
|
||||||
|
|
||||||
// 转换 send
|
|
||||||
if (adminResp.getSend() != null) {
|
|
||||||
AppAiChatMessageSendRespVO.Message appSend = BeanUtils.toBean(adminResp.getSend(), AppAiChatMessageSendRespVO.Message.class);
|
|
||||||
if (adminResp.getSend().getSegments() != null) {
|
|
||||||
appSend.setSegments(convertKnowledgeSegments(adminResp.getSend().getSegments()));
|
|
||||||
}
|
|
||||||
appResp.setSend(appSend);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 转换 receive
|
|
||||||
if (adminResp.getReceive() != null) {
|
|
||||||
AppAiChatMessageSendRespVO.Message appReceive = BeanUtils.toBean(adminResp.getReceive(), AppAiChatMessageSendRespVO.Message.class);
|
|
||||||
if (adminResp.getReceive().getSegments() != null) {
|
|
||||||
appReceive.setSegments(convertKnowledgeSegments(adminResp.getReceive().getSegments()));
|
|
||||||
}
|
|
||||||
appResp.setReceive(appReceive);
|
|
||||||
}
|
|
||||||
|
|
||||||
return appResp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 转换 KnowledgeSegment 列表
|
|
||||||
*/
|
|
||||||
private List<AppAiChatMessageSendRespVO.KnowledgeSegment> convertKnowledgeSegments(
|
|
||||||
List<cn.iocoder.yudao.module.tik.controller.admin.chat.vo.message.AiChatMessageRespVO.KnowledgeSegment> adminSegments) {
|
|
||||||
if (adminSegments == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return convertList(adminSegments, segment -> {
|
|
||||||
if (segment == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new AppAiChatMessageSendRespVO.KnowledgeSegment()
|
|
||||||
.setId(segment.getId())
|
|
||||||
.setContent(segment.getContent())
|
|
||||||
.setDocumentId(segment.getDocumentId())
|
|
||||||
.setDocumentName(segment.getDocumentName());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(summary = "发送消息(流式)", description = "流式返回,响应较快")
|
@Operation(summary = "发送消息(流式)", description = "流式返回,响应较快")
|
||||||
@PostMapping(value = "/send-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
|
@PostMapping(value = "/send-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.vo.app;
|
package cn.iocoder.yudao.module.tik.chat.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.vo.app;
|
package cn.iocoder.yudao.module.tik.chat.vo;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.tik.dal.dataobject.model.AiChatRoleDO;
|
import cn.iocoder.yudao.module.tik.dal.dataobject.model.AiChatRoleDO;
|
||||||
import cn.iocoder.yudao.module.tik.dal.dataobject.model.AiModelDO;
|
import cn.iocoder.yudao.module.tik.dal.dataobject.model.AiModelDO;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.vo.app;
|
package cn.iocoder.yudao.module.tik.chat.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.vo.app;
|
package cn.iocoder.yudao.module.tik.chat.vo;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.tik.framework.ai.core.webserch.AiWebSearchResponse;
|
import cn.iocoder.yudao.module.tik.framework.ai.core.webserch.AiWebSearchResponse;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.vo.app;
|
package cn.iocoder.yudao.module.tik.chat.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.yudao.module.tik.chat.vo.app;
|
package cn.iocoder.yudao.module.tik.chat.vo;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.tik.framework.ai.core.webserch.AiWebSearchResponse;
|
import cn.iocoder.yudao.module.tik.framework.ai.core.webserch.AiWebSearchResponse;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
@@ -36,7 +36,7 @@ public class BatchProduceAlignment {
|
|||||||
private final String accessKeySecret = "kDqlGeJTKw6tJtFYiaY8vQTFuVIQDs";
|
private final String accessKeySecret = "kDqlGeJTKw6tJtFYiaY8vQTFuVIQDs";
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
/*public static void main(String[] args) {
|
||||||
try {
|
try {
|
||||||
BatchProduceAlignment batchProduce = new BatchProduceAlignment();
|
BatchProduceAlignment batchProduce = new BatchProduceAlignment();
|
||||||
batchProduce.initClient();
|
batchProduce.initClient();
|
||||||
@@ -78,7 +78,7 @@ public class BatchProduceAlignment {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println("Produce failed. Exception: " + e.toString());
|
System.out.println("Produce failed. Exception: " + e.toString());
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
public void initClient() throws Exception {
|
public void initClient() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user