Commit 22af6154fd16fa92df82f688e486bd24dfabcf5c

Authored by qianbao
1 parent 83ae197b

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

src/main/java/com/xly/tool/DynamicToolProvider.java
... ... @@ -638,6 +638,10 @@ public class DynamicToolProvider implements ToolProvider {
638 638 String askconfirmMsg =StrUtil.EMPTY;
639 639 if(4== meta.getIBizType() || meta.getIBizType()==5){
640 640 askconfirmMsg = doGetFromData( meta,args,session);
  641 + // ===================== 加入这一行 =====================
  642 + String sSystemPrompt = buildDynamicSystemPrompt(session);
  643 + session.setSSystemPrompt(sSystemPrompt);
  644 + //===================== AI 返回需要确认 =====================
641 645 return executeWithConfirmation(askconfirmMsg, session, meta);
642 646 }else{
643 647 askconfirmMsg =getDefMessage(args,meta.getSControlName(),meta);
... ... @@ -1252,49 +1256,68 @@ public class DynamicToolProvider implements ToolProvider {
1252 1256 appendConfirmAll(markdown,meta.getSControlName());
1253 1257 }
1254 1258 session.setCurrentRowData(currentRowData);
1255   - // ===================== 加入这一行 =====================
1256   - String sSystemPrompt = buildDynamicSystemPrompt(session);
1257   - session.setSSystemPrompt(sSystemPrompt);
1258   - // ======================================================
1259 1259 return markdown.toString();
1260 1260 }
1261 1261  
1262 1262 public String buildDynamicSystemPrompt(UserSceneSession session) {
  1263 + String methodNo = session.getCurrentTool().getSMethodNo();
  1264 + String rowJson = JSONUtil.toJsonStr(session.getCurrentRowData());
1263 1265  
1264   - // 1. 强制指令 + 固定方法编号
1265   - String promptHead = """
  1266 + return """
1266 1267 【极强约束·必须执行】
1267 1268 1. 禁止说话!禁止解释!
1268   - 2. 必须调用工具,固定方法编号:MethodNo = queryUnprocessQuote
1269   - 3. 只输出JSON,无任何其他内容
1270   -
1271   - 以下是【行号 → sSlaveId】对应数据:
1272   - """;
1273   -
1274   - // 2. 动态拼接行号 + 动态 sSlaveId
1275   - Map<Integer, Map<String, Object>> rowDataMap = session.getCurrentRowData();
1276   - StringBuilder rowDataSb = new StringBuilder();
1277   - if (ObjectUtil.isNotEmpty(rowDataMap)) {
1278   - for (Map.Entry<Integer, Map<String, Object>> entry : rowDataMap.entrySet()) {
1279   - int rowNum = entry.getKey();
1280   - String sSlaveId = StrUtil.toString(entry.getValue().get("sSlaveId"));
1281   - rowDataSb.append("第").append(rowNum).append("行 → ").append(sSlaveId).append("\n");
1282   - }
1283   - }
  1269 + 2. 必须调用工具!
  1270 + 3. 只输出标准工具调用JSON!
  1271 +
  1272 + 表格数据:
  1273 + %s
  1274 +
  1275 + 【解析规则】
  1276 + 1. 用户说“第N行” → 取对应sSlaveId
  1277 + 2. 用户说“全部确认” → 取所有sSlaveId
  1278 + 3. 多行用英文逗号拼接
1284 1279  
1285   - // 3. 输出格式约束
1286   - String promptFoot = """
1287   - 【输出JSON格式·严格遵守】
1288   - 根据用户选择的行,自动填写 sSlaveId,多行用英文逗号拼接
  1280 + 【输出格式·绝对严格·必须照做】
  1281 + 你必须输出标准工具调用JSON,只输出这一段,不许加任何文字:
1289 1282 {
1290   - "operateType": "全部确认/合并确认/单行确认",
1291   - "sSlaveId": "填写对应的ID,多个用逗号分隔"
  1283 + "name": "%s",
  1284 + "parameters": {
  1285 + "operateType": "全部确认/合并确认/单行确认",
  1286 + "sSlaveId": "id1,id2,id3"
  1287 + }
1292 1288 }
1293   - """;
1294   -
1295   - // 拼接最终返回
1296   - return promptHead + rowDataSb + promptFoot;
  1289 + """.formatted(rowJson, methodNo);
1297 1290 }
  1291 +// public String buildDynamicSystemPrompt(UserSceneSession session) {
  1292 +// // 动态获取当前工具方法号
  1293 +// String methodNo = session.getCurrentTool().getSMethodNo();
  1294 +// String promptHead = """
  1295 +// 【极强约束·必须执行】
  1296 +// 1. 禁止说话!禁止解释!
  1297 +// 2. 必须调用工具,固定方法编号:MethodNo = %s
  1298 +// 3. 只输出JSON,无任何其他内容
  1299 +// 以下是【行号 → sSlaveId】对应数据:
  1300 +// """.formatted(methodNo);
  1301 +//
  1302 +// Map<Integer, Map<String, Object>> rowDataMap = session.getCurrentRowData();
  1303 +// StringBuilder rowDataSb = new StringBuilder();
  1304 +// if (ObjectUtil.isNotEmpty(rowDataMap)) {
  1305 +// for (Map.Entry<Integer, Map<String, Object>> entry : rowDataMap.entrySet()) {
  1306 +// int rowNum = entry.getKey();
  1307 +// String sSlaveId = StrUtil.toString(entry.getValue().get("sSlaveId"));
  1308 +// rowDataSb.append("第").append(rowNum).append("行 → ").append(sSlaveId).append("\n");
  1309 +// }
  1310 +// }
  1311 +// String promptFoot = """
  1312 +// 【输出JSON格式·严格遵守】
  1313 +// 根据用户选择的行,自动填写 sSlaveId,多行用英文逗号拼接
  1314 +// {
  1315 +// "operateType": "全部确认/合并确认/单行确认",
  1316 +// "sSlaveId": "填写对应的ID,多个用逗号分隔"
  1317 +// }
  1318 +// """;
  1319 +// return promptHead + rowDataSb + promptFoot;
  1320 +// }
1298 1321  
1299 1322 // 辅助方法:根据中文名查找字段名(通过映射关系转换)
1300 1323 private List<Map<String, Object>> findFieldNameByChinese(List<Map<String, Object>> sAIshowfieldShow,List<Map<String, Object>> rows){
... ...