Commit 0c696213612b9d9d8d20480501eb8f397cad2fd1

Authored by qianbao
1 parent 0ed098ff

添加未清选择 改成动态引导语

src/main/java/com/xly/service/XlyErpService.java
... ... @@ -953,11 +953,11 @@ public class XlyErpService {
953 953 .build();
954 954 UserSceneSessionService.ERP_AGENT_CACHE.put(userId, aiAgent);
955 955 // 初始化AiService 以防止热加载太慢 找不到相应的方法
956   - try{
957   - aiAgent.chat(userId, "initAiService",AgentSystemPrompt.sSystemPrompt);
958   - }catch (Exception e){
959   - e.printStackTrace();
960   - }
  956 +// try{
  957 +// aiAgent.chat(userId, "initAiService",AgentSystemPrompt.sSystemPrompt);
  958 +// }catch (Exception e){
  959 +// e.printStackTrace();
  960 +// }
961 961 log.info("用户{}Agent构建完成,已选场景:{},场景ID{}", userId, session.isSceneSelected() ? session.getCurrentScene().getSSceneName() : "未选(全场景匹配)", dynamicToolProvider.sSceneIdMap.get(userId));
962 962 }
963 963 return aiAgent;
... ...
src/main/java/com/xly/tool/DynamicToolProvider.java
... ... @@ -258,14 +258,14 @@ public class DynamicToolProvider implements ToolProvider {
258 258 StringBuffer xt = new StringBuffer();
259 259  
260 260 // 强制指令【完全保留】
261   - String forceToolPrompt = """
262   - 【重要·强制指令】
263   - 1. 这是当前唯一可用工具,必须调用,禁止直接回答
264   - 2. 用户输入包含:确认、全部确认、合并确认、行号(第1行/第一行等)
265   - 3. 必须调用本工具,只调用一次!
266   - """;
  261 + String forceToolPrompt = StrUtil.EMPTY;
  262 +// """
  263 +// 【重要·强制指令】
  264 +// 1. 这是当前唯一可用工具,必须调用,禁止直接回答
  265 +// 2. 用户输入包含:确认、全部确认、合并确认、行号(第1行/第一行等)
  266 +// 3. 必须调用本工具,只调用一次!
  267 +// """;
267 268 stoolDesc.append(forceToolPrompt);
268   -
269 269 if (ObjectUtil.isNotEmpty(meta.getStoolDesc())) {
270 270 stoolDesc.append("MethodNo:").append(meta.getSMethodNo())
271 271 .append(",当用户").append(meta.getSMethodName())
... ... @@ -275,22 +275,16 @@ public class DynamicToolProvider implements ToolProvider {
275 275  
276 276 JsonObjectSchema.Builder schemaBuilder = JsonObjectSchema.builder();
277 277 List<String> requiredParams = new ArrayList<>();
278   -
279 278 try {
280 279 List<ParamRule> paramRuleData = meta.getParamRuleList();
281   -
282 280 for (ParamRule paramRule : paramRuleData) {
283 281 String paramDesc = paramRule.getSParam();
284 282 String paramType = paramRule.getSType();
285 283 Boolean bEmpty = paramRule.getBEmpty();
286   -
287 284 if (paramDesc == null || paramDesc.isEmpty()) {
288 285 continue;
289 286 }
290   -
291   - String sRuleCost = getConstMeg(paramRule.getSParamConfig(), paramRule);
292   -
293   - // ===================== 修复后:安全不报错 =====================
  287 + String sRuleCost = getConstMeg(paramRule);
294 288 switch (paramType.toLowerCase()) {
295 289 case "string":
296 290 if (bEmpty) sbt.append(paramDesc).append("(字符串)、");
... ... @@ -321,24 +315,47 @@ public class DynamicToolProvider implements ToolProvider {
321 315 break;
322 316  
323 317 case "array":
324   - schemaBuilder.addStringProperty(paramDesc, paramDesc);
  318 + // 印后工艺:从SQL获取可选工艺列表
  319 + String postProcessArray = getArrrayBySql(paramRule);
  320 + List<String> postProcessEnums = new ArrayList<>();
  321 + if (StrUtil.isNotBlank(postProcessArray)) {
  322 + postProcessEnums = Arrays.asList(postProcessArray.split("/"));
  323 + }
  324 + StringBuffer paramDescTs = new StringBuffer();
  325 + paramDescTs.append(paramDesc).append("(数组类型,可多选印后工艺 [").append(postProcessArray).append("]");
  326 + // 处理默认值
  327 + if (ObjectUtil.isNotEmpty(paramRule.getSDefaultValue()) ||
  328 + (ObjectUtil.isNotEmpty(postProcessArray) && postProcessArray.split("/").length == 1)) {
  329 + String defaultVal = (ObjectUtil.isNotEmpty(postProcessArray) && postProcessArray.split("/").length == 1)
  330 + ? postProcessArray
  331 + : paramRule.getSDefaultValue();
  332 + paramDescTs.append(",默认值[").append(defaultVal).append("]");
  333 + } else {
  334 + paramDescTs.append(",无默认值");
  335 + }
  336 + paramDescTs.append(")、");
  337 + // 有枚举值走枚举,没有走普通字符串
  338 + if (postProcessEnums.isEmpty()) {
  339 + sbt.append(paramDescTs);
  340 + schemaBuilder.addStringProperty(paramDesc, paramDescTs.toString());
  341 + } else {
  342 + xt.append(paramDescTs);
  343 + schemaBuilder.addEnumProperty(paramDesc, postProcessEnums, paramDescTs.toString());
  344 + }
325 345 break;
326 346  
327 347 case "enum":
328   - List<String> enums = new ArrayList<>();
  348 + // 印后工艺单选枚举
  349 + List<String> postProcessList = new ArrayList<>();
329 350 if (StrUtil.isNotBlank(sRuleCost)) {
330   - enums = Arrays.asList(sRuleCost.split("/"));
  351 + postProcessList = Arrays.asList(sRuleCost.split("/"));
331 352 }
332   -
333   - // ===================== 核心修复 =====================
334   - if (enums.isEmpty()) {
335   - // 空枚举 → 自动转字符串,绝对不报错
336   - schemaBuilder.addStringProperty(paramDesc, paramDesc);
  353 + if (postProcessList.isEmpty()) {
  354 + schemaBuilder.addStringProperty(paramDesc, sRuleCost);
337 355 } else {
338   - schemaBuilder.addEnumProperty(paramDesc, enums, paramDesc);
  356 + schemaBuilder.addEnumProperty(paramDesc, postProcessList, sRuleCost);
339 357 }
340 358 break;
341   -
342 359 default:
343 360 schemaBuilder.addStringProperty(paramDesc, paramDesc);
344 361 break;
... ... @@ -349,12 +366,12 @@ public class DynamicToolProvider implements ToolProvider {
349 366 }
350 367 }
351 368  
352   - if (ObjectUtil.isNotEmpty(sbt)) {
353   - stoolDesc.append(System.lineSeparator()).append("1.必填参数:").append(sbt);
354   - }
355   - if (ObjectUtil.isNotEmpty(xt)) {
356   - stoolDesc.append(System.lineSeparator()).append("2.选填参数:").append(xt);
357   - }
  369 +// if (ObjectUtil.isNotEmpty(sbt)) {
  370 +// stoolDesc.append(System.lineSeparator()).append("1.必填参数:").append(sbt);
  371 +// }
  372 +// if (ObjectUtil.isNotEmpty(xt)) {
  373 +// stoolDesc.append(System.lineSeparator()).append("2.选填参数:").append(xt);
  374 +// }
358 375  
359 376 } catch (Exception e) {
360 377 e.printStackTrace();
... ... @@ -382,10 +399,11 @@ public class DynamicToolProvider implements ToolProvider {
382 399 * @return java.lang.String
383 400 * @Description 常量类型枚举
384 401 **/
385   - private String getConstMeg(String sConstConfig,ParamRule paramRule){
  402 + private String getConstMeg(ParamRule paramRule){
386 403 if(!RuleCode.CONST.getCode().equals(paramRule.getSRule())){
387 404 return StrUtil.EMPTY;
388 405 }
  406 + String sConstConfig = paramRule.getSParamConfig();
389 407 if(StrUtil.isNotEmpty(sConstConfig)){
390 408 Map<String,Object> constMap = JSONUtil.parseObj(sConstConfig);
391 409 StringBuffer sb = new StringBuffer();
... ... @@ -399,7 +417,6 @@ public class DynamicToolProvider implements ToolProvider {
399 417  
400 418 return StrUtil.EMPTY;
401 419 }
402   -
403 420 //数组类型枚举
404 421 private String getArrrayBySql(ParamRule paramRule){
405 422 Boolean bCheckArray = !(RuleCode.SQL.getCode().equals(paramRule.getSRule()));
... ...
src/main/resources/application.yml
... ... @@ -135,8 +135,8 @@ langchain4j:
135 135 ollama:
136 136 # 聊天模型配置(用于一般对话)
137 137 base-url: http://112.82.245.194:11434
138   - chat-model-name: qwen2.5:7b-instruct
139   -# chat-model-name: qwen3:14b
  138 +# chat-model-name: qwen2.5:7b-instruct
  139 + chat-model-name: qwen3:14b
140 140 # chat-model-name: qwen3.5:9b
141 141 # SQL/代码模型配置(专门用于代码和SQL生成)
142 142 sql-model-name: qwen2.5-coder:7b
... ...