houzhongjian
9 天以前 6de20911a9cdb064e60030237747c0794d429656
iailab-module-ai/iailab-module-ai-biz/src/main/java/com/iailab/module/ai/service/chat/AiChatMessageServiceImpl.java
@@ -9,10 +9,8 @@
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.framework.tenant.core.util.TenantUtils;
import com.iailab.module.ai.controller.admin.chat.vo.message.AiChatMessagePageReqVO;
import com.iailab.module.ai.controller.admin.chat.vo.message.AiChatMessageRespVO;
import com.iailab.module.ai.controller.admin.chat.vo.message.AiChatMessageSendReqVO;
import com.iailab.module.ai.controller.admin.chat.vo.message.AiChatMessageSendRespVO;
import com.iailab.module.ai.controller.admin.chat.vo.message.*;
import com.iailab.module.ai.controller.admin.schedulesuggest.vo.ScheduleSuggestSaveReqVO;
import com.iailab.module.ai.dal.dataobject.chat.AiChatConversationDO;
import com.iailab.module.ai.dal.dataobject.chat.AiChatMessageDO;
import com.iailab.module.ai.dal.dataobject.knowledge.AiKnowledgeDocumentDO;
@@ -28,8 +26,10 @@
import com.iailab.module.ai.service.model.AiChatRoleService;
import com.iailab.module.ai.service.model.AiModelService;
import com.iailab.module.ai.service.model.AiToolService;
import com.iailab.module.ai.service.schedulesuggest.ScheduleSuggestService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.MessageType;
import org.springframework.ai.chat.messages.SystemMessage;
@@ -45,6 +45,8 @@
import java.time.LocalDateTime;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -86,6 +88,8 @@
    private AiKnowledgeDocumentService knowledgeDocumentService;
    @Resource
    private AiToolService toolService;
    @Resource
    private ScheduleSuggestService scheduleSuggestService;
    @Transactional(rollbackFor = Exception.class)
    public AiChatMessageSendRespVO sendMessage(AiChatMessageSendReqVO sendReqVO, Long userId) {
@@ -129,6 +133,19 @@
                            .getKnowledgeDocument(segment.getDocumentId());
                    segment.setDocumentName(document != null ? document.getName() : null);
                });
        // 3.5 存储大模型推断结论
        if(model.getType().equals(6)) {
            String scheduleSuggest = getScheduleSuggest(newContent);
            if(ObjectUtils.isNotEmpty(scheduleSuggest)) {
                ScheduleSuggestSaveReqVO saveReqVO = new ScheduleSuggestSaveReqVO();
                saveReqVO.setModelId(model.getId())
                        .setConversationId(conversation.getId())
                        .setMessageId(assistantMessage.getId())
                        .setCreateTime(assistantMessage.getCreateTime())
                        .setContent(scheduleSuggest);
                scheduleSuggestService.createScheduleSuggest(saveReqVO);
            }
        }
        return new AiChatMessageSendRespVO()
                .setSend(BeanUtils.toBean(userMessage, AiChatMessageSendRespVO.Message.class))
                .setReceive(BeanUtils.toBean(assistantMessage, AiChatMessageSendRespVO.Message.class)
@@ -314,6 +331,11 @@
    }
    @Override
    public PageResult<AiChatMessageDO> getChatMessagePageByConversationId(AiChatMessageReqVO reqVO) {
        return chatMessageMapper.selectPageByConversationId(reqVO);
    }
    @Override
    public List<AiChatMessageDO> getChatMessageListByConversationId(Long conversationId) {
        return chatMessageMapper.selectListByConversationId(conversationId);
    }
@@ -361,4 +383,14 @@
        return chatMessageMapper.selectPage(pageReqVO);
    }
    private String getScheduleSuggest(String content) {
        String spliceText = content.contains("总结:") ? "总结:" : "结论:";
        String regex = "^([\\s\\S]*?)" + spliceText + "([\\s\\S]*)$";
        Pattern pattern = java.util.regex.Pattern.compile(regex);
        Matcher matcher = pattern.matcher(content);
        if (matcher.find()) {
            return matcher.group(2).trim();
        }
        return "";
    }
}