Commit 25c2a140de8db3fbf953fa274baf661fc64328c3

Authored by qianbao
1 parent 695dd49d

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

src/main/java/com/xly/tool/DynamicToolProvider.java
@@ -1075,32 +1075,30 @@ public class DynamicToolProvider implements ToolProvider { @@ -1075,32 +1075,30 @@ public class DynamicToolProvider implements ToolProvider {
1075 */ 1075 */
1076 public String buildMissParamPrompt(UserSceneSession session, List<ParamRule> paramRuleDataMiss) { 1076 public String buildMissParamPrompt(UserSceneSession session, List<ParamRule> paramRuleDataMiss) {
1077 String methodNo = session.getCurrentTool().getSMethodNo(); 1077 String methodNo = session.getCurrentTool().getSMethodNo();
1078 -  
1079 - // 拼接缺失参数的描述 1078 + // 1. 拼接缺失参数的描述(增加“参数名”和“英文名”的对应,方便模型映射)
1080 String paramDesc = paramRuleDataMiss.stream() 1079 String paramDesc = paramRuleDataMiss.stream()
1081 - .map(p -> p.getSParam() + ":" + p.getSParamValue() + ",示例:" + p.getSExampleValue()) 1080 + .map(p -> String.format("- 参数名:%s (对应字段: %s),示例值:%s",
  1081 + p.getSParam(), p.getSParamValue(), p.getSExampleValue()))
1082 .collect(Collectors.joining("\n")); 1082 .collect(Collectors.joining("\n"));
1083 -  
1084 - // 告诉模型需要补充哪些字段  
1085 - String missingKeys = paramRuleDataMiss.stream()  
1086 - .map(p -> "\"" + p.getSParamValue() + "\":\"\"")  
1087 - .collect(Collectors.joining(","));  
1088 - 1083 + // 但根据你的需求,其实 prompt 里并不需要强行插入一个空的 JSON 片段,
  1084 + // 直接告诉模型去“合并”即可。
1089 return String.format(""" 1085 return String.format("""
1090 - 请你根据用户最新的输入补充缺失的参数,并带着所有完整参数立即发起工具调用。 1086 + 请你根据用户最新的输入,补充缺失的参数,并带着【所有完整参数】立即发起工具调用。
1091 1087
1092 - 【执行规则】  
1093 - 1. 必须调用工具:%s,绝对禁止直接输出 JSON 文本或向用户索要信息;  
1094 - 2. 完整调用:请带着合并后的所有参数,直接生成 tool_calls 请求。  
1095 -  
1096 - 缺失参数说明: 1088 + 【核心执行规则】
  1089 + 1. **参数合并(至关重要)**:你必须保留上一轮对话中已经获取的参数(如 sSlaveId, operateType 等),并将用户本次提供的新参数与旧参数合并。
  1090 + 2. **必须调用工具**:必须调用工具 `%s`。绝对禁止直接输出 JSON 文本,也绝对禁止向用户反问或索要信息。
  1091 + 3. **完整调用**:请直接生成包含所有参数的 tool_calls 请求。
  1092 + 【已获取数据】
1097 %s 1093 %s
1098 - """, methodNo, paramDesc, missingKeys); 1094 + 【当前缺失的参数说明】
  1095 + %s
  1096 + """, methodNo,JSONObject.toJSONString(session.getArgs()), paramDesc);
1099 } 1097 }
1100 1098
1101 public String buildDynamicSystemPrompt(UserSceneSession session) { 1099 public String buildDynamicSystemPrompt(UserSceneSession session) {
1102 String methodNo = session.getCurrentTool().getSMethodNo(); 1100 String methodNo = session.getCurrentTool().getSMethodNo();
1103 - String rowJson = JSONUtil.toJsonStr(session.getCurrentRowData()); 1101 + String rowJson = JSONUtil.toJsonPrettyStr(session.getCurrentRowData());
1104 1102
1105 return """ 1103 return """
1106 【极强约束·必须执行】 1104 【极强约束·必须执行】
@@ -1118,8 +1116,16 @@ public class DynamicToolProvider implements ToolProvider { @@ -1118,8 +1116,16 @@ public class DynamicToolProvider implements ToolProvider {
1118 【输出格式】 1116 【输出格式】
1119 {"name": "%s", "parameters": {"operateType": "单行确认", "sSlaveId": "取出的ID"}} 1117 {"name": "%s", "parameters": {"operateType": "单行确认", "sSlaveId": "取出的ID"}}
1120 1118
  1119 + 【输出格式·严格执行】
  1120 + 你必须分两步输出:
  1121 + 1. **思考步骤**:明确写出“用户要求第N行,我在JSON中找到Key为N的数据,其sSlaveId是[完整复制ID]”。
  1122 + 2. **JSON步骤**:换行后输出标准的工具调用JSON。
  1123 +
  1124 + 【输出示例】
  1125 + 思考:用户要求第3行,我在JSON中找到Key为"3"的数据,其sSlaveId是17782251520001103406038478326300。
  1126 + {"name": "queryUnstockedProducts", "parameters": {"operateType": "单行确认", "sSlaveId": "17782251520001103406038478326300"}}
1121 【警告】 1127 【警告】
1122 - 禁止编造!必须从表格中提取! 1128 + 思考步骤中的ID必须与JSON中的ID完全一致!禁止编造!必须从表格中提取!
1123 """.formatted(rowJson, methodNo); 1129 """.formatted(rowJson, methodNo);
1124 } 1130 }
1125 1131