Commit c784f262f5a7794462c6c97e6cfef1fa57089e3d
1 parent
af220654
AI 对于时间的处理
Showing
5 changed files
with
29 additions
and
15 deletions
src/main/java/com/xly/constant/BusinessCode.java
| ... | ... | @@ -13,7 +13,8 @@ import lombok.Getter; |
| 13 | 13 | public enum BusinessCode { |
| 14 | 14 | |
| 15 | 15 | //报价确认 |
| 16 | - QUOCONFIRM("quoconfirm", "报价确认"); | |
| 16 | + QUOCONFIRM("quoconfirm", "报价确认"), | |
| 17 | + COMMONTS("commonTs", "如果切换场景,点[回首页],如果在本场景下,转换意图,点[清除记忆]"); | |
| 17 | 18 | |
| 18 | 19 | private final String code; |
| 19 | 20 | private final String message; | ... | ... |
src/main/java/com/xly/service/XlyErpService.java
| ... | ... | @@ -14,6 +14,7 @@ import com.xly.constant.CommonConstant; |
| 14 | 14 | import com.xly.constant.ReturnTypeCode; |
| 15 | 15 | import com.xly.entity.*; |
| 16 | 16 | import com.xly.exception.sqlexception.SqlGenerateException; |
| 17 | +import com.xly.exception.sqlexception.SqlValidateException; | |
| 17 | 18 | import com.xly.mapper.ToolMetaMapper; |
| 18 | 19 | import com.xly.runner.AppStartupRunner; |
| 19 | 20 | import com.xly.tool.DynamicToolProvider; |
| ... | ... | @@ -157,12 +158,11 @@ public class XlyErpService { |
| 157 | 158 | UserSceneSession session = userSceneSessionService.getUserSceneSession(userId,sUserName,sBrandsId,sSubsidiaryId,sUserType,authorization); |
| 158 | 159 | operableChatMemoryProvider.clearSpecifiedMemory(userId); |
| 159 | 160 | session.setCurrentTool(null); |
| 160 | - session.setBCleanMemory(false); | |
| 161 | 161 | UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); |
| 162 | 162 | UserSceneSessionService.CHAT_AGENT_CACHE.remove(userId); |
| 163 | + session.setBCleanMemory(false); | |
| 163 | 164 | String sceneName = ObjectUtil.isNotEmpty(session.getCurrentScene())?session.getCurrentScene().getSSceneName():StrUtil.EMPTY; |
| 164 | - String methodName = ObjectUtil.isNotEmpty(session.getCurrentTool())?session.getCurrentTool().getSMethodName():StrUtil.EMPTY; | |
| 165 | - return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(methodName).aiText(StrUtil.EMPTY).systemText("清除记忆成功!").sReturnType(ReturnTypeCode.HTML.getCode()).build(); | |
| 165 | + return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(StrUtil.EMPTY).aiText(StrUtil.EMPTY).systemText("清除记忆成功!").sReturnType(ReturnTypeCode.HTML.getCode()).build(); | |
| 166 | 166 | } |
| 167 | 167 | |
| 168 | 168 | |
| ... | ... | @@ -180,6 +180,8 @@ public class XlyErpService { |
| 180 | 180 | try{ |
| 181 | 181 | attempt = attempt+1; |
| 182 | 182 | return getDynamicTableSqlExec(session, input, userId, userInput,errorSql,errorMessage,iErroCount,historySqlList); |
| 183 | + }catch (SqlValidateException e){ | |
| 184 | + return "本场景没有识别到您的意图<br/> 如果切换场景,点[回首页],如果在本场景下,转换意图,点[清除记忆]"; | |
| 183 | 185 | }catch (Exception e){ |
| 184 | 186 | String erroMsg = e.getMessage(); |
| 185 | 187 | String errorSqlOld = StrUtil.EMPTY; |
| ... | ... | @@ -194,7 +196,7 @@ public class XlyErpService { |
| 194 | 196 | } |
| 195 | 197 | String errorMessageOld = erroMsg.split(EnhancedErrorGuidance.splitString)[0]; |
| 196 | 198 | if (attempt == maxRetries) { |
| 197 | - return resultExplain+"查询的SQL语句:"+historySqlList; | |
| 199 | + return resultExplain +"<br/>查询的SQL语句:"+historySqlList; | |
| 198 | 200 | } else { |
| 199 | 201 | return getDynamicTableSql( session, input, userId, userInput, attempt,errorSqlOld,errorMessageOld,attempt.toString(),historySqlList); |
| 200 | 202 | } |
| ... | ... | @@ -202,7 +204,7 @@ public class XlyErpService { |
| 202 | 204 | } |
| 203 | 205 | }catch (Exception e){ |
| 204 | 206 | }finally { |
| 205 | - doCleanUserMemory(session,userId); | |
| 207 | + // doCleanUserMemory(session,userId); | |
| 206 | 208 | } |
| 207 | 209 | return resultExplain; |
| 208 | 210 | } |
| ... | ... | @@ -246,7 +248,7 @@ public class XlyErpService { |
| 246 | 248 | rawSql = aiDynamicTableNl2SqlAiAgent.regenerateSqlWithError(userId, tableNames,tableStruct,sDataNow,userInput,errorSql,errorMessage,iErroCount,historySqlList); |
| 247 | 249 | } |
| 248 | 250 | if (rawSql == null || rawSql.trim().isEmpty()) { |
| 249 | - throw new SqlGenerateException("SQL EMPTY"); | |
| 251 | + throw new SqlValidateException("SQL EMPTY"); | |
| 250 | 252 | } |
| 251 | 253 | // 2. 清理SQL多余符号 + 生产级强校验(核心安全保障,不可省略) |
| 252 | 254 | String cleanSql = SqlValidateUtil.cleanSqlSymbol(rawSql); | ... | ... |
src/main/java/com/xly/tool/DynamicToolProvider.java
| ... | ... | @@ -196,7 +196,12 @@ public class DynamicToolProvider implements ToolProvider { |
| 196 | 196 | UserSceneSession session = UserSceneSessionService.USER_SCENE_SESSION_CACHE.get(sUserId); |
| 197 | 197 | //过滤对应的权限方法 |
| 198 | 198 | List<ToolSpecificationHolder> datalist = new ArrayList<>(); |
| 199 | - List<ToolMeta> toolMetaAll = session.getAuthTool(); | |
| 199 | + List<ToolMeta> toolMetaAll = new ArrayList<>(); | |
| 200 | + if(session.getCurrentTool()!=null){ | |
| 201 | + toolMetaAll.add(session.getCurrentTool()); | |
| 202 | + }else{ | |
| 203 | + toolMetaAll = session.getAuthTool(); | |
| 204 | + } | |
| 200 | 205 | if(ObjectUtil.isNotEmpty(toolMetaAll)){ |
| 201 | 206 | toolMetaAll = toolMetaAll.stream().filter(to-> to.getSSceneId().equals(sSceneIdMap.get(sUserId))).collect(Collectors.toUnmodifiableList()); |
| 202 | 207 | if(ObjectUtil.isNotEmpty(toolMetaAll)){ |
| ... | ... | @@ -532,10 +537,8 @@ public class DynamicToolProvider implements ToolProvider { |
| 532 | 537 | } |
| 533 | 538 | // Map<String, Object> argsOld = DeepCopyUtils.deepCopy(args); |
| 534 | 539 | List<ParamRule> paramRuleData = meta.getParamRuleListAll(); |
| 535 | - // 2. 【自动补全】应用参数的默认值 | |
| 536 | - args = applyDefaultValues(args, paramRuleData); | |
| 537 | 540 | |
| 538 | - // 2.1 【补全动态参数】动态参数补全 | |
| 541 | + // 2 【补全动态参数】动态参数补全 | |
| 539 | 542 | try{ |
| 540 | 543 | args = applyValues(args, meta.getParamRuleListCheck()); |
| 541 | 544 | }catch (Exception e){ |
| ... | ... | @@ -546,6 +549,9 @@ public class DynamicToolProvider implements ToolProvider { |
| 546 | 549 | return String.valueOf(askUserResult(toolExecutionRequest, sTsMsg)); |
| 547 | 550 | } |
| 548 | 551 | |
| 552 | + // 2.1 【自动补全】应用参数的默认值 | |
| 553 | + args = applyDefaultValues(args, paramRuleData); | |
| 554 | + | |
| 549 | 555 | // 3. 【自动校验】检查必填项 |
| 550 | 556 | List<String> missing = checkRequiredParams(args, paramRuleData); |
| 551 | 557 | if (!missing.isEmpty()) { |
| ... | ... | @@ -809,11 +815,10 @@ public class DynamicToolProvider implements ToolProvider { |
| 809 | 815 | Map<String, Object> result = new HashMap<>(args); |
| 810 | 816 | for (ParamRule pd : paramDefs) { |
| 811 | 817 | String name = pd.getSParam(); |
| 812 | - if ((!result.containsKey(name) | |
| 813 | - || ObjectUtil.isEmpty(result.get(name))) | |
| 818 | + if ((!result.containsKey(name)|| ObjectUtil.isEmpty(result.get(name))) | |
| 814 | 819 | && ObjectUtil.isNotEmpty(pd.getSDefaultValue()) |
| 815 | - && !"enum".equals(pd.getSType()) | |
| 816 | - && !"array".equals(pd.getSType()) | |
| 820 | +// && !"enum".equals(pd.getSType()) | |
| 821 | +// && !"array".equals(pd.getSType()) | |
| 817 | 822 | ) { |
| 818 | 823 | Object defaultValue = pd.getSDefaultValue(); |
| 819 | 824 | result.put(name, defaultValue); | ... | ... |
src/main/java/com/xly/tts/bean/TTSResponseDTO.java
src/main/java/com/xly/tts/service/PythonTtsProxyService.java
| ... | ... | @@ -2,6 +2,7 @@ package com.xly.tts.service; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.util.ObjectUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | +import com.xly.constant.BusinessCode; | |
| 5 | 6 | import com.xly.constant.ReturnTypeCode; |
| 6 | 7 | import com.xly.entity.AiResponseDTO; |
| 7 | 8 | import com.xly.service.UserSceneSessionService; |
| ... | ... | @@ -149,6 +150,7 @@ public class PythonTtsProxyService { |
| 149 | 150 | .sSceneName(aiResponseDTO.getSSceneName()) |
| 150 | 151 | .sMethodName (aiResponseDTO.getSMethodName()) |
| 151 | 152 | .sReturnType (aiResponseDTO.getSReturnType()) |
| 153 | + .sCommonts(BusinessCode.COMMONTS.getMessage()) | |
| 152 | 154 | .timestamp(System.currentTimeMillis()) |
| 153 | 155 | .textLength(request.getText().length()) |
| 154 | 156 | .build()); |
| ... | ... | @@ -190,6 +192,7 @@ public class PythonTtsProxyService { |
| 190 | 192 | .sSceneName(aiResponseDTO.getSSceneName()) |
| 191 | 193 | .sMethodName(aiResponseDTO.getSMethodName()) |
| 192 | 194 | .sReturnType(aiResponseDTO.getSReturnType()) |
| 195 | + .sCommonts(BusinessCode.COMMONTS.getMessage()) | |
| 193 | 196 | .audioFormat("audio/mpeg") |
| 194 | 197 | .build(); |
| 195 | 198 | return ResponseEntity.ok(ttsResponse); |
| ... | ... | @@ -213,6 +216,7 @@ public class PythonTtsProxyService { |
| 213 | 216 | .sSceneName(aiResponseDTO.getSSceneName()) |
| 214 | 217 | .sMethodName (aiResponseDTO.getSMethodName()) |
| 215 | 218 | .sReturnType (aiResponseDTO.getSReturnType()) |
| 219 | + .sCommonts(BusinessCode.COMMONTS.getMessage()) | |
| 216 | 220 | .build(); |
| 217 | 221 | return ResponseEntity.ok(ttsResponse); |
| 218 | 222 | } | ... | ... |