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