From 438b5375d320af6d18f3f34cb26b803200e1ca81 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Tue, 23 Sep 2025 14:51:32 +0800 Subject: [PATCH] feat(ai): 新增公司工作流配置查询功能 --- src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java | 89 +++++++++++++++++++++++++++++++------------- 1 files changed, 63 insertions(+), 26 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java index 001f00a..e355029 100644 --- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java @@ -11,6 +11,7 @@ import cc.mrbird.febs.ai.res.memberTalkStream.ApiMemberTalkStreamVo; import cc.mrbird.febs.ai.service.*; import cc.mrbird.febs.ai.strategy.LlmStrategyFactory; +import cc.mrbird.febs.ai.strategy.enumerates.LlmApplicationAppIdEnum; import cc.mrbird.febs.ai.strategy.enumerates.LlmStrategyEnum; import cc.mrbird.febs.ai.strategy.param.LlmStrategyDto; import cc.mrbird.febs.common.entity.FebsResponse; @@ -30,10 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import reactor.core.publisher.Flux; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; /** * AI用户对话训练记录 Service实现类 @@ -55,6 +53,7 @@ private final AiProductQuestionService aiProductQuestionService; private final LlmStrategyFactory llmStrategyFactory; private final AiService aiService; + private final AiCompanyWorkflowService aiCompanyWorkflowService; @Override @@ -254,24 +253,24 @@ llmStrategyDtoList.add(llmStrategyDto); llmStrategyDto = this.buildLlmStrategyDtoList(answer, 2); llmStrategyDtoList.add(llmStrategyDto); - llmStrategyDto = this.buildLlmStrategyDtoList(String.valueOf(type), 4); + + AiCompanyWorkflow aiCompanyWorkflow = aiCompanyWorkflowService.getByTypeAndCompanyId(type,aiMemberTalk.getCompanyId()); + if (ObjectUtil.isNull(aiCompanyWorkflow)){ + throw new FebsException("工作流配置异常,请联系管理员"); + } + llmStrategyDto = this.buildLlmStrategyDtoList(aiCompanyWorkflow.getCode(), 4); llmStrategyDtoList.add(llmStrategyDto); - LlmStrategyDto llmStrategyDtoMessage = buildMessages(state, memberTalkId); - llmStrategyDtoList.add(llmStrategyDtoMessage); String modelName = LlmStrategyEnum.getName(aiService.getSystemSetAiType()); - return llmStrategyFactory.getCalculationStrategyMap().get(modelName).llmInvokeStreamingNoThink(llmStrategyDtoList); } - private LlmStrategyDto buildMessages(Integer state, String memberTalkId) { + private LlmStrategyDto buildMessages(String memberTalkId) { LlmStrategyDto message = new LlmStrategyDto(); - if (1!= state){ - return message; - } LambdaQueryWrapper<AiMemberTalkItem> memberTalkItemQuery = Wrappers.lambdaQuery(AiMemberTalkItem.class); memberTalkItemQuery.eq(AiMemberTalkItem::getMemberTalkId,memberTalkId); + memberTalkItemQuery.in(AiMemberTalkItem::getType,Arrays.asList(1, 2)); memberTalkItemQuery.orderByAsc(AiMemberTalkItem::getCreatedTime); List<AiMemberTalkItem> aiMemberTalkItems = aiMemberTalkItemService.getListByQuery(memberTalkItemQuery); if (CollUtil.isEmpty(aiMemberTalkItems)){ @@ -287,14 +286,12 @@ if (aiMemberTalkItem.getType() == 2){ llmStrategyDto.setRole(Role.USER.getValue()); } - if (aiMemberTalkItem.getType() == 3){ - llmStrategyDto.setRole(Role.ASSISTANT.getValue()); - } llmStrategyDto.setContent(aiMemberTalkItem.getContext()); messages.add(llmStrategyDto); } message.setRole(AiTypeEnum.MESSAGES.getName()); + message.setContent(AiTypeEnum.MESSAGES.getName()); message.setMessages(messages); return message; @@ -397,25 +394,65 @@ this.updateMemberTalkUpdateTime(AiTypeEnum.AI_MEMBER_TALK_STATE_DONE.getCode(), aiMemberTalk.getDoneCnt(),aiMemberTalk.getId(), new Date()); - Integer type = dto.getType(); - String contentByCode = AiTalkOutputEnum.HIGH_LIGHT.getCodeByType(type); - String analysis = aiMemberTalk.getAnalysis(); - HashMap<String, String> stringStringHashMap = new HashMap<>(); - if(StrUtil.isEmpty(analysis)){ - stringStringHashMap.put(contentByCode,content); - }else{ - stringStringHashMap = JSONUtil.toBean(analysis, HashMap.class); - stringStringHashMap.put(contentByCode,content); - } +// Integer type = dto.getType(); +// String contentByCode = AiTalkOutputEnum.HIGH_LIGHT.getCodeByType(type); +// String analysis = aiMemberTalk.getAnalysis(); +// HashMap<String, String> stringStringHashMap = new HashMap<>(); +// if(StrUtil.isEmpty(analysis)){ +// stringStringHashMap.put(contentByCode,content); +// }else{ +// stringStringHashMap = JSONUtil.toBean(analysis, HashMap.class); +// stringStringHashMap.put(contentByCode,content); +// } aiMemberTalkMapper.update( null, Wrappers.lambdaUpdate(AiMemberTalk.class) - .set(AiMemberTalk::getAnalysis,JSONUtil.toJsonStr(stringStringHashMap)) + .set(AiMemberTalk::getAnalysis,content) .eq(AiMemberTalk::getId,aiMemberTalk.getId()) ); return new FebsResponse().success(); } + @Override + public Flux<FebsResponse> answerV3(AiTalkAnswerStreamDto dto) { + String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); + String memberTalkId = dto.getId(); + AiMemberTalk aiMemberTalk = this.getById(memberTalkId); + if (ObjectUtil.isNull(aiMemberTalk)){ + throw new FebsException("对话不存在"); + } + + LambdaQueryWrapper<AiProductRoleLink> productLinkQuery = Wrappers.lambdaQuery(AiProductRoleLink.class); + productLinkQuery.eq(AiProductRoleLink::getProductId,aiMemberTalk.getProductId()); + productLinkQuery.last("limit 1"); + AiProductRoleLink aiProductRoleLink = aiProductRoleLinkService.getByQuery(productLinkQuery); + if(ObjectUtil.isNull(aiProductRoleLink)){ + throw new FebsException("产品没有关联AI陪练"); + } + + String productRoleId = aiProductRoleLink.getProductRoleId(); + AiProductRole aiProductRole = aiProductRoleService.getById(productRoleId); + if (ObjectUtil.isNull(aiProductRole)){ + throw new FebsException("产品AI陪练不存在"); + } + + String promptHead = aiProductRole.getPromptHead(); + + List<LlmStrategyDto> llmStrategyDtoList = new ArrayList<>(); + LlmStrategyDto llmStrategyDto = this.buildLlmStrategyDtoList(promptHead, 1); + llmStrategyDtoList.add(llmStrategyDto); + llmStrategyDto = this.buildLlmStrategyDtoList("请按照要求生成报告", 2); + llmStrategyDtoList.add(llmStrategyDto); + llmStrategyDto = this.buildLlmStrategyDtoList(String.valueOf(LlmApplicationAppIdEnum.REPORT.getCode()), 4); + llmStrategyDtoList.add(llmStrategyDto); + + LlmStrategyDto llmStrategyDtoMessage = buildMessages(memberTalkId); + llmStrategyDtoList.add(llmStrategyDtoMessage); + String modelName = LlmStrategyEnum.getName(aiService.getSystemSetAiType()); + + return llmStrategyFactory.getCalculationStrategyMap().get(modelName).llmInvokeStreamingNoThink(llmStrategyDtoList); + } + } -- Gitblit v1.9.1