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