diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java index 1d141b1..979c284 100644 --- a/src/main/java/com/xly/service/XlyErpService.java +++ b/src/main/java/com/xly/service/XlyErpService.java @@ -953,11 +953,11 @@ public class XlyErpService { .build(); UserSceneSessionService.ERP_AGENT_CACHE.put(userId, aiAgent); // 初始化AiService 以防止热加载太慢 找不到相应的方法 - try{ - aiAgent.chat(userId, "initAiService",AgentSystemPrompt.sSystemPrompt); - }catch (Exception e){ - e.printStackTrace(); - } +// try{ +// aiAgent.chat(userId, "initAiService",AgentSystemPrompt.sSystemPrompt); +// }catch (Exception e){ +// e.printStackTrace(); +// } log.info("用户{}Agent构建完成,已选场景:{},场景ID{}", userId, session.isSceneSelected() ? session.getCurrentScene().getSSceneName() : "未选(全场景匹配)", dynamicToolProvider.sSceneIdMap.get(userId)); } return aiAgent; diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java index 1355ac0..07cd092 100644 --- a/src/main/java/com/xly/tool/DynamicToolProvider.java +++ b/src/main/java/com/xly/tool/DynamicToolProvider.java @@ -258,14 +258,14 @@ public class DynamicToolProvider implements ToolProvider { StringBuffer xt = new StringBuffer(); // 强制指令【完全保留】 - String forceToolPrompt = """ - 【重要·强制指令】 - 1. 这是当前唯一可用工具,必须调用,禁止直接回答 - 2. 用户输入包含:确认、全部确认、合并确认、行号(第1行/第一行等) - 3. 必须调用本工具,只调用一次! - """; + String forceToolPrompt = StrUtil.EMPTY; +// """ +// 【重要·强制指令】 +// 1. 这是当前唯一可用工具,必须调用,禁止直接回答 +// 2. 用户输入包含:确认、全部确认、合并确认、行号(第1行/第一行等) +// 3. 必须调用本工具,只调用一次! +// """; stoolDesc.append(forceToolPrompt); - if (ObjectUtil.isNotEmpty(meta.getStoolDesc())) { stoolDesc.append("MethodNo:").append(meta.getSMethodNo()) .append(",当用户").append(meta.getSMethodName()) @@ -275,22 +275,16 @@ public class DynamicToolProvider implements ToolProvider { JsonObjectSchema.Builder schemaBuilder = JsonObjectSchema.builder(); List requiredParams = new ArrayList<>(); - try { List paramRuleData = meta.getParamRuleList(); - for (ParamRule paramRule : paramRuleData) { String paramDesc = paramRule.getSParam(); String paramType = paramRule.getSType(); Boolean bEmpty = paramRule.getBEmpty(); - if (paramDesc == null || paramDesc.isEmpty()) { continue; } - - String sRuleCost = getConstMeg(paramRule.getSParamConfig(), paramRule); - - // ===================== 修复后:安全不报错 ===================== + String sRuleCost = getConstMeg(paramRule); switch (paramType.toLowerCase()) { case "string": if (bEmpty) sbt.append(paramDesc).append("(字符串)、"); @@ -321,24 +315,47 @@ public class DynamicToolProvider implements ToolProvider { break; case "array": - schemaBuilder.addStringProperty(paramDesc, paramDesc); + // 印后工艺:从SQL获取可选工艺列表 + String postProcessArray = getArrrayBySql(paramRule); + List postProcessEnums = new ArrayList<>(); + if (StrUtil.isNotBlank(postProcessArray)) { + postProcessEnums = Arrays.asList(postProcessArray.split("/")); + } + StringBuffer paramDescTs = new StringBuffer(); + paramDescTs.append(paramDesc).append("(数组类型,可多选印后工艺 [").append(postProcessArray).append("]"); + // 处理默认值 + if (ObjectUtil.isNotEmpty(paramRule.getSDefaultValue()) || + (ObjectUtil.isNotEmpty(postProcessArray) && postProcessArray.split("/").length == 1)) { + String defaultVal = (ObjectUtil.isNotEmpty(postProcessArray) && postProcessArray.split("/").length == 1) + ? postProcessArray + : paramRule.getSDefaultValue(); + paramDescTs.append(",默认值[").append(defaultVal).append("]"); + } else { + paramDescTs.append(",无默认值"); + } + paramDescTs.append(")、"); + // 有枚举值走枚举,没有走普通字符串 + if (postProcessEnums.isEmpty()) { + sbt.append(paramDescTs); + schemaBuilder.addStringProperty(paramDesc, paramDescTs.toString()); + } else { + xt.append(paramDescTs); + schemaBuilder.addEnumProperty(paramDesc, postProcessEnums, paramDescTs.toString()); + } break; case "enum": - List enums = new ArrayList<>(); + // 印后工艺单选枚举 + List postProcessList = new ArrayList<>(); if (StrUtil.isNotBlank(sRuleCost)) { - enums = Arrays.asList(sRuleCost.split("/")); + postProcessList = Arrays.asList(sRuleCost.split("/")); } - - // ===================== 核心修复 ===================== - if (enums.isEmpty()) { - // 空枚举 → 自动转字符串,绝对不报错 - schemaBuilder.addStringProperty(paramDesc, paramDesc); + if (postProcessList.isEmpty()) { + schemaBuilder.addStringProperty(paramDesc, sRuleCost); } else { - schemaBuilder.addEnumProperty(paramDesc, enums, paramDesc); + schemaBuilder.addEnumProperty(paramDesc, postProcessList, sRuleCost); } break; - default: schemaBuilder.addStringProperty(paramDesc, paramDesc); break; @@ -349,12 +366,12 @@ public class DynamicToolProvider implements ToolProvider { } } - if (ObjectUtil.isNotEmpty(sbt)) { - stoolDesc.append(System.lineSeparator()).append("1.必填参数:").append(sbt); - } - if (ObjectUtil.isNotEmpty(xt)) { - stoolDesc.append(System.lineSeparator()).append("2.选填参数:").append(xt); - } +// if (ObjectUtil.isNotEmpty(sbt)) { +// stoolDesc.append(System.lineSeparator()).append("1.必填参数:").append(sbt); +// } +// if (ObjectUtil.isNotEmpty(xt)) { +// stoolDesc.append(System.lineSeparator()).append("2.选填参数:").append(xt); +// } } catch (Exception e) { e.printStackTrace(); @@ -382,10 +399,11 @@ public class DynamicToolProvider implements ToolProvider { * @return java.lang.String * @Description 常量类型枚举 **/ - private String getConstMeg(String sConstConfig,ParamRule paramRule){ + private String getConstMeg(ParamRule paramRule){ if(!RuleCode.CONST.getCode().equals(paramRule.getSRule())){ return StrUtil.EMPTY; } + String sConstConfig = paramRule.getSParamConfig(); if(StrUtil.isNotEmpty(sConstConfig)){ Map constMap = JSONUtil.parseObj(sConstConfig); StringBuffer sb = new StringBuffer(); @@ -399,7 +417,6 @@ public class DynamicToolProvider implements ToolProvider { return StrUtil.EMPTY; } - //数组类型枚举 private String getArrrayBySql(ParamRule paramRule){ Boolean bCheckArray = !(RuleCode.SQL.getCode().equals(paramRule.getSRule())); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 78b01f6..1577762 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -135,8 +135,8 @@ langchain4j: ollama: # 聊天模型配置(用于一般对话) base-url: http://112.82.245.194:11434 - chat-model-name: qwen2.5:7b-instruct -# chat-model-name: qwen3:14b +# chat-model-name: qwen2.5:7b-instruct + chat-model-name: qwen3:14b # chat-model-name: qwen3.5:9b # SQL/代码模型配置(专门用于代码和SQL生成) sql-model-name: qwen2.5-coder:7b