From 85069103bd0b1a801924c660daad78aedd0bfb6c Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Thu, 18 Sep 2025 16:52:52 +0800 Subject: [PATCH] ``` feat(AiMemberTalkStreamService): 添加answerV3方法以支持流式生成报告 --- src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java | 81 ++++++++++++++++++++++++++++------------ 1 files changed, 56 insertions(+), 25 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..03f253e 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实现类 @@ -257,21 +255,16 @@ llmStrategyDto = this.buildLlmStrategyDtoList(String.valueOf(type), 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 +280,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 +388,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