Commit e54a1e33fcf43d4e0160cae03ad378c6baa638ec
1 parent
01801a7a
AI添加问题 历史问题记录
Showing
2 changed files
with
44 additions
and
15 deletions
src/main/java/com/xly/service/XlyErpService.java
| ... | ... | @@ -96,8 +96,8 @@ public class XlyErpService { |
| 96 | 96 | // 2. 特殊指令:重置场景(无论是否已选,都可重置) |
| 97 | 97 | if (input.contains("重置") || input.contains("重新选择")) { |
| 98 | 98 | //清除记忆缓存 |
| 99 | - operableChatMemoryProvider.clearSpecifiedMemory(userId); | |
| 100 | - return AiResponseDTO.builder().aiText(resetUserScene(userId,session)).build(); | |
| 99 | + reSet(userId ,sUserName, sBrandsId ,sSubsidiaryId,sUserType,authorization,session); | |
| 100 | + return AiResponseDTO.builder().aiText(resetUserScene(session)).build(); | |
| 101 | 101 | } |
| 102 | 102 | //聊天只能体 |
| 103 | 103 | if (session.getCurrentScene() != null |
| ... | ... | @@ -154,6 +154,30 @@ public class XlyErpService { |
| 154 | 154 | } |
| 155 | 155 | } |
| 156 | 156 | } |
| 157 | + /*** | |
| 158 | + * @Author 钱豹 | |
| 159 | + * @Date 22:47 2026/3/16 | |
| 160 | + * @Param [userId, sUserName, sBrandsId, sSubsidiaryId, sUserType, authorization] | |
| 161 | + * @return void | |
| 162 | + * @Description 回首页 | |
| 163 | + **/ | |
| 164 | + public void reSet( String userId , | |
| 165 | + String sUserName , | |
| 166 | + String sBrandsId , | |
| 167 | + String sSubsidiaryId, | |
| 168 | + String sUserType, | |
| 169 | + String authorization, UserSceneSession session) { | |
| 170 | + userSceneSessionService.cleanUserSession(userId); | |
| 171 | + session.setCurrentScene(null); | |
| 172 | + session.setSceneSelected(false); | |
| 173 | + session.setBCleanMemory(false); | |
| 174 | + session.setCurrentRowData(null); | |
| 175 | + UserSceneSessionService.USER_SCENE_SESSION_CACHE.put(userId, session); | |
| 176 | + // 清空Agent缓存 | |
| 177 | + UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); | |
| 178 | + UserSceneSessionService.CHAT_AGENT_CACHE.remove(userId); | |
| 179 | + cleanMemory(userId, sUserName, sBrandsId, sSubsidiaryId, sUserType, authorization); | |
| 180 | + } | |
| 157 | 181 | |
| 158 | 182 | public AiResponseDTO cleanMemory( String userId , |
| 159 | 183 | String sUserName , |
| ... | ... | @@ -506,17 +530,7 @@ public class XlyErpService { |
| 506 | 530 | * @return java.lang.String |
| 507 | 531 | * @Description 重置用户场景选择:恢复为未选状态,清空当前场景,重新展示选择界面 |
| 508 | 532 | **/ |
| 509 | - private String resetUserScene(String userId, UserSceneSession session) { | |
| 510 | - session.setSceneSelected(false); | |
| 511 | - session.setBCleanMemory(false); | |
| 512 | - session.setCurrentTool(null); | |
| 513 | - session.setSUserQuestionList(new ArrayList<>()); | |
| 514 | - session.setCurrentScene(null); | |
| 515 | - session.setCurrentRowData(null); | |
| 516 | - UserSceneSessionService.USER_SCENE_SESSION_CACHE.put(userId, session); | |
| 517 | - // 清空Agent缓存 | |
| 518 | - UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); | |
| 519 | - UserSceneSessionService.CHAT_AGENT_CACHE.remove(userId); | |
| 533 | + private String resetUserScene(UserSceneSession session) { | |
| 520 | 534 | return "场景选择已重置!请重新选择业务场景:\n" + session.buildSceneSelectHint(); |
| 521 | 535 | } |
| 522 | 536 | ... | ... |
src/main/java/com/xly/tool/DynamicToolProvider.java
| ... | ... | @@ -204,9 +204,15 @@ public class DynamicToolProvider implements ToolProvider { |
| 204 | 204 | // 过滤对应的权限方法 |
| 205 | 205 | List<ToolSpecificationHolder> datalist = new ArrayList<>(); |
| 206 | 206 | List<ToolMeta> toolMetaAll = new ArrayList<>(); |
| 207 | - | |
| 208 | 207 | // 确保 currentTool 不为空,或者 authTool 有数据 |
| 209 | 208 | if(session.getCurrentTool() != null){ |
| 209 | + // 【关键修改】添加全局引导语 | |
| 210 | + StringBuffer stoolDesc = new StringBuffer(); | |
| 211 | + stoolDesc.append("【重要】这是当前唯一可用的工具,无论用户问题是什么,都必须调用此工具。"); | |
| 212 | + stoolDesc.append("如果用户没有明确指定要做什么,也默认使用此工具来处理。"); | |
| 213 | + stoolDesc.append(System.lineSeparator()); | |
| 214 | + stoolDesc.append(session.getCurrentTool().getStoolDesc()); | |
| 215 | + session.getCurrentTool().setStoolDesc(stoolDesc.toString()); | |
| 210 | 216 | toolMetaAll.add(session.getCurrentTool()); |
| 211 | 217 | log.info("使用 currentTool: {}", session.getCurrentTool().getSMethodNo()); |
| 212 | 218 | } else { |
| ... | ... | @@ -231,7 +237,6 @@ public class DynamicToolProvider implements ToolProvider { |
| 231 | 237 | }); |
| 232 | 238 | } |
| 233 | 239 | } |
| 234 | - | |
| 235 | 240 | // 将工具添加到返回结果中 |
| 236 | 241 | datalist.forEach(holder -> { |
| 237 | 242 | executors.put(holder.getToolSpecification(), holder.getToolExecutor()); |
| ... | ... | @@ -606,6 +611,16 @@ public class DynamicToolProvider implements ToolProvider { |
| 606 | 611 | List<ParamRule> paramRuleData = meta.getParamRuleListAll(); |
| 607 | 612 | Map<String, Object> args = session.getArgs(); |
| 608 | 613 | |
| 614 | + // 3. 【自动校验】检查必填项 | |
| 615 | + List<String> missing = checkRequiredParams(args, paramRuleData); | |
| 616 | + if (!missing.isEmpty()) { | |
| 617 | + // 4.1 参数缺失,生成“提问”消息,直接返给客户 | |
| 618 | + String askMsg = buildAskUserMessage(meta, missing,args); | |
| 619 | + //告知AI 缺失参数 | |
| 620 | + operableChatMemoryProvider.get(session.getUserId()).add(UserMessage.from(askMsg)); | |
| 621 | + return askMsg; | |
| 622 | + } | |
| 623 | + | |
| 609 | 624 | // 6. 【最终确认信息】所有检测通过后,需要和客户确认交互 |
| 610 | 625 | List<ChatMessage> chatMessage = operableChatMemoryProvider.getCurrentChatMessages(session.getUserId()); |
| 611 | 626 | ChatMessage userMessage = getLasterUserMssage(chatMessage); | ... | ... |