From e54a1e33fcf43d4e0160cae03ad378c6baa638ec Mon Sep 17 00:00:00 2001 From: qianbao Date: Mon, 16 Mar 2026 23:57:14 +0800 Subject: [PATCH] AI添加问题 历史问题记录 --- src/main/java/com/xly/service/XlyErpService.java | 40 +++++++++++++++++++++++++++------------- src/main/java/com/xly/tool/DynamicToolProvider.java | 19 +++++++++++++++++-- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java index 73ed17d..b6affb7 100644 --- a/src/main/java/com/xly/service/XlyErpService.java +++ b/src/main/java/com/xly/service/XlyErpService.java @@ -96,8 +96,8 @@ public class XlyErpService { // 2. 特殊指令:重置场景(无论是否已选,都可重置) if (input.contains("重置") || input.contains("重新选择")) { //清除记忆缓存 - operableChatMemoryProvider.clearSpecifiedMemory(userId); - return AiResponseDTO.builder().aiText(resetUserScene(userId,session)).build(); + reSet(userId ,sUserName, sBrandsId ,sSubsidiaryId,sUserType,authorization,session); + return AiResponseDTO.builder().aiText(resetUserScene(session)).build(); } //聊天只能体 if (session.getCurrentScene() != null @@ -154,6 +154,30 @@ public class XlyErpService { } } } + /*** + * @Author 钱豹 + * @Date 22:47 2026/3/16 + * @Param [userId, sUserName, sBrandsId, sSubsidiaryId, sUserType, authorization] + * @return void + * @Description 回首页 + **/ + public void reSet( String userId , + String sUserName , + String sBrandsId , + String sSubsidiaryId, + String sUserType, + String authorization, UserSceneSession session) { + userSceneSessionService.cleanUserSession(userId); + session.setCurrentScene(null); + session.setSceneSelected(false); + session.setBCleanMemory(false); + session.setCurrentRowData(null); + UserSceneSessionService.USER_SCENE_SESSION_CACHE.put(userId, session); + // 清空Agent缓存 + UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); + UserSceneSessionService.CHAT_AGENT_CACHE.remove(userId); + cleanMemory(userId, sUserName, sBrandsId, sSubsidiaryId, sUserType, authorization); + } public AiResponseDTO cleanMemory( String userId , String sUserName , @@ -506,17 +530,7 @@ public class XlyErpService { * @return java.lang.String * @Description 重置用户场景选择:恢复为未选状态,清空当前场景,重新展示选择界面 **/ - private String resetUserScene(String userId, UserSceneSession session) { - session.setSceneSelected(false); - session.setBCleanMemory(false); - session.setCurrentTool(null); - session.setSUserQuestionList(new ArrayList<>()); - session.setCurrentScene(null); - session.setCurrentRowData(null); - UserSceneSessionService.USER_SCENE_SESSION_CACHE.put(userId, session); - // 清空Agent缓存 - UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); - UserSceneSessionService.CHAT_AGENT_CACHE.remove(userId); + private String resetUserScene(UserSceneSession session) { return "场景选择已重置!请重新选择业务场景:\n" + session.buildSceneSelectHint(); } diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java index 1269893..5b71163 100644 --- a/src/main/java/com/xly/tool/DynamicToolProvider.java +++ b/src/main/java/com/xly/tool/DynamicToolProvider.java @@ -204,9 +204,15 @@ public class DynamicToolProvider implements ToolProvider { // 过滤对应的权限方法 List datalist = new ArrayList<>(); List toolMetaAll = new ArrayList<>(); - // 确保 currentTool 不为空,或者 authTool 有数据 if(session.getCurrentTool() != null){ + // 【关键修改】添加全局引导语 + StringBuffer stoolDesc = new StringBuffer(); + stoolDesc.append("【重要】这是当前唯一可用的工具,无论用户问题是什么,都必须调用此工具。"); + stoolDesc.append("如果用户没有明确指定要做什么,也默认使用此工具来处理。"); + stoolDesc.append(System.lineSeparator()); + stoolDesc.append(session.getCurrentTool().getStoolDesc()); + session.getCurrentTool().setStoolDesc(stoolDesc.toString()); toolMetaAll.add(session.getCurrentTool()); log.info("使用 currentTool: {}", session.getCurrentTool().getSMethodNo()); } else { @@ -231,7 +237,6 @@ public class DynamicToolProvider implements ToolProvider { }); } } - // 将工具添加到返回结果中 datalist.forEach(holder -> { executors.put(holder.getToolSpecification(), holder.getToolExecutor()); @@ -606,6 +611,16 @@ public class DynamicToolProvider implements ToolProvider { List paramRuleData = meta.getParamRuleListAll(); Map args = session.getArgs(); + // 3. 【自动校验】检查必填项 + List missing = checkRequiredParams(args, paramRuleData); + if (!missing.isEmpty()) { + // 4.1 参数缺失,生成“提问”消息,直接返给客户 + String askMsg = buildAskUserMessage(meta, missing,args); + //告知AI 缺失参数 + operableChatMemoryProvider.get(session.getUserId()).add(UserMessage.from(askMsg)); + return askMsg; + } + // 6. 【最终确认信息】所有检测通过后,需要和客户确认交互 List chatMessage = operableChatMemoryProvider.getCurrentChatMessages(session.getUserId()); ChatMessage userMessage = getLasterUserMssage(chatMessage); -- libgit2 0.22.2