| | |
| | | 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; |
| | |
| | | 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实现类 |
| | |
| | | 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)){ |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | | } |
| | | |
| | | } |