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