Browse Source

feat: ai

master
wangxiang 1 year ago
parent
commit
a7df4ed29d
No known key found for this signature in database
GPG Key ID: 1BA7946AB6B232E4
  1. 4
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/ChatGptController.java
  2. 2
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/IImContentService.java
  3. 15
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java

4
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/ChatGptController.java

@ -46,10 +46,10 @@ public class ChatGptController {
@Inner(false) @Inner(false)
@PostMapping("/chat/completions") @PostMapping("/chat/completions")
public R chatCompletions(@Valid @RequestBody ImContent imContent) { public R chatCompletions(@Valid @RequestBody ImContent imContent, @RequestParam boolean contextEnable) {
SecurityUtils.openInterfaceTemporaryLoginSession(imContent.getSendUserId()); SecurityUtils.openInterfaceTemporaryLoginSession(imContent.getSendUserId());
iImContentService.rateLimitRequestHandler(); iImContentService.rateLimitRequestHandler();
return R.ok(iImContentService.chatCompletions(imContent)); return R.ok(iImContentService.chatCompletions(imContent, contextEnable));
} }

2
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/IImContentService.java

@ -31,7 +31,7 @@ public interface IImContentService extends IService<ImContent> {
* @param * @param
* @return * @return
*/ */
ImContent chatCompletions(ImContent imContent); ImContent chatCompletions(ImContent imContent, boolean contextEnable);
/** /**
* 语音转文字 * 语音转文字

15
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java

@ -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()) {

Loading…
Cancel
Save