From 841f1631b790d2c4caf24a40eb4830f57a9bafa5 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Wed, 17 Sep 2025 17:21:07 +0800 Subject: [PATCH] feat(ai): 添加知识点推荐功能- 新增 AiProductPointService接口的 recommend 方法 - 实现 AiProductPointServiceImpl 中的 recommend 方法逻辑 - 添加 ApiProductPointController 中的 recommend 接口 - 创建 ApiProductPointRecommendDto 和 ApiProductPointRecommendVo 类 --- src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java index 73aa812..5e5d556 100644 --- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java @@ -9,11 +9,14 @@ import cc.mrbird.febs.ai.res.ai.AiResponse; import cc.mrbird.febs.ai.res.ai.RadarDataItem; import cc.mrbird.febs.ai.res.ai.Report; -import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVo; +import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVoOld; import cc.mrbird.febs.ai.service.AiProductRoleService; import cc.mrbird.febs.ai.service.AiService; import cc.mrbird.febs.ai.service.AiTalkItemService; +import cc.mrbird.febs.ai.strategy.enumerates.LlmStrategyContextEnum; import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.mall.entity.DataDictionaryCustom; +import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; @@ -74,6 +77,7 @@ private final AiProductRoleService aiProductRoleService; private final ObjectMapper objectMapper; private final AiTalkItemService aiTalkItemService; + private final DataDictionaryCustomMapper dataDictionaryCustomMapper; @Value("${ai.service.ak}") private String ak; @@ -109,6 +113,32 @@ if (service != null) { service.shutdownExecutor(); } + } + + @Override + public Integer getSystemSetAiType() { + Integer type = 2; + DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + LlmStrategyContextEnum.LLM_STRATEGY.getCode(), + LlmStrategyContextEnum.LLM_STRATEGY.getCode() + ); + if (dataDictionaryCustom != null) { + type = Integer.parseInt(dataDictionaryCustom.getValue()); + } + return type; + } + + @Override + public String getSystemSetLTAiPrompt() { + String prompt = "请将问题转换为中文,并给出一个最详细的答案。"; + DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + LlmStrategyContextEnum.LLM_LING_TONG_PROMPT.getCode(), + LlmStrategyContextEnum.LLM_LING_TONG_PROMPT.getCode() + ); + if (dataDictionaryCustom != null) { + prompt = dataDictionaryCustom.getValue(); + } + return prompt; } @Override @@ -403,18 +433,18 @@ } - ApiMemberTalkStreamVo apiMemberTalkStreamVo = new ApiMemberTalkStreamVo(); + ApiMemberTalkStreamVoOld apiMemberTalkStreamVoOld = new ApiMemberTalkStreamVoOld(); // 判断是否触发深度思考,触发则打印模型输出的思维链内容 ChatMessage message = choice.getMessage(); if (message.getReasoningContent()!= null &&!message.getReasoningContent().isEmpty()) { - apiMemberTalkStreamVo.setReasoningContent(message.getReasoningContent()); + apiMemberTalkStreamVoOld.setReasoningContent(message.getReasoningContent()); // System.out.print(message.getReasoningContent()); } String content = message.getContent() == null ? "" : message.getContent().toString(); - apiMemberTalkStreamVo.setContent(content); + apiMemberTalkStreamVoOld.setContent(content); System.out.print(content); - return new FebsResponse().success().data(apiMemberTalkStreamVo); + return new FebsResponse().success().data(apiMemberTalkStreamVoOld); }) .onErrorResume(throwable -> { log.error("流式调用AI服务失败,问题输入: {}", question, throwable); @@ -437,7 +467,7 @@ final ChatMessage systemMessage = ChatMessage.builder() .role(ChatMessageRole.SYSTEM) - .content("你是豆包,是由字节跳动开发的 AI 人工智能助手") + .content("你是豆包,是由字节跳动开发的 AI 人工智能助手,请使用中文回复") .build(); messages.add(systemMessage); @@ -483,12 +513,12 @@ } ChatMessage message = choice.getMessage(); - ApiMemberTalkStreamVo apiMemberTalkStreamVo = new ApiMemberTalkStreamVo(); + ApiMemberTalkStreamVoOld apiMemberTalkStreamVoOld = new ApiMemberTalkStreamVoOld(); // 处理 reasoning content String reasoningContent = message.getReasoningContent(); if (StrUtil.isNotEmpty(reasoningContent)) { - apiMemberTalkStreamVo.setReasoningContent(reasoningContent); + apiMemberTalkStreamVoOld.setReasoningContent(reasoningContent); log.debug("Reasoning Content: {}", reasoningContent); } @@ -497,11 +527,11 @@ if (message.getContent() != null) { content = message.getContent().toString(); } - apiMemberTalkStreamVo.setContent(content); + apiMemberTalkStreamVoOld.setContent(content); System.out.print(content); log.debug("Content: {}", content); - return new FebsResponse().success().data(apiMemberTalkStreamVo); + return new FebsResponse().success().data(apiMemberTalkStreamVoOld); }) .onErrorResume(throwable -> { log.error("流式调用AI服务失败,问题输入: {}", question, throwable); -- Gitblit v1.9.1