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,6 +638,10 @@ public class DynamicToolProvider implements ToolProvider {
638 String askconfirmMsg =StrUtil.EMPTY; 638 String askconfirmMsg =StrUtil.EMPTY;
639 if(4== meta.getIBizType() || meta.getIBizType()==5){ 639 if(4== meta.getIBizType() || meta.getIBizType()==5){
640 askconfirmMsg = doGetFromData( meta,args,session); 640 askconfirmMsg = doGetFromData( meta,args,session);
  641 + // ===================== 加入这一行 =====================
  642 + String sSystemPrompt = buildDynamicSystemPrompt(session);
  643 + session.setSSystemPrompt(sSystemPrompt);
  644 + //===================== AI 返回需要确认 =====================
641 return executeWithConfirmation(askconfirmMsg, session, meta); 645 return executeWithConfirmation(askconfirmMsg, session, meta);
642 }else{ 646 }else{
643 askconfirmMsg =getDefMessage(args,meta.getSControlName(),meta); 647 askconfirmMsg =getDefMessage(args,meta.getSControlName(),meta);
@@ -1252,49 +1256,68 @@ public class DynamicToolProvider implements ToolProvider { @@ -1252,49 +1256,68 @@ public class DynamicToolProvider implements ToolProvider {
1252 appendConfirmAll(markdown,meta.getSControlName()); 1256 appendConfirmAll(markdown,meta.getSControlName());
1253 } 1257 }
1254 session.setCurrentRowData(currentRowData); 1258 session.setCurrentRowData(currentRowData);
1255 - // ===================== 加入这一行 =====================  
1256 - String sSystemPrompt = buildDynamicSystemPrompt(session);  
1257 - session.setSSystemPrompt(sSystemPrompt);  
1258 - // ======================================================  
1259 return markdown.toString(); 1259 return markdown.toString();
1260 } 1260 }
1261 1261
1262 public String buildDynamicSystemPrompt(UserSceneSession session) { 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 1. 禁止说话!禁止解释! 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 private List<Map<String, Object>> findFieldNameByChinese(List<Map<String, Object>> sAIshowfieldShow,List<Map<String, Object>> rows){ 1323 private List<Map<String, Object>> findFieldNameByChinese(List<Map<String, Object>> sAIshowfieldShow,List<Map<String, Object>> rows){