From b90357f380c56ead9d8079c86ed0f61edc2ce1df Mon Sep 17 00:00:00 2001 From: qianbao Date: Mon, 27 Jul 2026 13:55:55 +0800 Subject: [PATCH] 添加未清选择 改成动态引导语 --- src/main/java/com/xly/entity/SceneDto.java | 2 ++ src/main/java/com/xly/entity/ToolMeta.java | 1 - src/main/java/com/xly/mapper/SceneMapper.java | 2 +- src/main/java/com/xly/mapper/ToolMetaMapper.java | 2 +- src/main/java/com/xly/service/QuoService.java | 9 +++++---- src/main/java/com/xly/service/XlyErpService.java | 7 ++++--- src/main/java/com/xly/tool/DynamicToolProvider.java | 35 ++++++++++++++++++----------------- src/main/resources/application.yml | 1 + 8 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/xly/entity/SceneDto.java b/src/main/java/com/xly/entity/SceneDto.java index 1ab057a..eb3958b 100644 --- a/src/main/java/com/xly/entity/SceneDto.java +++ b/src/main/java/com/xly/entity/SceneDto.java @@ -42,6 +42,8 @@ public class SceneDto { private String sSceneContext; + private String sKnowledgeBase; + private String sStatus; diff --git a/src/main/java/com/xly/entity/ToolMeta.java b/src/main/java/com/xly/entity/ToolMeta.java index c19a46c..c123ac5 100644 --- a/src/main/java/com/xly/entity/ToolMeta.java +++ b/src/main/java/com/xly/entity/ToolMeta.java @@ -52,7 +52,6 @@ public class ToolMeta { private String sVectorjson; private String sVectorfiledAll; private String sVectorfiledShow; - private String sKnowledgeBase; private String sTsMemo; private Boolean sQue = false; private Boolean bQuo = false; diff --git a/src/main/java/com/xly/mapper/SceneMapper.java b/src/main/java/com/xly/mapper/SceneMapper.java index 220527f..ac5c9bd 100644 --- a/src/main/java/com/xly/mapper/SceneMapper.java +++ b/src/main/java/com/xly/mapper/SceneMapper.java @@ -11,6 +11,6 @@ import java.util.List; public interface SceneMapper { // XML配置方式 - @Select("SELECT * FROM ai_agent order by iOrder") + @Select("SELECT A.*,fun_ai_getsKnowledgeBase(A.sId) AS sKnowledgeBase FROM ai_agent AS A order by iOrder") List findAll(); } \ No newline at end of file diff --git a/src/main/java/com/xly/mapper/ToolMetaMapper.java b/src/main/java/com/xly/mapper/ToolMetaMapper.java index 0d569e2..9bebb69 100644 --- a/src/main/java/com/xly/mapper/ToolMetaMapper.java +++ b/src/main/java/com/xly/mapper/ToolMetaMapper.java @@ -13,6 +13,6 @@ import java.util.List; public interface ToolMetaMapper { // XML配置方式 - @Select("SELECT A.*,fun_ai_getsKnowledgeBase(A.sId) AS sKnowledgeBase FROM ai_tool AS A order by iOrder") + @Select("SELECT A.* FROM ai_tool AS A order by iOrder") List findAll(); } \ No newline at end of file diff --git a/src/main/java/com/xly/service/QuoService.java b/src/main/java/com/xly/service/QuoService.java index 385e1e7..e013e97 100644 --- a/src/main/java/com/xly/service/QuoService.java +++ b/src/main/java/com/xly/service/QuoService.java @@ -2,9 +2,7 @@ package com.xly.service; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.pinyin.PinyinUtil; import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson2.JSONObject; import com.xly.entity.ParamRule; import com.xly.entity.UserSceneSession; import lombok.RequiredArgsConstructor; @@ -40,7 +38,9 @@ public class QuoService { if(ObjectUtil.isEmpty(args)){ args = new HashMap<>(); } - List dataAll = session.getCurrentTool().getParamRuleListAll(); + List dataAllData = session.getCurrentTool().getParamRuleListAll(); + + List dataAll = dataAllData.stream().filter(one->one.getBTipModel()).collect(Collectors.toList()); //获取产品的参数 List dataProduct = dataAll.stream().filter(one-> "产品".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); List dataPart = dataAll.stream().filter(one-> "部件".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); @@ -48,6 +48,7 @@ public class QuoService { List> sAll = new ArrayList<>(); List> productList = new ArrayList<>(); Map finalArgsOld = args; + List finalDataAll = dataAll; dataProduct.forEach(p->{ Object sVal = getValue( p,finalArgsOld); List addValue = new ArrayList<>(); @@ -67,7 +68,7 @@ public class QuoService { product.put("iOrder", p.getIOrder()); product.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue()); //获取动态参数 - adddynamicData( sValue, dataAll, p, finalArgsOld, sAll, product); + adddynamicData( sValue, finalDataAll, p, finalArgsOld, sAll, product); if( !"sDynamicPart".equals(p.getSParamValue()) &&!"sDynamicPartDel".equals(p.getSParamValue()) ){ diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java index a248b5e..49161a2 100644 --- a/src/main/java/com/xly/service/XlyErpService.java +++ b/src/main/java/com/xly/service/XlyErpService.java @@ -356,9 +356,10 @@ public class XlyErpService { && ObjectUtil.isNotEmpty(session.getCurrentTool().getSStructureMemo())) ){ String sSystemPrompt =AgentSystemPrompt.sSystemPrompt; - if(ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentTool())&&session.getCurrentTool().getBQuo()){ + if(ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentScene()) + && "quotemanage".equals(session.getCurrentScene().getSSceneNo())){ sSystemPrompt =AgentSystemPrompt.sSystemPromptQuo; - sSystemPrompt = StrUtil.format(sSystemPrompt,session.getCurrentTool().getSKnowledgeBase()); + sSystemPrompt = StrUtil.format(sSystemPrompt,session.getCurrentScene().getSKnowledgeBase()); } //如果客户输入了确认/生成 切换引导语言 if(ObjectUtil.isNotEmpty(session.getSSystemPrompt()) && isConfirmed){ @@ -369,7 +370,7 @@ public class XlyErpService { } //报价每次定义参数 if(!isConfirmed && ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentTool()) && session.getCurrentTool().getBQuo()){ - sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session,session.getCurrentTool().getSKnowledgeBase()); + sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session,session.getCurrentScene().getSKnowledgeBase()); aiAgent = createConfirmeAgent(session); } Result rs = aiAgent.chat(userId, input,sSystemPrompt); diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java index 8b4de21..5742f5a 100644 --- a/src/main/java/com/xly/tool/DynamicToolProvider.java +++ b/src/main/java/com/xly/tool/DynamicToolProvider.java @@ -470,24 +470,25 @@ public class DynamicToolProvider implements ToolProvider { } } // 移除不在 addValue 中的动态部件 - paramRuleDataAllNew = paramRuleDataAllNew.stream() - .filter(p -> { - // 如果不是动态部件参数,保留 - if (!p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) { - return true; - } - // 如果是动态部件参数,检查是否在有效值列表中 - return validDynamicPartValues.contains(p.getSDynamicParam()); - }) - .collect(Collectors.toList()); +// paramRuleDataAllNew = paramRuleDataAllNew.stream() +// .filter(p -> { +// // 如果不是动态部件参数,保留 +// if (!p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) { +// return true; +// } +// // 如果是动态部件参数,检查是否在有效值列表中 +// return validDynamicPartValues.contains(p.getSDynamicParam()); +// }) +// .collect(Collectors.toList()); log.info("移除无效动态部件后,列表大小: {}", paramRuleDataAllNew.size()); - }else{ - //移除不是动态部件的 - paramRuleDataAllNew = paramRuleDataAllNew.stream() - .filter(p -> !p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) - .collect(Collectors.toList()); - log.info("sValue为空,移除所有动态部件"); } +// else{ +// //移除不是动态部件的 +// paramRuleDataAllNew = paramRuleDataAllNew.stream() +// .filter(p -> !p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) +// .collect(Collectors.toList()); +// log.info("sValue为空,移除所有动态部件"); +// } } // 4. 合并所有参数 List dataAll = new ArrayList<>(paramRuleDataAllNew); @@ -1002,7 +1003,7 @@ public class DynamicToolProvider implements ToolProvider { args.put(sValue,((List) args.get(sValue)).get(0)); } } - List> dataListNew = dataList.stream().filter(one-> one.get(sValue).equals(args.get(name)) || one.get(sValue).equals(args.get(sValue))).collect(Collectors.toUnmodifiableList()); + List> dataListNew = dataList.stream().filter(one-> ObjectUtil.isNotEmpty(one.get(sValue)) &&(one.get(sValue).equals(args.get(name)) || one.get(sValue).equals(args.get(sValue)))).collect(Collectors.toUnmodifiableList()); if("enum".equals(sType) && ObjectUtil.isEmpty(dataListNew)){ args.remove(name); args.remove(sValue); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 30164db..88a8d26 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -136,6 +136,7 @@ langchain4j: # 聊天模型配置(用于一般对话) base-url: http://112.82.245.194:41434 # chat-model-name: qwen2.5:7b-instruct +# chat-model-name: qwen3.6-27b-iq2:latest chat-model-name: qwen2.5:14b # chat-model-name: qwen3:14b # chat-model-name: qwen3.5:9b -- libgit2 0.22.2