Commit b90357f380c56ead9d8079c86ed0f61edc2ce1df
1 parent
3844bfb4
添加未清选择 改成动态引导语
Showing
8 changed files
with
32 additions
and
27 deletions
src/main/java/com/xly/entity/SceneDto.java
src/main/java/com/xly/entity/ToolMeta.java
| ... | ... | @@ -52,7 +52,6 @@ public class ToolMeta { |
| 52 | 52 | private String sVectorjson; |
| 53 | 53 | private String sVectorfiledAll; |
| 54 | 54 | private String sVectorfiledShow; |
| 55 | - private String sKnowledgeBase; | |
| 56 | 55 | private String sTsMemo; |
| 57 | 56 | private Boolean sQue = false; |
| 58 | 57 | private Boolean bQuo = false; | ... | ... |
src/main/java/com/xly/mapper/SceneMapper.java
| ... | ... | @@ -11,6 +11,6 @@ import java.util.List; |
| 11 | 11 | public interface SceneMapper { |
| 12 | 12 | |
| 13 | 13 | // XML配置方式 |
| 14 | - @Select("SELECT * FROM ai_agent order by iOrder") | |
| 14 | + @Select("SELECT A.*,fun_ai_getsKnowledgeBase(A.sId) AS sKnowledgeBase FROM ai_agent AS A order by iOrder") | |
| 15 | 15 | List<SceneDto> findAll(); |
| 16 | 16 | } |
| 17 | 17 | \ No newline at end of file | ... | ... |
src/main/java/com/xly/mapper/ToolMetaMapper.java
| ... | ... | @@ -13,6 +13,6 @@ import java.util.List; |
| 13 | 13 | public interface ToolMetaMapper { |
| 14 | 14 | |
| 15 | 15 | // XML配置方式 |
| 16 | - @Select("SELECT A.*,fun_ai_getsKnowledgeBase(A.sId) AS sKnowledgeBase FROM ai_tool AS A order by iOrder") | |
| 16 | + @Select("SELECT A.* FROM ai_tool AS A order by iOrder") | |
| 17 | 17 | List<ToolMeta> findAll(); |
| 18 | 18 | } |
| 19 | 19 | \ No newline at end of file | ... | ... |
src/main/java/com/xly/service/QuoService.java
| ... | ... | @@ -2,9 +2,7 @@ package com.xly.service; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.util.ObjectUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | -import cn.hutool.extra.pinyin.PinyinUtil; | |
| 6 | 5 | import cn.hutool.json.JSONUtil; |
| 7 | -import com.alibaba.fastjson2.JSONObject; | |
| 8 | 6 | import com.xly.entity.ParamRule; |
| 9 | 7 | import com.xly.entity.UserSceneSession; |
| 10 | 8 | import lombok.RequiredArgsConstructor; |
| ... | ... | @@ -40,7 +38,9 @@ public class QuoService { |
| 40 | 38 | if(ObjectUtil.isEmpty(args)){ |
| 41 | 39 | args = new HashMap<>(); |
| 42 | 40 | } |
| 43 | - List<ParamRule> dataAll = session.getCurrentTool().getParamRuleListAll(); | |
| 41 | + List<ParamRule> dataAllData = session.getCurrentTool().getParamRuleListAll(); | |
| 42 | + | |
| 43 | + List<ParamRule> dataAll = dataAllData.stream().filter(one->one.getBTipModel()).collect(Collectors.toList()); | |
| 44 | 44 | //获取产品的参数 |
| 45 | 45 | List<ParamRule> dataProduct = dataAll.stream().filter(one-> "产品".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); |
| 46 | 46 | List<ParamRule> dataPart = dataAll.stream().filter(one-> "部件".equals(one.getSGroup()) && !one.getBDynamicParam()).collect(Collectors.toUnmodifiableList()); |
| ... | ... | @@ -48,6 +48,7 @@ public class QuoService { |
| 48 | 48 | List<Map<String,Object>> sAll = new ArrayList<>(); |
| 49 | 49 | List<Map<String,Object>> productList = new ArrayList<>(); |
| 50 | 50 | Map<String, Object> finalArgsOld = args; |
| 51 | + List<ParamRule> finalDataAll = dataAll; | |
| 51 | 52 | dataProduct.forEach(p->{ |
| 52 | 53 | Object sVal = getValue( p,finalArgsOld); |
| 53 | 54 | List<String> addValue = new ArrayList<>(); |
| ... | ... | @@ -67,7 +68,7 @@ public class QuoService { |
| 67 | 68 | product.put("iOrder", p.getIOrder()); |
| 68 | 69 | product.put("sParamConfigValue",p.getSParamConfigValue()==null?StrUtil.EMPTY:p.getSParamConfigValue()); |
| 69 | 70 | //获取动态参数 |
| 70 | - adddynamicData( sValue, dataAll, p, finalArgsOld, sAll, product); | |
| 71 | + adddynamicData( sValue, finalDataAll, p, finalArgsOld, sAll, product); | |
| 71 | 72 | if( !"sDynamicPart".equals(p.getSParamValue()) |
| 72 | 73 | &&!"sDynamicPartDel".equals(p.getSParamValue()) |
| 73 | 74 | ){ | ... | ... |
src/main/java/com/xly/service/XlyErpService.java
| ... | ... | @@ -356,9 +356,10 @@ public class XlyErpService { |
| 356 | 356 | && ObjectUtil.isNotEmpty(session.getCurrentTool().getSStructureMemo())) |
| 357 | 357 | ){ |
| 358 | 358 | String sSystemPrompt =AgentSystemPrompt.sSystemPrompt; |
| 359 | - if(ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentTool())&&session.getCurrentTool().getBQuo()){ | |
| 359 | + if(ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentScene()) | |
| 360 | + && "quotemanage".equals(session.getCurrentScene().getSSceneNo())){ | |
| 360 | 361 | sSystemPrompt =AgentSystemPrompt.sSystemPromptQuo; |
| 361 | - sSystemPrompt = StrUtil.format(sSystemPrompt,session.getCurrentTool().getSKnowledgeBase()); | |
| 362 | + sSystemPrompt = StrUtil.format(sSystemPrompt,session.getCurrentScene().getSKnowledgeBase()); | |
| 362 | 363 | } |
| 363 | 364 | //如果客户输入了确认/生成 切换引导语言 |
| 364 | 365 | if(ObjectUtil.isNotEmpty(session.getSSystemPrompt()) && isConfirmed){ |
| ... | ... | @@ -369,7 +370,7 @@ public class XlyErpService { |
| 369 | 370 | } |
| 370 | 371 | //报价每次定义参数 |
| 371 | 372 | if(!isConfirmed && ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentTool()) && session.getCurrentTool().getBQuo()){ |
| 372 | - sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session,session.getCurrentTool().getSKnowledgeBase()); | |
| 373 | + sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session,session.getCurrentScene().getSKnowledgeBase()); | |
| 373 | 374 | aiAgent = createConfirmeAgent(session); |
| 374 | 375 | } |
| 375 | 376 | Result<String> rs = aiAgent.chat(userId, input,sSystemPrompt); | ... | ... |
src/main/java/com/xly/tool/DynamicToolProvider.java
| ... | ... | @@ -470,24 +470,25 @@ public class DynamicToolProvider implements ToolProvider { |
| 470 | 470 | } |
| 471 | 471 | } |
| 472 | 472 | // 移除不在 addValue 中的动态部件 |
| 473 | - paramRuleDataAllNew = paramRuleDataAllNew.stream() | |
| 474 | - .filter(p -> { | |
| 475 | - // 如果不是动态部件参数,保留 | |
| 476 | - if (!p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) { | |
| 477 | - return true; | |
| 478 | - } | |
| 479 | - // 如果是动态部件参数,检查是否在有效值列表中 | |
| 480 | - return validDynamicPartValues.contains(p.getSDynamicParam()); | |
| 481 | - }) | |
| 482 | - .collect(Collectors.toList()); | |
| 473 | +// paramRuleDataAllNew = paramRuleDataAllNew.stream() | |
| 474 | +// .filter(p -> { | |
| 475 | +// // 如果不是动态部件参数,保留 | |
| 476 | +// if (!p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) { | |
| 477 | +// return true; | |
| 478 | +// } | |
| 479 | +// // 如果是动态部件参数,检查是否在有效值列表中 | |
| 480 | +// return validDynamicPartValues.contains(p.getSDynamicParam()); | |
| 481 | +// }) | |
| 482 | +// .collect(Collectors.toList()); | |
| 483 | 483 | log.info("移除无效动态部件后,列表大小: {}", paramRuleDataAllNew.size()); |
| 484 | - }else{ | |
| 485 | - //移除不是动态部件的 | |
| 486 | - paramRuleDataAllNew = paramRuleDataAllNew.stream() | |
| 487 | - .filter(p -> !p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) | |
| 488 | - .collect(Collectors.toList()); | |
| 489 | - log.info("sValue为空,移除所有动态部件"); | |
| 490 | 484 | } |
| 485 | +// else{ | |
| 486 | +// //移除不是动态部件的 | |
| 487 | +// paramRuleDataAllNew = paramRuleDataAllNew.stream() | |
| 488 | +// .filter(p -> !p.getBDynamicParam() || !"sDynamicPart".equals(p.getSDynamicParamName())) | |
| 489 | +// .collect(Collectors.toList()); | |
| 490 | +// log.info("sValue为空,移除所有动态部件"); | |
| 491 | +// } | |
| 491 | 492 | } |
| 492 | 493 | // 4. 合并所有参数 |
| 493 | 494 | List<ParamRule> dataAll = new ArrayList<>(paramRuleDataAllNew); |
| ... | ... | @@ -1002,7 +1003,7 @@ public class DynamicToolProvider implements ToolProvider { |
| 1002 | 1003 | args.put(sValue,((List<?>) args.get(sValue)).get(0)); |
| 1003 | 1004 | } |
| 1004 | 1005 | } |
| 1005 | - List<Map<String,Object>> dataListNew = dataList.stream().filter(one-> one.get(sValue).equals(args.get(name)) || one.get(sValue).equals(args.get(sValue))).collect(Collectors.toUnmodifiableList()); | |
| 1006 | + List<Map<String,Object>> 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()); | |
| 1006 | 1007 | if("enum".equals(sType) && ObjectUtil.isEmpty(dataListNew)){ |
| 1007 | 1008 | args.remove(name); |
| 1008 | 1009 | args.remove(sValue); | ... | ... |
src/main/resources/application.yml
| ... | ... | @@ -136,6 +136,7 @@ langchain4j: |
| 136 | 136 | # 聊天模型配置(用于一般对话) |
| 137 | 137 | base-url: http://112.82.245.194:41434 |
| 138 | 138 | # chat-model-name: qwen2.5:7b-instruct |
| 139 | +# chat-model-name: qwen3.6-27b-iq2:latest | |
| 139 | 140 | chat-model-name: qwen2.5:14b |
| 140 | 141 | # chat-model-name: qwen3:14b |
| 141 | 142 | # chat-model-name: qwen3.5:9b | ... | ... |