|
@@ -240,8 +240,7 @@ public class AiChatController {
|
|
}
|
|
}
|
|
|
|
|
|
// 解析 JSON 并提取 "content" 字段的值
|
|
// 解析 JSON 并提取 "content" 字段的值
|
|
- String questionText;
|
|
|
|
- questionText = content; // 提取 "content" 字段的值
|
|
|
|
|
|
+ String questionText = content;
|
|
|
|
|
|
// 检查是否已经存在相同的 sessionId
|
|
// 检查是否已经存在相同的 sessionId
|
|
boolean exists = aiSessionMapper.existsBySessionId(sessionId);
|
|
boolean exists = aiSessionMapper.existsBySessionId(sessionId);
|
|
@@ -257,29 +256,53 @@ public class AiChatController {
|
|
aiSessionMapper.save(aiSession);
|
|
aiSessionMapper.save(aiSession);
|
|
}
|
|
}
|
|
|
|
|
|
- // 获取当前用户的对话历史
|
|
|
|
- List<AiQuestion> conversationHistory = aiQuestionMapper.findByUserIdAndSessionId(sessionId, userId);
|
|
|
|
-
|
|
|
|
- // 只保留最近的几轮对话
|
|
|
|
-// int historyLimit = Limit;
|
|
|
|
-// if (conversationHistory.size() > historyLimit) {
|
|
|
|
-// conversationHistory = conversationHistory.subList(conversationHistory.size() - historyLimit, conversationHistory.size());
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
- // 构建对话历史消息
|
|
|
|
- List<Message> messages = conversationHistory.stream()
|
|
|
|
- .map(q -> Message.builder()
|
|
|
|
- .role(q.getUserId().equals(userId) ? Role.USER.getValue() : Role.ASSISTANT.getValue())
|
|
|
|
- .content(q.getUserId().equals(userId) ? q.getQuestion() : q.getAnswer())
|
|
|
|
- .build())
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
|
|
+ // 构建消息列表,包含角色定义、历史对话记录和用户新消息
|
|
|
|
+ List<Message> messages = new ArrayList<>();
|
|
|
|
|
|
// 插入角色定义(在对话历史的开头)
|
|
// 插入角色定义(在对话历史的开头)
|
|
Message roleDefinition = Message.builder()
|
|
Message roleDefinition = Message.builder()
|
|
.role(Role.SYSTEM.getValue()) // 使用系统角色
|
|
.role(Role.SYSTEM.getValue()) // 使用系统角色
|
|
.content(aiRole) // 定义角色的行为和风格
|
|
.content(aiRole) // 定义角色的行为和风格
|
|
.build();
|
|
.build();
|
|
- messages.add(0, roleDefinition); // 将角色定义插入到对话历史的开头
|
|
|
|
|
|
+ messages.add(roleDefinition); // 将角色定义插入到对话历史的开头
|
|
|
|
+
|
|
|
|
+ // 从数据库中获取历史对话记录
|
|
|
|
+ List<AiQuestion> questions = aiQuestionMapper.findQuestionsBySessionId(sessionId);
|
|
|
|
+
|
|
|
|
+ // 如果历史记录超过限制,则只取最近的记录
|
|
|
|
+ if (questions.size() > Limit) {
|
|
|
|
+ questions = questions.subList(questions.size() - Limit, questions.size());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 将历史对话记录转换为 AiQuestionItem 列表
|
|
|
|
+ List<AiQuestionItem> itemList = new ArrayList<>();
|
|
|
|
+ for (AiQuestion question : questions) {
|
|
|
|
+ AiQuestionItem userItem = new AiQuestionItem("user", question.getQuestion());
|
|
|
|
+ userItem.setId(question.getId());
|
|
|
|
+ userItem.setSessionId(question.getSessionId());
|
|
|
|
+ userItem.setUserId(question.getUserId());
|
|
|
|
+ userItem.setUserName(question.getUserName());
|
|
|
|
+ userItem.setAskTime(question.getAskTime());
|
|
|
|
+
|
|
|
|
+ AiQuestionItem assistantItem = new AiQuestionItem("assistant", question.getAnswer());
|
|
|
|
+ assistantItem.setId(question.getId());
|
|
|
|
+ assistantItem.setSessionId(question.getSessionId());
|
|
|
|
+ assistantItem.setUserId(question.getUserId());
|
|
|
|
+ assistantItem.setUserName(question.getUserName());
|
|
|
|
+ assistantItem.setAskTime(question.getAskTime());
|
|
|
|
+
|
|
|
|
+ itemList.add(userItem);
|
|
|
|
+ itemList.add(assistantItem);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 将 AiQuestionItem 列表转换为消息列表
|
|
|
|
+ for (AiQuestionItem item : itemList) {
|
|
|
|
+ Message message = Message.builder()
|
|
|
|
+ .role(item.getRole().equals("user") ? Role.USER.getValue() : Role.ASSISTANT.getValue())
|
|
|
|
+ .content(item.getContent() != null ? item.getContent() : item.getReasoningContent())
|
|
|
|
+ .build();
|
|
|
|
+ messages.add(message);
|
|
|
|
+ }
|
|
|
|
|
|
// 添加用户的新消息
|
|
// 添加用户的新消息
|
|
Message userMessage = Message.builder()
|
|
Message userMessage = Message.builder()
|