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 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);
... ...