|
|
@ -1,7 +1,9 @@ |
|
|
|
package com.cloud.kicc.system.service.impl; |
|
|
|
package com.cloud.kicc.system.service.impl; |
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.ListUtil; |
|
|
|
import cn.hutool.core.io.FileUtil; |
|
|
|
import cn.hutool.core.io.FileUtil; |
|
|
|
|
|
|
|
import cn.hutool.core.util.BooleanUtil; |
|
|
|
import cn.hutool.core.util.IdUtil; |
|
|
|
import cn.hutool.core.util.IdUtil; |
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
@ -74,20 +76,23 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public ImContent chatCompletions(ImContent imContent) { |
|
|
|
public ImContent chatCompletions(ImContent imContent, boolean contextEnable) { |
|
|
|
// 根据当前会话查询当前历史消息,进行AI上下文消息合并
|
|
|
|
// 根据当前会话查询当前历史消息,进行AI上下文消息合并
|
|
|
|
List<ImContent> imContents = super.list(Wrappers.<ImContent>lambdaQuery().eq(ImContent::getSessionId, imContent.getSessionId()) |
|
|
|
List<ImContent> imContents = super.list(Wrappers.<ImContent>lambdaQuery().eq(ImContent::getSessionId, imContent.getSessionId()) |
|
|
|
.last(String.format("LIMIT %s", openAiConfigProperties.getContextMessageMaxCount())) |
|
|
|
.last(String.format("LIMIT %s", openAiConfigProperties.getContextMessageMaxCount())) |
|
|
|
.orderByDesc(ImContent::getSendTime)); |
|
|
|
.orderByDesc(ImContent::getSendTime)); |
|
|
|
|
|
|
|
List<ChatMessage> completionMessages = ListUtil.empty(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (BooleanUtil.isTrue(contextEnable)) { |
|
|
|
// 历史上下文消息
|
|
|
|
// 历史上下文消息
|
|
|
|
List<ChatMessage> historyMessages = imContents.stream().map(item -> { |
|
|
|
completionMessages = imContents.stream().map(item -> { |
|
|
|
ChatMessage chatMessage = new ChatMessage(); |
|
|
|
ChatMessage chatMessage = new ChatMessage(); |
|
|
|
chatMessage.setRole(StrUtil.equals(item.getSendUserId(), imContent.getSendUserId()) ? ChatMessageRole.USER.value() : ChatMessageRole.ASSISTANT.value()); |
|
|
|
chatMessage.setRole(StrUtil.equals(item.getSendUserId(), imContent.getSendUserId()) ? ChatMessageRole.USER.value() : ChatMessageRole.ASSISTANT.value()); |
|
|
|
chatMessage.setContent(item.getContent()); |
|
|
|
chatMessage.setContent(item.getContent()); |
|
|
|
return chatMessage; |
|
|
|
return chatMessage; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
CollUtil.reverse(historyMessages); |
|
|
|
CollUtil.reverse(completionMessages); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (StrUtil.isNotBlank(imContent.getContent())) { |
|
|
|
if (StrUtil.isNotBlank(imContent.getContent())) { |
|
|
|
// 保存用户发送聊天记录
|
|
|
|
// 保存用户发送聊天记录
|
|
|
@ -99,10 +104,10 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent |
|
|
|
|
|
|
|
|
|
|
|
// Completion消息
|
|
|
|
// Completion消息
|
|
|
|
ChatMessage completionMessage = new ChatMessage(ChatMessageRole.USER.value(), imContent.getContent()); |
|
|
|
ChatMessage completionMessage = new ChatMessage(ChatMessageRole.USER.value(), imContent.getContent()); |
|
|
|
historyMessages.add(completionMessage); |
|
|
|
completionMessages.add(completionMessage); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ChatCompletionResult chatCompletionResult = AiUtil.getChatCompletion(historyMessages); |
|
|
|
ChatCompletionResult chatCompletionResult = AiUtil.getChatCompletion(completionMessages); |
|
|
|
List<ChatCompletionChoice> choiceList = chatCompletionResult.getChoices(); |
|
|
|
List<ChatCompletionChoice> choiceList = chatCompletionResult.getChoices(); |
|
|
|
|
|
|
|
|
|
|
|
if (choiceList.isEmpty()) { |
|
|
|
if (choiceList.isEmpty()) { |
|
|
|