mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-16 13:23:42 +00:00
修复:1.在使用dify的时候,发送1+1=?模型返回2,但是第二次问他为什么等于2的时候,模型无法获取上下文信息,经过排查,发现缺少conversationId,session表需要添加conversationId字段
2.在使用dify的时候message表中并没有存储模型返回的消息,并且扣除费用、
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package org.ruoyi.domain;
|
package org.ruoyi.domain;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -47,6 +48,9 @@ public class ChatSession extends BaseEntity {
|
|||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
private String remark;
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 会话id
|
||||||
|
*/
|
||||||
|
private String conversationId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.ruoyi.domain.bo;
|
package org.ruoyi.domain.bo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import io.github.linpeilie.annotations.AutoMapper;
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -44,6 +45,9 @@ public class ChatSessionBo extends BaseEntity {
|
|||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
private String remark;
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 会话id
|
||||||
|
*/
|
||||||
|
private String conversationId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,11 @@ public class ChatSessionVo implements Serializable {
|
|||||||
@ExcelProperty(value = "创建时间")
|
@ExcelProperty(value = "创建时间")
|
||||||
private String createTime;
|
private String createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会话id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "会话id")
|
||||||
|
private String conversationId;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.ruoyi.chat.service.chat.impl;
|
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.DifyClient;
|
||||||
import io.github.imfangs.dify.client.DifyClientFactory;
|
import io.github.imfangs.dify.client.DifyClientFactory;
|
||||||
import io.github.imfangs.dify.client.callback.ChatStreamCallback;
|
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.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.ruoyi.chat.enums.ChatModeType;
|
import org.ruoyi.chat.enums.ChatModeType;
|
||||||
|
import org.ruoyi.chat.service.chat.IChatCostService;
|
||||||
import org.ruoyi.chat.service.chat.IChatService;
|
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.common.chat.request.ChatRequest;
|
||||||
|
import org.ruoyi.domain.bo.ChatSessionBo;
|
||||||
import org.ruoyi.domain.vo.ChatModelVo;
|
import org.ruoyi.domain.vo.ChatModelVo;
|
||||||
|
import org.ruoyi.domain.vo.ChatSessionVo;
|
||||||
import org.ruoyi.service.IChatModelService;
|
import org.ruoyi.service.IChatModelService;
|
||||||
|
import org.ruoyi.service.IChatSessionService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
||||||
@@ -31,6 +37,10 @@ public class DifyServiceImpl implements IChatService {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IChatModelService chatModelService;
|
private IChatModelService chatModelService;
|
||||||
|
@Autowired
|
||||||
|
private IChatSessionService chatSessionService;
|
||||||
|
@Autowired
|
||||||
|
private IChatCostService chatCostService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
|
public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
|
||||||
@@ -53,6 +63,15 @@ public class DifyServiceImpl implements IChatService {
|
|||||||
.responseMode(ResponseMode.STREAMING)
|
.responseMode(ResponseMode.STREAMING)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
// 获取conversationId
|
||||||
|
ChatSessionVo sessionInfo = chatSessionService.queryById(chatRequest.getSessionId());
|
||||||
|
if (StrUtil.isNotBlank(sessionInfo.getConversationId())) {
|
||||||
|
message.setConversationId(sessionInfo.getConversationId());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取模型返回的消息
|
||||||
|
StringBuffer respMessage = new StringBuffer();
|
||||||
|
|
||||||
// 发送流式消息
|
// 发送流式消息
|
||||||
try {
|
try {
|
||||||
chatClient.sendChatMessageStream(message, new ChatStreamCallback() {
|
chatClient.sendChatMessageStream(message, new ChatStreamCallback() {
|
||||||
@@ -60,6 +79,7 @@ public class DifyServiceImpl implements IChatService {
|
|||||||
@Override
|
@Override
|
||||||
public void onMessage(MessageEvent event) {
|
public void onMessage(MessageEvent event) {
|
||||||
emitter.send(event.getAnswer());
|
emitter.send(event.getAnswer());
|
||||||
|
respMessage.append(event.getAnswer());
|
||||||
log.info("收到消息片段: {}", event.getAnswer());
|
log.info("收到消息片段: {}", event.getAnswer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +87,29 @@ public class DifyServiceImpl implements IChatService {
|
|||||||
public void onMessageEnd(MessageEndEvent event) {
|
public void onMessageEnd(MessageEndEvent event) {
|
||||||
emitter.complete();
|
emitter.complete();
|
||||||
log.info("消息结束,完整消息ID: {}", event.getMessageId());
|
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
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user