From 22af6154fd16fa92df82f688e486bd24dfabcf5c Mon Sep 17 00:00:00 2001 From: qianbao Date: Tue, 14 Apr 2026 23:29:26 +0800 Subject: [PATCH] 添加未清选择 改成动态引导语 --- src/main/java/com/xly/tool/DynamicToolProvider.java | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java index 98bb3b2..7e2a445 100644 --- a/src/main/java/com/xly/tool/DynamicToolProvider.java +++ b/src/main/java/com/xly/tool/DynamicToolProvider.java @@ -638,6 +638,10 @@ public class DynamicToolProvider implements ToolProvider { String askconfirmMsg =StrUtil.EMPTY; if(4== meta.getIBizType() || meta.getIBizType()==5){ askconfirmMsg = doGetFromData( meta,args,session); + // ===================== 加入这一行 ===================== + String sSystemPrompt = buildDynamicSystemPrompt(session); + session.setSSystemPrompt(sSystemPrompt); + //===================== AI 返回需要确认 ===================== return executeWithConfirmation(askconfirmMsg, session, meta); }else{ askconfirmMsg =getDefMessage(args,meta.getSControlName(),meta); @@ -1252,49 +1256,68 @@ public class DynamicToolProvider implements ToolProvider { appendConfirmAll(markdown,meta.getSControlName()); } session.setCurrentRowData(currentRowData); - // ===================== 加入这一行 ===================== - String sSystemPrompt = buildDynamicSystemPrompt(session); - session.setSSystemPrompt(sSystemPrompt); - // ====================================================== return markdown.toString(); } public String buildDynamicSystemPrompt(UserSceneSession session) { + String methodNo = session.getCurrentTool().getSMethodNo(); + String rowJson = JSONUtil.toJsonStr(session.getCurrentRowData()); - // 1. 强制指令 + 固定方法编号 - String promptHead = """ + return """ 【极强约束·必须执行】 1. 禁止说话!禁止解释! - 2. 必须调用工具,固定方法编号:MethodNo = queryUnprocessQuote - 3. 只输出JSON,无任何其他内容 - - 以下是【行号 → sSlaveId】对应数据: - """; - - // 2. 动态拼接行号 + 动态 sSlaveId - Map> rowDataMap = session.getCurrentRowData(); - StringBuilder rowDataSb = new StringBuilder(); - if (ObjectUtil.isNotEmpty(rowDataMap)) { - for (Map.Entry> entry : rowDataMap.entrySet()) { - int rowNum = entry.getKey(); - String sSlaveId = StrUtil.toString(entry.getValue().get("sSlaveId")); - rowDataSb.append("第").append(rowNum).append("行 → ").append(sSlaveId).append("\n"); - } - } + 2. 必须调用工具! + 3. 只输出标准工具调用JSON! + + 表格数据: + %s + + 【解析规则】 + 1. 用户说“第N行” → 取对应sSlaveId + 2. 用户说“全部确认” → 取所有sSlaveId + 3. 多行用英文逗号拼接 - // 3. 输出格式约束 - String promptFoot = """ - 【输出JSON格式·严格遵守】 - 根据用户选择的行,自动填写 sSlaveId,多行用英文逗号拼接 + 【输出格式·绝对严格·必须照做】 + 你必须输出标准工具调用JSON,只输出这一段,不许加任何文字: { - "operateType": "全部确认/合并确认/单行确认", - "sSlaveId": "填写对应的ID,多个用逗号分隔" + "name": "%s", + "parameters": { + "operateType": "全部确认/合并确认/单行确认", + "sSlaveId": "id1,id2,id3" + } } - """; - - // 拼接最终返回 - return promptHead + rowDataSb + promptFoot; + """.formatted(rowJson, methodNo); } +// public String buildDynamicSystemPrompt(UserSceneSession session) { +// // 动态获取当前工具方法号 +// String methodNo = session.getCurrentTool().getSMethodNo(); +// String promptHead = """ +// 【极强约束·必须执行】 +// 1. 禁止说话!禁止解释! +// 2. 必须调用工具,固定方法编号:MethodNo = %s +// 3. 只输出JSON,无任何其他内容 +// 以下是【行号 → sSlaveId】对应数据: +// """.formatted(methodNo); +// +// Map> rowDataMap = session.getCurrentRowData(); +// StringBuilder rowDataSb = new StringBuilder(); +// if (ObjectUtil.isNotEmpty(rowDataMap)) { +// for (Map.Entry> entry : rowDataMap.entrySet()) { +// int rowNum = entry.getKey(); +// String sSlaveId = StrUtil.toString(entry.getValue().get("sSlaveId")); +// rowDataSb.append("第").append(rowNum).append("行 → ").append(sSlaveId).append("\n"); +// } +// } +// String promptFoot = """ +// 【输出JSON格式·严格遵守】 +// 根据用户选择的行,自动填写 sSlaveId,多行用英文逗号拼接 +// { +// "operateType": "全部确认/合并确认/单行确认", +// "sSlaveId": "填写对应的ID,多个用逗号分隔" +// } +// """; +// return promptHead + rowDataSb + promptFoot; +// } // 辅助方法:根据中文名查找字段名(通过映射关系转换) private List> findFieldNameByChinese(List> sAIshowfieldShow,List> rows){ -- libgit2 0.22.2