|
@@ -3,7 +3,11 @@ package com.webchat.aigc.llm;
|
|
|
|
|
|
import com.webchat.common.constants.ConnectConstants;
|
|
|
import com.webchat.common.enums.AiFunctionEnum;
|
|
|
+import com.webchat.common.enums.ChatMessageTypeEnum;
|
|
|
+import com.webchat.common.enums.messagequeue.MessageQueueEnum;
|
|
|
+import com.webchat.common.helper.SessionHelper;
|
|
|
import com.webchat.common.helper.SseEmitterHelper;
|
|
|
+import com.webchat.common.service.messagequeue.producer.MessageQueueProducer;
|
|
|
import com.webchat.common.util.JsonUtil;
|
|
|
import com.webchat.domain.vo.llm.FunctionCallResponse;
|
|
|
import com.webchat.domain.vo.llm.image.ImageGenerateResponse;
|
|
@@ -29,6 +33,9 @@ public class AiAgentFlowService {
|
|
|
@Autowired
|
|
|
private LibLibGenerateImageService libLibGenerateImageService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private MessageQueueProducer<ChatMessageRequestVO, Long> messageQueueProducer;
|
|
|
+
|
|
|
/**
|
|
|
* 旗舰版文生图模版id
|
|
|
*/
|
|
@@ -48,7 +55,22 @@ public class AiAgentFlowService {
|
|
|
* @param message
|
|
|
*/
|
|
|
public void doAgent(String message) {
|
|
|
+
|
|
|
ChatMessageRequestVO chatMessage = JsonUtil.fromJson(message, ChatMessageRequestVO.class);
|
|
|
+
|
|
|
+ if (!SseEmitterHelper.isExist(getSSEBizCode(), chatMessage.getSenderId())) {
|
|
|
+ /**
|
|
|
+ * 因为当前doAgent AIGC服务消费来自webchat-connect服务的websocket端点的MQ广播消息
|
|
|
+ * 所以,在分布式部署场景下,可能当前消息发送人的sse链接并不在当前节点。
|
|
|
+ */
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 消息持久化用户发给机器人消息
|
|
|
+ */
|
|
|
+ this.persistentAiMessage(chatMessage.getSenderId(), chatMessage.getReceiverId(), chatMessage.getMessage());
|
|
|
+
|
|
|
String senderId = chatMessage.getSenderId();
|
|
|
/**
|
|
|
* 1. 意图识别
|
|
@@ -71,9 +93,10 @@ public class AiAgentFlowService {
|
|
|
* 2. 根据意图执行对应工作流
|
|
|
*/
|
|
|
SseEmitter sseEmitter = SseEmitterHelper.get(this.getSSEBizCode(), senderId);
|
|
|
+ String agentResponse = null;
|
|
|
if (AiFunctionEnum.CHAT.name().equals(functionCallResponse.getFunction())) {
|
|
|
// 机器人对话
|
|
|
- gptChatService.chat(sseEmitter, chatMessage);
|
|
|
+ agentResponse = gptChatService.chat(sseEmitter, chatMessage);
|
|
|
} else if (AiFunctionEnum.IMAGE.name().equals(functionCallResponse.getFunction())) {
|
|
|
// 机器人对话
|
|
|
RequestGenerateBaseParam baseParam = RequestGenerateBaseParam.of(chatMessage.getMessage());
|
|
@@ -94,11 +117,36 @@ public class AiAgentFlowService {
|
|
|
stringBuilder.append("\n");
|
|
|
}
|
|
|
}
|
|
|
- SseEmitterHelper.send(this.getSSEBizCode(), senderId, stringBuilder.toString());
|
|
|
+ agentResponse = stringBuilder.toString();
|
|
|
+ SseEmitterHelper.send(this.getSSEBizCode(), senderId, agentResponse);
|
|
|
} catch (Exception e) {
|
|
|
log.error("文生图服务异常 =====> param: {}", JsonUtil.toJsonString(param), e);
|
|
|
SseEmitterHelper.send(this.getSSEBizCode(), senderId, "意图识别失败,稍后重试~");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 机器人响应消息持久化
|
|
|
+ */
|
|
|
+ if (agentResponse != null) {
|
|
|
+ this.persistentAiMessage(chatMessage.getReceiverId(), chatMessage.getSenderId(), agentResponse);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 机器人对话场景,消息持久化
|
|
|
+ *
|
|
|
+ * @param senderId
|
|
|
+ * @param receiverId
|
|
|
+ * @param message
|
|
|
+ */
|
|
|
+ private void persistentAiMessage(String senderId, String receiverId, String message) {
|
|
|
+ ChatMessageRequestVO chatMessageRequestVO = new ChatMessageRequestVO();
|
|
|
+ chatMessageRequestVO.setSenderId(senderId);
|
|
|
+ chatMessageRequestVO.setReceiverId(receiverId);
|
|
|
+ chatMessageRequestVO.setMessage(message);
|
|
|
+ chatMessageRequestVO.setType(ChatMessageTypeEnum.CHAT_TEXT.getType());
|
|
|
+ messageQueueProducer.send(MessageQueueEnum.QUEUE_PERSISTENT_MESSAGE, chatMessageRequestVO);
|
|
|
}
|
|
|
}
|