mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-04 07:26:10 +00:00
Merge pull request #142 from keke-cxn/main
修复:请求地址'/system/role/authUser/selectAll',发生未知异常:cn.dev33.satoken.exce…
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.ruoyi.chat.service.chat.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.github.imfangs.dify.client.DifyClient;
|
||||
import io.github.imfangs.dify.client.DifyClientFactory;
|
||||
import io.github.imfangs.dify.client.callback.ChatStreamCallback;
|
||||
@@ -12,10 +13,15 @@ import io.github.imfangs.dify.client.model.chat.ChatMessage;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.ruoyi.chat.enums.ChatModeType;
|
||||
import org.ruoyi.chat.service.chat.IChatCostService;
|
||||
import org.ruoyi.chat.service.chat.IChatService;
|
||||
import org.ruoyi.common.chat.entity.chat.Message;
|
||||
import org.ruoyi.common.chat.request.ChatRequest;
|
||||
import org.ruoyi.domain.bo.ChatSessionBo;
|
||||
import org.ruoyi.domain.vo.ChatModelVo;
|
||||
import org.ruoyi.domain.vo.ChatSessionVo;
|
||||
import org.ruoyi.service.IChatModelService;
|
||||
import org.ruoyi.service.IChatSessionService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
||||
@@ -31,6 +37,10 @@ public class DifyServiceImpl implements IChatService {
|
||||
|
||||
@Autowired
|
||||
private IChatModelService chatModelService;
|
||||
@Autowired
|
||||
private IChatSessionService chatSessionService;
|
||||
@Autowired
|
||||
private IChatCostService chatCostService;
|
||||
|
||||
@Override
|
||||
public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
|
||||
@@ -53,6 +63,15 @@ public class DifyServiceImpl implements IChatService {
|
||||
.responseMode(ResponseMode.STREAMING)
|
||||
.build();
|
||||
|
||||
// 获取conversationId
|
||||
ChatSessionVo sessionInfo = chatSessionService.queryById(chatRequest.getSessionId());
|
||||
if (StrUtil.isNotBlank(sessionInfo.getConversationId())) {
|
||||
message.setConversationId(sessionInfo.getConversationId());
|
||||
}
|
||||
|
||||
// 获取模型返回的消息
|
||||
StringBuffer respMessage = new StringBuffer();
|
||||
|
||||
// 发送流式消息
|
||||
try {
|
||||
chatClient.sendChatMessageStream(message, new ChatStreamCallback() {
|
||||
@@ -60,6 +79,7 @@ public class DifyServiceImpl implements IChatService {
|
||||
@Override
|
||||
public void onMessage(MessageEvent event) {
|
||||
emitter.send(event.getAnswer());
|
||||
respMessage.append(event.getAnswer());
|
||||
log.info("收到消息片段: {}", event.getAnswer());
|
||||
}
|
||||
|
||||
@@ -67,6 +87,29 @@ public class DifyServiceImpl implements IChatService {
|
||||
public void onMessageEnd(MessageEndEvent event) {
|
||||
emitter.complete();
|
||||
log.info("消息结束,完整消息ID: {}", event.getMessageId());
|
||||
// 更新conversationId
|
||||
if (StrUtil.isBlank(sessionInfo.getConversationId())) {
|
||||
String conversationId = event.getConversationId();
|
||||
sessionInfo.setConversationId(conversationId);
|
||||
// 更新conversationId
|
||||
ChatSessionBo chatSessionBo = new ChatSessionBo();
|
||||
chatSessionBo.setConversationId(sessionInfo.getConversationId());
|
||||
chatSessionBo.setId(sessionInfo.getId());
|
||||
chatSessionBo.setUserId(sessionInfo.getUserId());
|
||||
chatSessionBo.setSessionTitle(sessionInfo.getSessionTitle());
|
||||
chatSessionBo.setSessionContent(sessionInfo.getSessionContent());
|
||||
chatSessionBo.setRemark(sessionInfo.getRemark());
|
||||
chatSessionService.updateByBo(chatSessionBo);
|
||||
}
|
||||
// 扣除费用
|
||||
ChatRequest chatRequestResponse = new ChatRequest();
|
||||
// 设置对话角色
|
||||
chatRequestResponse.setRole(Message.Role.ASSISTANT.getName());
|
||||
chatRequestResponse.setModel(chatRequest.getModel());
|
||||
chatRequestResponse.setUserId(chatRequest.getUserId());
|
||||
chatRequestResponse.setSessionId(chatRequest.getSessionId());
|
||||
chatRequestResponse.setPrompt(respMessage.toString());
|
||||
chatCostService.deductToken(chatRequestResponse);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user