Commit e54a1e33fcf43d4e0160cae03ad378c6baa638ec

Authored by qianbao
1 parent 01801a7a

AI添加问题 历史问题记录

src/main/java/com/xly/service/XlyErpService.java
@@ -96,8 +96,8 @@ public class XlyErpService { @@ -96,8 +96,8 @@ public class XlyErpService {
96 // 2. 特殊指令:重置场景(无论是否已选,都可重置) 96 // 2. 特殊指令:重置场景(无论是否已选,都可重置)
97 if (input.contains("重置") || input.contains("重新选择")) { 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 if (session.getCurrentScene() != null 103 if (session.getCurrentScene() != null
@@ -154,6 +154,30 @@ public class XlyErpService { @@ -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 public AiResponseDTO cleanMemory( String userId , 182 public AiResponseDTO cleanMemory( String userId ,
159 String sUserName , 183 String sUserName ,
@@ -506,17 +530,7 @@ public class XlyErpService { @@ -506,17 +530,7 @@ public class XlyErpService {
506 * @return java.lang.String 530 * @return java.lang.String
507 * @Description 重置用户场景选择:恢复为未选状态,清空当前场景,重新展示选择界面 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 return "场景选择已重置!请重新选择业务场景:\n" + session.buildSceneSelectHint(); 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,9 +204,15 @@ public class DynamicToolProvider implements ToolProvider {
204 // 过滤对应的权限方法 204 // 过滤对应的权限方法
205 List<ToolSpecificationHolder> datalist = new ArrayList<>(); 205 List<ToolSpecificationHolder> datalist = new ArrayList<>();
206 List<ToolMeta> toolMetaAll = new ArrayList<>(); 206 List<ToolMeta> toolMetaAll = new ArrayList<>();
207 -  
208 // 确保 currentTool 不为空,或者 authTool 有数据 207 // 确保 currentTool 不为空,或者 authTool 有数据
209 if(session.getCurrentTool() != null){ 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 toolMetaAll.add(session.getCurrentTool()); 216 toolMetaAll.add(session.getCurrentTool());
211 log.info("使用 currentTool: {}", session.getCurrentTool().getSMethodNo()); 217 log.info("使用 currentTool: {}", session.getCurrentTool().getSMethodNo());
212 } else { 218 } else {
@@ -231,7 +237,6 @@ public class DynamicToolProvider implements ToolProvider { @@ -231,7 +237,6 @@ public class DynamicToolProvider implements ToolProvider {
231 }); 237 });
232 } 238 }
233 } 239 }
234 -  
235 // 将工具添加到返回结果中 240 // 将工具添加到返回结果中
236 datalist.forEach(holder -> { 241 datalist.forEach(holder -> {
237 executors.put(holder.getToolSpecification(), holder.getToolExecutor()); 242 executors.put(holder.getToolSpecification(), holder.getToolExecutor());
@@ -606,6 +611,16 @@ public class DynamicToolProvider implements ToolProvider { @@ -606,6 +611,16 @@ public class DynamicToolProvider implements ToolProvider {
606 List<ParamRule> paramRuleData = meta.getParamRuleListAll(); 611 List<ParamRule> paramRuleData = meta.getParamRuleListAll();
607 Map<String, Object> args = session.getArgs(); 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 // 6. 【最终确认信息】所有检测通过后,需要和客户确认交互 624 // 6. 【最终确认信息】所有检测通过后,需要和客户确认交互
610 List<ChatMessage> chatMessage = operableChatMemoryProvider.getCurrentChatMessages(session.getUserId()); 625 List<ChatMessage> chatMessage = operableChatMemoryProvider.getCurrentChatMessages(session.getUserId());
611 ChatMessage userMessage = getLasterUserMssage(chatMessage); 626 ChatMessage userMessage = getLasterUserMssage(chatMessage);