From 262f1b7cc048615434c5ebf28b35d538a7ce4751 Mon Sep 17 00:00:00 2001 From: qianbao Date: Fri, 24 Jul 2026 12:59:15 +0800 Subject: [PATCH] 添加未清选择 改成动态引导语 --- src/main/java/com/xly/agent/AgentSystemPrompt.java | 8 ++++++++ src/main/java/com/xly/agent/SystemPromptGenerator.java | 9 +++++---- src/main/java/com/xly/entity/ToolMeta.java | 1 + src/main/java/com/xly/mapper/ToolMetaMapper.java | 2 +- src/main/java/com/xly/service/XlyErpService.java | 5 +++-- src/main/java/com/xly/tool/DynamicToolProvider.java | 4 +++- 6 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/xly/agent/AgentSystemPrompt.java b/src/main/java/com/xly/agent/AgentSystemPrompt.java index de3c099..cdfde6b 100644 --- a/src/main/java/com/xly/agent/AgentSystemPrompt.java +++ b/src/main/java/com/xly/agent/AgentSystemPrompt.java @@ -20,4 +20,12 @@ public class AgentSystemPrompt { "2. 严禁与用户进行任何对话!严禁输出“您好”、“请提供”、“需要补充”等任何纯文本回复!\n" + "3. 无论用户输入多么简短(例如只输入了公司名),或者参数缺失多么严重,你都必须直接调用工具,将缺失的字段留空或填0。\n" + "4. 不要试图去引导用户,引导用户是你的后端程序要做的事,你只需要负责把提取到的参数传出去。"; + + public static final String sSystemPromptQuo = "你是参数提取器,不是聊天助手。\n" + + "【绝对指令】\n" + + "1. 你的唯一任务是提取用户输入中的参数,并立即调用工具。\n" + + "2. 严禁与用户进行任何对话!严禁输出“您好”、“请提供”、“需要补充”等任何纯文本回复!\n" + + "3. 无论用户输入多么简短(例如只输入了公司名),或者参数缺失多么严重,你都必须直接调用工具,将缺失的字段留空或填0。\n" + + "4. 印刷行业知识库:提取参数前,请先理解行业知识库,再进行方法匹配和参数提取,知识库内容如下:" + + " - {}"; } \ No newline at end of file diff --git a/src/main/java/com/xly/agent/SystemPromptGenerator.java b/src/main/java/com/xly/agent/SystemPromptGenerator.java index d18d658..963ff11 100644 --- a/src/main/java/com/xly/agent/SystemPromptGenerator.java +++ b/src/main/java/com/xly/agent/SystemPromptGenerator.java @@ -12,16 +12,18 @@ import java.util.stream.Collectors; public class SystemPromptGenerator { - public static String generate(String toolName, UserSceneSession session) { + public static String generate(String toolName, UserSceneSession session,String sKnowledgeBase) { StringBuilder sb = new StringBuilder(); - sb.append("你是一个无情的参数提取器,不是聊天助手。\n\n"); sb.append("【核心任务】\n"); sb.append("从用户输入中提取参数,并立即调用工具 ").append(toolName).append("。\n\n"); sb.append("【绝对指令】\n"); sb.append("1. 严禁与用户对话,严禁输出任何纯文本回复。\n"); sb.append("2. 无论参数缺失多么严重,都必须直接调用工具,缺失字段填空字符串或0。\n"); - sb.append("3. 不要引导用户,后端程序会处理引导逻辑。\n\n"); + if(ObjectUtil.isNotEmpty(sKnowledgeBase)){ + sb.append("3. 印刷行业知识库:提取参数前,请先理解行业知识库,再进行方法匹配和参数提取,知识库内容如下: \n"); + sb.append(" - "+sKnowledgeBase); + } sb.append("【参数提取规则】\n"); sb.append("用户输入格式为 \"参数名: 值\" 或 \"参数名 值\",你必须识别参数名并提取对应的值。\n\n"); sb.append("【可提取的参数列表】\n"); @@ -37,7 +39,6 @@ public class SystemPromptGenerator { if (count++ >= 3) break; sb.append("- 用户输入 \"").append(paramRule.getSParam()).append(": {值}\" → 提取 ").append(paramRule.getSParam()).append("\n"); } - if(ObjectUtil.isNotEmpty(session.getArgs())){ sb.append("【已提取参数】\n"); sb.append(JSON.toJSONString(session.getArgs(), JSONWriter.Feature.PrettyFormat)); diff --git a/src/main/java/com/xly/entity/ToolMeta.java b/src/main/java/com/xly/entity/ToolMeta.java index c123ac5..c19a46c 100644 --- a/src/main/java/com/xly/entity/ToolMeta.java +++ b/src/main/java/com/xly/entity/ToolMeta.java @@ -52,6 +52,7 @@ public class ToolMeta { private String sVectorjson; private String sVectorfiledAll; private String sVectorfiledShow; + private String sKnowledgeBase; private String sTsMemo; private Boolean sQue = false; private Boolean bQuo = false; diff --git a/src/main/java/com/xly/mapper/ToolMetaMapper.java b/src/main/java/com/xly/mapper/ToolMetaMapper.java index 9bebb69..0d569e2 100644 --- a/src/main/java/com/xly/mapper/ToolMetaMapper.java +++ b/src/main/java/com/xly/mapper/ToolMetaMapper.java @@ -13,6 +13,6 @@ import java.util.List; public interface ToolMetaMapper { // XML配置方式 - @Select("SELECT A.* FROM ai_tool AS A order by iOrder") + @Select("SELECT A.*,fun_ai_getsKnowledgeBase(A.sId) AS sKnowledgeBase FROM ai_tool AS A order by iOrder") List findAll(); } \ No newline at end of file diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java index b8b699c..ed2525b 100644 --- a/src/main/java/com/xly/service/XlyErpService.java +++ b/src/main/java/com/xly/service/XlyErpService.java @@ -355,7 +355,8 @@ public class XlyErpService { && ObjectUtil.isNotEmpty(session.getCurrentTool().getSInputTabelName()) && ObjectUtil.isNotEmpty(session.getCurrentTool().getSStructureMemo())) ){ - String sSystemPrompt = AgentSystemPrompt.sSystemPrompt; + String sSystemPrompt = session.getCurrentTool().getBQuo()?AgentSystemPrompt.sSystemPromptQuo:AgentSystemPrompt.sSystemPrompt; + sSystemPrompt = StrUtil.format(sSystemPrompt,session.getCurrentTool().getSKnowledgeBase()); //如果客户输入了确认/生成 切换引导语言 if(ObjectUtil.isNotEmpty(session.getSSystemPrompt()) && isConfirmed){ sSystemPrompt = session.getSSystemPrompt(); @@ -365,7 +366,7 @@ public class XlyErpService { } //报价每次定义参数 if(!isConfirmed && ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentTool()) && session.getCurrentTool().getBQuo()){ - sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session); + sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session,session.getCurrentTool().getSKnowledgeBase()); aiAgent = createConfirmeAgent(session); } Result rs = aiAgent.chat(userId, input,sSystemPrompt); diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java index 15cf99b..8b4de21 100644 --- a/src/main/java/com/xly/tool/DynamicToolProvider.java +++ b/src/main/java/com/xly/tool/DynamicToolProvider.java @@ -590,7 +590,9 @@ public class DynamicToolProvider implements ToolProvider { } } String sendUrl = baseUrl + UrlErpConstant.getBusinessDataByFormcustomId; - sendUrl = StrUtil.format(sendUrl,sAIshowfieldShowAll.get(0).get("sFormcustomId"),sSrcFormId); + if(ObjectUtil.isNotEmpty(sAIshowfieldShowAll) && ObjectUtil.isNotEmpty(sAIshowfieldShowAll.get(0))){ + sendUrl = StrUtil.format(sendUrl,sAIshowfieldShowAll.get(0).get("sFormcustomId"),sSrcFormId); + } meta.setSendUrl(sendUrl); paramRuleList = paramRuleListNew; paramRuleListCheck = paramRuleListNew; -- libgit2 0.22.2