Administrator
2025-10-30 c7cee264bccb5026fd42a9f0dc83d274aaee40cf
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java
@@ -10,10 +10,8 @@
import cc.mrbird.febs.ai.req.memberTalkStream.*;
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkListDto;
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkMemberAnswerSavaVo;
import cc.mrbird.febs.ai.res.memberTalk.ApiTalkReportListVo;
import cc.mrbird.febs.ai.res.memberTalkStream.ApiMemberTalkReloadStreamVo;
import cc.mrbird.febs.ai.res.memberTalkStream.ApiMemberTalkStreamVo;
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkListVo;
import cc.mrbird.febs.ai.service.*;
import cc.mrbird.febs.ai.strategy.LlmStrategyFactory;
import cc.mrbird.febs.ai.strategy.enumerates.LlmApplicationAppIdEnum;
@@ -110,6 +108,52 @@
    }
    @Override
    public Flux<FebsResponse> startV2(ApiMemberTalkStreamV2Dto 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.getModelId();
        List<LlmStrategyDto> llmStrategyDtoList = new ArrayList<>();
        LlmStrategyDto llmStrategyDto = this.buildLlmStrategyDtoList(promptHead, 1);
        llmStrategyDtoList.add(llmStrategyDto);
        llmStrategyDto = this.buildLlmStrategyDtoList("请按照上下文内容,进行对话的延续,例如提出一个相关的问题或者对内容进行一个延续", 2);
        llmStrategyDtoList.add(llmStrategyDto);
        AiCompanyWorkflow aiCompanyWorkflow = aiCompanyWorkflowService.getByTypeAndCompanyId(LlmApplicationAppIdEnum.CONTEXT_TALK.getCode(),aiMemberTalk.getCompanyId());
        if (ObjectUtil.isNull(aiCompanyWorkflow)){
            throw new FebsException("工作流配置异常,请联系管理员");
        }
        llmStrategyDto = this.buildLlmStrategyDtoList(aiCompanyWorkflow.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);
    }
    @Override
    public FebsResponse talkList(ApiMemberTalkListDto dto) {
        return new FebsResponse().success().data(aiMemberTalkService.getPageByDto(dto));