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 1075 */
1076 1076 public String buildMissParamPrompt(UserSceneSession session, List<ParamRule> paramRuleDataMiss) {
1077 1077 String methodNo = session.getCurrentTool().getSMethodNo();
1078   -
1079   - // 拼接缺失参数的描述
  1078 + // 1. 拼接缺失参数的描述(增加“参数名”和“英文名”的对应,方便模型映射)
1080 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 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 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 1093 %s
1098   - """, methodNo, paramDesc, missingKeys);
  1094 + 【当前缺失的参数说明】
  1095 + %s
  1096 + """, methodNo,JSONObject.toJSONString(session.getArgs()), paramDesc);
1099 1097 }
1100 1098  
1101 1099 public String buildDynamicSystemPrompt(UserSceneSession session) {
1102 1100 String methodNo = session.getCurrentTool().getSMethodNo();
1103   - String rowJson = JSONUtil.toJsonStr(session.getCurrentRowData());
  1101 + String rowJson = JSONUtil.toJsonPrettyStr(session.getCurrentRowData());
1104 1102  
1105 1103 return """
1106 1104 【极强约束·必须执行】
... ... @@ -1118,8 +1116,16 @@ public class DynamicToolProvider implements ToolProvider {
1118 1116 【输出格式】
1119 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 1129 """.formatted(rowJson, methodNo);
1124 1130 }
1125 1131  
... ...