Commit a14f98e15ae57e8dc81a920faa9cfa49b016e5bc

Authored by qianbao
1 parent 4f8672b2

AI 对于时间的处理

src/main/java/com/xly/agent/ErpAiAgent.java
@@ -11,12 +11,13 @@ import dev.langchain4j.service.V; @@ -11,12 +11,13 @@ import dev.langchain4j.service.V;
11 */ 11 */
12 public interface ErpAiAgent { 12 public interface ErpAiAgent {
13 @SystemMessage(""" 13 @SystemMessage("""
14 - 你是一个专业的 工具方法匹配与参数提取 助手,核心职责是根据用户输入(含历史对话)精准匹配工具方法、提取参数、判断缺失并生成交互式补全提示;  
15 - 按严格按以下步骤处理,无任何额外输出!规则如下:  
16 - 1. 方法匹配:先精准拆解用户查询的核心业务意图,再自动匹配唯一符合用户问题的工具方法(MethodNo),禁止自创;  
17 - 2. 参数提取:提取该工具的全部参数,与描述完全一致,严格按标注类型赋值,规则如下:  
18 - 2.1 数字无引号,为空时禁止赋值0;  
19 - 2.2 如果有空格需要去掉空格后再提取。 14 + 1. 方法匹配:先精准拆解用户查询的核心业务意图,再自动匹配唯一符合用户问题的工具方法(MethodNo),禁止自创,规则如下;
  15 + 1.1 匹配方法时,无需考虑工具描述(@TOOL)中 1.必填参数,2.选填参数,示例,parameters内容 四个部分的内容;
  16 + 1.2 匹配方法时,只关注工具描述(@TOOL)中 “当用户” 和 “时,必须调用本工具”两个短语之间的内容;
  17 + 1.3 调用工具前,不需要询问用户提供缺失的参数
  18 + 2. 参数提取:提取该工具的全部参数,与描述完全一致,严格按标注类型赋值,规则如下:
  19 + 2.1 数字无引号,为空时禁止赋值0;
  20 + 2.2 如果有空格需要去掉空格后再提取。
20 """) 21 """)
21 @UserMessage("用户输入:{{userInput}}") 22 @UserMessage("用户输入:{{userInput}}")
22 String chat(@MemoryId String userId, @V("userInput") String userInput); 23 String chat(@MemoryId String userId, @V("userInput") String userInput);
src/main/java/com/xly/service/XlyErpService.java
@@ -373,6 +373,7 @@ public class XlyErpService { @@ -373,6 +373,7 @@ public class XlyErpService {
373 .chatLanguageModel(chatModel) 373 .chatLanguageModel(chatModel)
374 .chatMemoryProvider(operableChatMemoryProvider) 374 .chatMemoryProvider(operableChatMemoryProvider)
375 .toolProvider(dynamicToolProvider) 375 .toolProvider(dynamicToolProvider)
  376 +// .toolChoice(ChatCompletionToolChoice.ofRequired()) // 👈 必须调用一个工具
376 .build(); 377 .build();
377 UserSceneSessionService.ERP_AGENT_CACHE.put(userId, aiAgent); 378 UserSceneSessionService.ERP_AGENT_CACHE.put(userId, aiAgent);
378 // 初始化AiService 以防止热加载太慢 找不到相应的方法 379 // 初始化AiService 以防止热加载太慢 找不到相应的方法
src/main/java/com/xly/tool/DynamicToolProvider.java
@@ -240,9 +240,7 @@ public class DynamicToolProvider implements ToolProvider { @@ -240,9 +240,7 @@ public class DynamicToolProvider implements ToolProvider {
240 // .append("1.全部数据生成多个单据 回复【全部确认】;2.全部数据生成一个单据 回复【合并确认】;3.按自然语义描述生成一个单据 如"1,3行确认""); 240 // .append("1.全部数据生成多个单据 回复【全部确认】;2.全部数据生成一个单据 回复【合并确认】;3.按自然语义描述生成一个单据 如"1,3行确认"");
241 } 241 }
242 } 242 }
243 - if("boxQuote".equals(meta.getSMethodNo())){  
244 - log.info(meta.getSParamRules());  
245 - } 243 +
246 try { 244 try {
247 List<ParamRule> paramRuleData = meta.getParamRuleList(); 245 List<ParamRule> paramRuleData = meta.getParamRuleList();
248 // 1.必填参数:客户名称(字符串),产品名称(字符串),数量(数字); 246 // 1.必填参数:客户名称(字符串),产品名称(字符串),数量(数字);
@@ -535,7 +533,7 @@ public class DynamicToolProvider implements ToolProvider { @@ -535,7 +533,7 @@ public class DynamicToolProvider implements ToolProvider {
535 // Map<String, Object> argsOld = DeepCopyUtils.deepCopy(args); 533 // Map<String, Object> argsOld = DeepCopyUtils.deepCopy(args);
536 List<ParamRule> paramRuleData = meta.getParamRuleListAll(); 534 List<ParamRule> paramRuleData = meta.getParamRuleListAll();
537 // 2. 【自动补全】应用参数的默认值 535 // 2. 【自动补全】应用参数的默认值
538 -// args = applyDefaultValues(args, paramRuleData); 536 + args = applyDefaultValues(args, paramRuleData);
539 537
540 // 2.1 【补全动态参数】动态参数补全 538 // 2.1 【补全动态参数】动态参数补全
541 try{ 539 try{