diff --git a/src/main/java/com/xly/constant/BusinessCode.java b/src/main/java/com/xly/constant/BusinessCode.java
index 5ae0d46..16faef4 100644
--- a/src/main/java/com/xly/constant/BusinessCode.java
+++ b/src/main/java/com/xly/constant/BusinessCode.java
@@ -13,7 +13,8 @@ import lombok.Getter;
public enum BusinessCode {
//报价确认
- QUOCONFIRM("quoconfirm", "报价确认");
+ QUOCONFIRM("quoconfirm", "报价确认"),
+ COMMONTS("commonTs", "如果切换场景,点[回首页],如果在本场景下,转换意图,点[清除记忆]");
private final String code;
private final String message;
diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java
index 5cdda28..19cdf3f 100644
--- a/src/main/java/com/xly/service/XlyErpService.java
+++ b/src/main/java/com/xly/service/XlyErpService.java
@@ -14,6 +14,7 @@ import com.xly.constant.CommonConstant;
import com.xly.constant.ReturnTypeCode;
import com.xly.entity.*;
import com.xly.exception.sqlexception.SqlGenerateException;
+import com.xly.exception.sqlexception.SqlValidateException;
import com.xly.mapper.ToolMetaMapper;
import com.xly.runner.AppStartupRunner;
import com.xly.tool.DynamicToolProvider;
@@ -157,12 +158,11 @@ public class XlyErpService {
UserSceneSession session = userSceneSessionService.getUserSceneSession(userId,sUserName,sBrandsId,sSubsidiaryId,sUserType,authorization);
operableChatMemoryProvider.clearSpecifiedMemory(userId);
session.setCurrentTool(null);
- session.setBCleanMemory(false);
UserSceneSessionService.ERP_AGENT_CACHE.remove(userId);
UserSceneSessionService.CHAT_AGENT_CACHE.remove(userId);
+ session.setBCleanMemory(false);
String sceneName = ObjectUtil.isNotEmpty(session.getCurrentScene())?session.getCurrentScene().getSSceneName():StrUtil.EMPTY;
- String methodName = ObjectUtil.isNotEmpty(session.getCurrentTool())?session.getCurrentTool().getSMethodName():StrUtil.EMPTY;
- return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(methodName).aiText(StrUtil.EMPTY).systemText("清除记忆成功!").sReturnType(ReturnTypeCode.HTML.getCode()).build();
+ return AiResponseDTO.builder().sSceneName(sceneName).sMethodName(StrUtil.EMPTY).aiText(StrUtil.EMPTY).systemText("清除记忆成功!").sReturnType(ReturnTypeCode.HTML.getCode()).build();
}
@@ -180,6 +180,8 @@ public class XlyErpService {
try{
attempt = attempt+1;
return getDynamicTableSqlExec(session, input, userId, userInput,errorSql,errorMessage,iErroCount,historySqlList);
+ }catch (SqlValidateException e){
+ return "本场景没有识别到您的意图
如果切换场景,点[回首页],如果在本场景下,转换意图,点[清除记忆]";
}catch (Exception e){
String erroMsg = e.getMessage();
String errorSqlOld = StrUtil.EMPTY;
@@ -194,7 +196,7 @@ public class XlyErpService {
}
String errorMessageOld = erroMsg.split(EnhancedErrorGuidance.splitString)[0];
if (attempt == maxRetries) {
- return resultExplain+"查询的SQL语句:"+historySqlList;
+ return resultExplain +"
查询的SQL语句:"+historySqlList;
} else {
return getDynamicTableSql( session, input, userId, userInput, attempt,errorSqlOld,errorMessageOld,attempt.toString(),historySqlList);
}
@@ -202,7 +204,7 @@ public class XlyErpService {
}
}catch (Exception e){
}finally {
- doCleanUserMemory(session,userId);
+ // doCleanUserMemory(session,userId);
}
return resultExplain;
}
@@ -246,7 +248,7 @@ public class XlyErpService {
rawSql = aiDynamicTableNl2SqlAiAgent.regenerateSqlWithError(userId, tableNames,tableStruct,sDataNow,userInput,errorSql,errorMessage,iErroCount,historySqlList);
}
if (rawSql == null || rawSql.trim().isEmpty()) {
- throw new SqlGenerateException("SQL EMPTY");
+ throw new SqlValidateException("SQL EMPTY");
}
// 2. 清理SQL多余符号 + 生产级强校验(核心安全保障,不可省略)
String cleanSql = SqlValidateUtil.cleanSqlSymbol(rawSql);
diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java
index ff5f568..68de200 100644
--- a/src/main/java/com/xly/tool/DynamicToolProvider.java
+++ b/src/main/java/com/xly/tool/DynamicToolProvider.java
@@ -196,7 +196,12 @@ public class DynamicToolProvider implements ToolProvider {
UserSceneSession session = UserSceneSessionService.USER_SCENE_SESSION_CACHE.get(sUserId);
//过滤对应的权限方法
List datalist = new ArrayList<>();
- List toolMetaAll = session.getAuthTool();
+ List toolMetaAll = new ArrayList<>();
+ if(session.getCurrentTool()!=null){
+ toolMetaAll.add(session.getCurrentTool());
+ }else{
+ toolMetaAll = session.getAuthTool();
+ }
if(ObjectUtil.isNotEmpty(toolMetaAll)){
toolMetaAll = toolMetaAll.stream().filter(to-> to.getSSceneId().equals(sSceneIdMap.get(sUserId))).collect(Collectors.toUnmodifiableList());
if(ObjectUtil.isNotEmpty(toolMetaAll)){
@@ -532,10 +537,8 @@ public class DynamicToolProvider implements ToolProvider {
}
// Map argsOld = DeepCopyUtils.deepCopy(args);
List paramRuleData = meta.getParamRuleListAll();
- // 2. 【自动补全】应用参数的默认值
- args = applyDefaultValues(args, paramRuleData);
- // 2.1 【补全动态参数】动态参数补全
+ // 2 【补全动态参数】动态参数补全
try{
args = applyValues(args, meta.getParamRuleListCheck());
}catch (Exception e){
@@ -546,6 +549,9 @@ public class DynamicToolProvider implements ToolProvider {
return String.valueOf(askUserResult(toolExecutionRequest, sTsMsg));
}
+ // 2.1 【自动补全】应用参数的默认值
+ args = applyDefaultValues(args, paramRuleData);
+
// 3. 【自动校验】检查必填项
List missing = checkRequiredParams(args, paramRuleData);
if (!missing.isEmpty()) {
@@ -809,11 +815,10 @@ public class DynamicToolProvider implements ToolProvider {
Map result = new HashMap<>(args);
for (ParamRule pd : paramDefs) {
String name = pd.getSParam();
- if ((!result.containsKey(name)
- || ObjectUtil.isEmpty(result.get(name)))
+ if ((!result.containsKey(name)|| ObjectUtil.isEmpty(result.get(name)))
&& ObjectUtil.isNotEmpty(pd.getSDefaultValue())
- && !"enum".equals(pd.getSType())
- && !"array".equals(pd.getSType())
+// && !"enum".equals(pd.getSType())
+// && !"array".equals(pd.getSType())
) {
Object defaultValue = pd.getSDefaultValue();
result.put(name, defaultValue);
diff --git a/src/main/java/com/xly/tts/bean/TTSResponseDTO.java b/src/main/java/com/xly/tts/bean/TTSResponseDTO.java
index 160caf3..25ca39a 100644
--- a/src/main/java/com/xly/tts/bean/TTSResponseDTO.java
+++ b/src/main/java/com/xly/tts/bean/TTSResponseDTO.java
@@ -60,6 +60,8 @@ public class TTSResponseDTO implements Serializable {
private String sSceneName;
//业务方法名称
private String sMethodName;
+ //清除记忆提示
+ private String sCommonts;
private String sReturnType = ReturnTypeCode.MAKEDOWN.getCode();
diff --git a/src/main/java/com/xly/tts/service/PythonTtsProxyService.java b/src/main/java/com/xly/tts/service/PythonTtsProxyService.java
index 3e5303e..4657e24 100644
--- a/src/main/java/com/xly/tts/service/PythonTtsProxyService.java
+++ b/src/main/java/com/xly/tts/service/PythonTtsProxyService.java
@@ -2,6 +2,7 @@ package com.xly.tts.service;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import com.xly.constant.BusinessCode;
import com.xly.constant.ReturnTypeCode;
import com.xly.entity.AiResponseDTO;
import com.xly.service.UserSceneSessionService;
@@ -149,6 +150,7 @@ public class PythonTtsProxyService {
.sSceneName(aiResponseDTO.getSSceneName())
.sMethodName (aiResponseDTO.getSMethodName())
.sReturnType (aiResponseDTO.getSReturnType())
+ .sCommonts(BusinessCode.COMMONTS.getMessage())
.timestamp(System.currentTimeMillis())
.textLength(request.getText().length())
.build());
@@ -190,6 +192,7 @@ public class PythonTtsProxyService {
.sSceneName(aiResponseDTO.getSSceneName())
.sMethodName(aiResponseDTO.getSMethodName())
.sReturnType(aiResponseDTO.getSReturnType())
+ .sCommonts(BusinessCode.COMMONTS.getMessage())
.audioFormat("audio/mpeg")
.build();
return ResponseEntity.ok(ttsResponse);
@@ -213,6 +216,7 @@ public class PythonTtsProxyService {
.sSceneName(aiResponseDTO.getSSceneName())
.sMethodName (aiResponseDTO.getSMethodName())
.sReturnType (aiResponseDTO.getSReturnType())
+ .sCommonts(BusinessCode.COMMONTS.getMessage())
.build();
return ResponseEntity.ok(ttsResponse);
}