From fe70ca5db711b458714bfbe4a6eda6cf7d8a0421 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Tue, 16 Sep 2025 13:58:46 +0800 Subject: [PATCH] feat(member): 添加会员公司ID并更新相关服务 --- src/main/java/cc/mrbird/febs/ai/service/impl/ApiMemberTalkStreamServiceImpl.java | 91 +++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 83 insertions(+), 8 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/ApiMemberTalkStreamServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/ApiMemberTalkStreamServiceImpl.java index 3b1b327..3c1e6f8 100644 --- a/src/main/java/cc/mrbird/febs/ai/service/impl/ApiMemberTalkStreamServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/ai/service/impl/ApiMemberTalkStreamServiceImpl.java @@ -66,6 +66,8 @@ throw new FebsException("产品AI陪练不存在"); } + String companyId = aiProductRoleLink.getCompanyId(); + Date nowTime = new Date(); LambdaQueryWrapper<AiMemberTalk> query = Wrappers.lambdaQuery(AiMemberTalk.class); query.eq(AiMemberTalk::getMemberId,memberUuid); @@ -73,7 +75,7 @@ query.last("limit 1"); AiMemberTalk aiMemberTalk = aiMemberTalkService.getByQuery(query); if (ObjectUtil.isNull(aiMemberTalk)){ - aiMemberTalk = aiMemberTalkService.add(memberUuid,productId,nowTime); + aiMemberTalk = aiMemberTalkService.add(memberUuid,companyId,productId,nowTime); } ApiMemberTalkStreamVo apiMemberTalkVo = new ApiMemberTalkStreamVo(); @@ -81,7 +83,7 @@ AiProductQuestion question = aiProductQuestionService.createQuestion(productId); if (ObjectUtil.isNotNull(question)){ title = question.getTitle(); - AiMemberTalkItem aiMemberTalkItem = aiMemberTalkItemService.add(memberUuid, aiMemberTalk.getId(), 1, title, nowTime); + AiMemberTalkItem aiMemberTalkItem = aiMemberTalkItemService.add(memberUuid, aiMemberTalk.getId(),companyId, 1, title, nowTime); apiMemberTalkVo.setMemberTalkItemId(aiMemberTalkItem.getId()); aiMemberTalkService.updateTimeUpdate(nowTime,aiMemberTalk.getId()); } @@ -119,6 +121,21 @@ } @Override + public FebsResponse saveMemberAnswer(ApiMemberTalkMemberAnswerSavaDto dto) { + String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); + String memberTalkId = dto.getMemberTalkId(); + String content = dto.getContent(); + + AiMemberTalk aiMemberTalk = this.getById(memberTalkId); + if (ObjectUtil.isNull(aiMemberTalk)){ + throw new FebsException("对话不存在"); + } + String companyId = aiMemberTalk.getCompanyId(); + aiMemberTalkItemService.add(memberUuid,aiMemberTalk.getId(),companyId,2,content,new Date()); + return new FebsResponse().success(); + } + + @Override public Flux<FebsResponse> answer(AiTalkAnswerStreamDto dto) { String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); @@ -151,13 +168,15 @@ memberTalkItemQuery.orderByDesc(AiMemberTalkItem::getCreatedTime); memberTalkItemQuery.last("limit 1"); AiMemberTalkItem aiMemberTalkItem = aiMemberTalkItemService.getByQuery(memberTalkItemQuery); - aiMemberTalkItemService.add(memberUuid,aiMemberTalk.getId(),2,reqContext,new Date()); + String question = aiMemberTalkItem.getContext(); - String prompt = this.buildPrompt(aiProductRole.getPromptHead(), aiProductRole.getPromptTemplate(), type); + String prompt = this.buildPrompt(question,reqContext,aiProductRole.getPromptHead(), aiProductRole.getPromptTemplate(), type); List<LlmStrategyDto> llmStrategyDtoList = new ArrayList<>(); LlmStrategyDto llmStrategyDto = this.buildLlmStrategyDtoList(prompt, 1); + llmStrategyDtoList.add(llmStrategyDto); + llmStrategyDto = this.buildLlmStrategyDtoList(question, 3); llmStrategyDtoList.add(llmStrategyDto); llmStrategyDto = this.buildLlmStrategyDtoList(reqContext, 2); llmStrategyDtoList.add(llmStrategyDto); @@ -166,10 +185,62 @@ return llmStrategyFactory.getCalculationStrategyMap().get(modelName).llmInvokeStreamingNoThink(llmStrategyDtoList); } - private String buildPrompt(String promptHead, String promptTemplate,Integer type){ + @Override + public Flux<FebsResponse> answerV2(AiTalkAnswerStreamDto dto) { + + + String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); + Integer type = dto.getType(); + 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陪练不存在"); + } + LambdaQueryWrapper<AiMemberTalkItem> memberTalkItemQuery = Wrappers.lambdaQuery(AiMemberTalkItem.class); + memberTalkItemQuery.eq(AiMemberTalkItem::getMemberId,memberUuid); + memberTalkItemQuery.eq(AiMemberTalkItem::getMemberTalkId,memberTalkId); + memberTalkItemQuery.eq(AiMemberTalkItem::getType,1); + memberTalkItemQuery.orderByDesc(AiMemberTalkItem::getCreatedTime); + memberTalkItemQuery.last("limit 1"); + AiMemberTalkItem aiMemberTalkItem = aiMemberTalkItemService.getByQuery(memberTalkItemQuery); + + String question = aiMemberTalkItem.getContext(); + String promptHead = aiProductRole.getPromptHead(); + String answer = dto.getReqContext(); + + List<LlmStrategyDto> llmStrategyDtoList = new ArrayList<>(); + LlmStrategyDto llmStrategyDto = this.buildLlmStrategyDtoList(promptHead, 1); + llmStrategyDtoList.add(llmStrategyDto); + llmStrategyDto = this.buildLlmStrategyDtoList(question, 3); + llmStrategyDtoList.add(llmStrategyDto); + llmStrategyDto = this.buildLlmStrategyDtoList(answer, 2); + llmStrategyDtoList.add(llmStrategyDto); + llmStrategyDto = this.buildLlmStrategyDtoList(String.valueOf(type), 4); + llmStrategyDtoList.add(llmStrategyDto); + String modelName = LlmStrategyEnum.getName(aiService.getSystemSetAiType()); + + return llmStrategyFactory.getCalculationStrategyMap().get(modelName).llmInvokeStreamingNoThink(llmStrategyDtoList); + } + + private String buildPrompt(String question,String answer,String promptHead, String promptTemplate,Integer type){ AiPromptJsonReq aiPromptJsonReq = new AiPromptJsonReq(); - aiPromptJsonReq.setTask(promptHead); - aiPromptJsonReq.setRule(promptTemplate); +// aiPromptJsonReq.setQuestion( question); + aiPromptJsonReq.setTask( promptHead); + aiPromptJsonReq.setRule( promptTemplate); String contentByCode = AiTalkOutputEnum.HIGH_LIGHT.getContentByType(type); aiPromptJsonReq.setOutputFormat(contentByCode); @@ -187,6 +258,9 @@ if (type == 3){ llmStrategyDto.setRole(Role.ASSISTANT.getValue()); } + if (type == 4){ + llmStrategyDto.setRole(Role.TOOL.getValue()); + } llmStrategyDto.setContent(Str); return llmStrategyDto; @@ -203,13 +277,14 @@ if (ObjectUtil.isNull(aiMemberTalk)){ throw new FebsException("对话不存在"); } + String companyId = aiMemberTalk.getCompanyId(); Integer type = dto.getType(); String memberTalkItemId; String contentByCode = AiTalkOutputEnum.HIGH_LIGHT.getCodeByType(type); if(StrUtil.isEmpty(dto.getMemberTalkItemId())){ HashMap<String, String> stringStringHashMap = new HashMap<>(); stringStringHashMap.put(contentByCode,content); - AiMemberTalkItem add = aiMemberTalkItemService.add(memberUuid, memberTalkId, 3, JSONUtil.toJsonStr(stringStringHashMap), new Date()); + AiMemberTalkItem add = aiMemberTalkItemService.add(memberUuid, memberTalkId,companyId, 3, JSONUtil.toJsonStr(stringStringHashMap), new Date()); memberTalkItemId = add.getId(); }else{ memberTalkItemId = dto.getMemberTalkItemId(); -- Gitblit v1.9.1