Commit 22af6154fd16fa92df82f688e486bd24dfabcf5c
1 parent
83ae197b
添加未清选择 改成动态引导语
Showing
1 changed file
with
55 additions
and
32 deletions
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){ | ... | ... |