Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@
import org.ruoyi.service.chat.IChatMessageService;
import org.springframework.stereotype.Service;
import org.ruoyi.mapper.chat.ChatMessageMapper;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
Expand Down Expand Up @@ -74,8 +74,11 @@ public List<ChatMessageVo> queryList(ChatMessageBo bo) {
}

private LambdaQueryWrapper<ChatMessage> buildQueryWrapper(ChatMessageBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ChatMessage> lqw = Wrappers.lambdaQuery();
if (bo == null) {
return lqw.orderByAsc(ChatMessage::getId);
}

lqw.orderByAsc(ChatMessage::getId);
lqw.eq(bo.getSessionId() != null, ChatMessage::getSessionId, bo.getSessionId());
lqw.eq(bo.getUserId() != null, ChatMessage::getUserId, bo.getUserId());
Expand Down Expand Up @@ -155,12 +158,34 @@ public List<dev.langchain4j.data.message.ChatMessage> getMessagesBySessionId(Lon
ChatMessageBo bo = new ChatMessageBo();
bo.setSessionId(sessionId);
List<ChatMessageVo> voList = queryList(bo);

if (CollectionUtils.isEmpty(voList)) {
return chatMessageList;
}
for (ChatMessageVo chatMessageVo : voList) {
switch (chatMessageVo.getRole()) {
case "user" -> chatMessageList.add(UserMessage.from(chatMessageVo.getContent()));
case "assistant" -> chatMessageList.add(AiMessage.from(chatMessageVo.getContent()));
//过滤掉不合法的消息记录,避免对话历史中出现异常数据导致模型调用失败
if (chatMessageVo == null
|| StringUtils.isBlank(chatMessageVo.getRole())
|| StringUtils.isBlank(chatMessageVo.getContent())) {
continue;
}
//角色类型不区分大小写,统一转换为小写进行处理
String role = chatMessageVo.getRole().trim().toLowerCase(java.util.Locale.ROOT);
switch (role) {
case "user" ->
chatMessageList.add(
UserMessage.from(chatMessageVo.getContent().trim())
);

case "assistant" ->
chatMessageList.add(
AiMessage.from(chatMessageVo.getContent().trim())
);

default ->
log.warn("Unknown chat role when loading history, sessionId={}, role={}",
sessionId, role);
}

}
return chatMessageList;
}
Expand All @@ -182,7 +207,11 @@ public Boolean deleteBySessionId(Long sessionId) {

LambdaQueryWrapper<ChatMessage> lqw = Wrappers.lambdaQuery();
lqw.eq(ChatMessage::getSessionId, sessionId);
return baseMapper.delete(lqw) > 0;

int rows = baseMapper.delete(lqw);
// rows=0 表示无匹配数据,不视为失败
log.debug("delete chat history finished, sessionId={}, rows={}", sessionId, rows);
return true;
}

/**
Expand All @@ -201,6 +230,10 @@ public void saveChatMessage(Long userId, Long sessionId, String content, String
log.warn("缺少用户ID,无法保存消息");
return;
}
if (StringUtils.isBlank(content)) {
log.warn("消息内容为空,跳过保存");
return;
}

ChatMessageBo messageBo = new ChatMessageBo();
messageBo.setUserId(userId);
Expand Down