Commit 25c2a140de8db3fbf953fa274baf661fc64328c3
1 parent
695dd49d
添加未清选择 改成动态引导语
Showing
1 changed file
with
24 additions
and
18 deletions
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 | ... | ... |