diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java index 7ff78b9..2af76ce 100644 --- a/src/main/java/com/xly/service/XlyErpService.java +++ b/src/main/java/com/xly/service/XlyErpService.java @@ -355,6 +355,8 @@ public class XlyErpService { Boolean isConfirmed = dynamicToolProvider.isConfirmed(input) || input.contains("生成") || input.contains("确认"); if(ObjectUtil.isNotEmpty(session.getSSystemPrompt()) && isConfirmed){ sSystemPrompt = session.getSSystemPrompt(); + //重新生成新的aiAgent拿新的aiAgent 做选择 + aiAgent = createConfirmeAgent(session); } Result rs = aiAgent.chat(userId, input,sSystemPrompt); sResponMessage = rs.content(); @@ -376,8 +378,6 @@ public class XlyErpService { ){ //查询缓存是否存在取缓存 直接走 Map cachMap = getDynamicTableCach(session,userInput); - Boolean isAggregation; - Boolean bHasCach; String sCleanSql = StrUtil.EMPTY; if(ObjectUtil.isEmpty(cachMap)){ //查询是否走向量库 还是数据库查询 @@ -385,7 +385,6 @@ public class XlyErpService { session.setDbCach("D"); // bHasCach = false; }else{ - isAggregation = "MYSQL".equals(cachMap.get("cachType")); session.setDbCach("H"); // bHasCach = true; sCleanSql = ObjectUtil.isNotEmpty(cachMap.get("sSqlContent"))?cachMap.get("sSqlContent").toString() : StrUtil.EMPTY; @@ -975,6 +974,24 @@ public class XlyErpService { return aiAgent; } + private ErpAiAgent createConfirmeAgent(UserSceneSession session) { + List dataList = dynamicToolProvider.sceneToolCacheMap.get(session.getCurrentScene().getSId()); + Set immediateReturnToolNames = new HashSet<>(); + dataList = dataList.stream().filter(one->one.getsName().equals(session.getCurrentTool().getSMethodNo())).collect(Collectors.toUnmodifiableList()); + Map executors = new HashMap<>(); + if(ObjectUtil.isNotEmpty(dataList)){ + dataList.forEach(one->{ + immediateReturnToolNames.add(one.getsName()); + executors.put(one.getToolSpecification(),one.getToolExecutor()); + }); + } + ErpAiAgent aiAgent = AiServices.builder(ErpAiAgent.class) + .chatModel(chatModel) + .chatMemoryProvider(operableChatMemoryProvider) + .tools(executors,immediateReturnToolNames) + .build(); + return aiAgent; + } /** * 大模型意图解析核心方法(获取场景) diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java index 037c89a..6cc12ef 100644 --- a/src/main/java/com/xly/tool/DynamicToolProvider.java +++ b/src/main/java/com/xly/tool/DynamicToolProvider.java @@ -313,6 +313,7 @@ public class DynamicToolProvider implements ToolProvider { 2. 只要方法返回结果,必须停止调用 3. 禁止重复调用同一个方法 4. 禁止无意义循环调用 + 5. 当用户输入包含【数据确认】、确认数据、确认、第*条数据确认时,必须调用本工具 """; stoolDesc.append(forceToolPrompt); if (ObjectUtil.isNotEmpty(meta.getStoolDesc())) {