Commit 262f1b7cc048615434c5ebf28b35d538a7ce4751

Authored by qianbao
1 parent e715e1dd

添加未清选择 改成动态引导语

src/main/java/com/xly/agent/AgentSystemPrompt.java
... ... @@ -20,4 +20,12 @@ public class AgentSystemPrompt {
20 20 "2. 严禁与用户进行任何对话!严禁输出“您好”、“请提供”、“需要补充”等任何纯文本回复!\n" +
21 21 "3. 无论用户输入多么简短(例如只输入了公司名),或者参数缺失多么严重,你都必须直接调用工具,将缺失的字段留空或填0。\n" +
22 22 "4. 不要试图去引导用户,引导用户是你的后端程序要做的事,你只需要负责把提取到的参数传出去。";
  23 +
  24 + public static final String sSystemPromptQuo = "你是参数提取器,不是聊天助手。\n" +
  25 + "【绝对指令】\n" +
  26 + "1. 你的唯一任务是提取用户输入中的参数,并立即调用工具。\n" +
  27 + "2. 严禁与用户进行任何对话!严禁输出“您好”、“请提供”、“需要补充”等任何纯文本回复!\n" +
  28 + "3. 无论用户输入多么简短(例如只输入了公司名),或者参数缺失多么严重,你都必须直接调用工具,将缺失的字段留空或填0。\n" +
  29 + "4. 印刷行业知识库:提取参数前,请先理解行业知识库,再进行方法匹配和参数提取,知识库内容如下:" +
  30 + " - {}";
23 31 }
24 32 \ No newline at end of file
... ...
src/main/java/com/xly/agent/SystemPromptGenerator.java
... ... @@ -12,16 +12,18 @@ import java.util.stream.Collectors;
12 12  
13 13 public class SystemPromptGenerator {
14 14  
15   - public static String generate(String toolName, UserSceneSession session) {
  15 + public static String generate(String toolName, UserSceneSession session,String sKnowledgeBase) {
16 16 StringBuilder sb = new StringBuilder();
17   -
18 17 sb.append("你是一个无情的参数提取器,不是聊天助手。\n\n");
19 18 sb.append("【核心任务】\n");
20 19 sb.append("从用户输入中提取参数,并立即调用工具 ").append(toolName).append("。\n\n");
21 20 sb.append("【绝对指令】\n");
22 21 sb.append("1. 严禁与用户对话,严禁输出任何纯文本回复。\n");
23 22 sb.append("2. 无论参数缺失多么严重,都必须直接调用工具,缺失字段填空字符串或0。\n");
24   - sb.append("3. 不要引导用户,后端程序会处理引导逻辑。\n\n");
  23 + if(ObjectUtil.isNotEmpty(sKnowledgeBase)){
  24 + sb.append("3. 印刷行业知识库:提取参数前,请先理解行业知识库,再进行方法匹配和参数提取,知识库内容如下: \n");
  25 + sb.append(" - "+sKnowledgeBase);
  26 + }
25 27 sb.append("【参数提取规则】\n");
26 28 sb.append("用户输入格式为 \"参数名: 值\" 或 \"参数名 值\",你必须识别参数名并提取对应的值。\n\n");
27 29 sb.append("【可提取的参数列表】\n");
... ... @@ -37,7 +39,6 @@ public class SystemPromptGenerator {
37 39 if (count++ >= 3) break;
38 40 sb.append("- 用户输入 \"").append(paramRule.getSParam()).append(": {值}\" → 提取 ").append(paramRule.getSParam()).append("\n");
39 41 }
40   -
41 42 if(ObjectUtil.isNotEmpty(session.getArgs())){
42 43 sb.append("【已提取参数】\n");
43 44 sb.append(JSON.toJSONString(session.getArgs(), JSONWriter.Feature.PrettyFormat));
... ...
src/main/java/com/xly/entity/ToolMeta.java
... ... @@ -52,6 +52,7 @@ public class ToolMeta {
52 52 private String sVectorjson;
53 53 private String sVectorfiledAll;
54 54 private String sVectorfiledShow;
  55 + private String sKnowledgeBase;
55 56 private String sTsMemo;
56 57 private Boolean sQue = false;
57 58 private Boolean bQuo = false;
... ...
src/main/java/com/xly/mapper/ToolMetaMapper.java
... ... @@ -13,6 +13,6 @@ import java.util.List;
13 13 public interface ToolMetaMapper {
14 14  
15 15 // XML配置方式
16   - @Select("SELECT A.* FROM ai_tool AS A order by iOrder")
  16 + @Select("SELECT A.*,fun_ai_getsKnowledgeBase(A.sId) AS sKnowledgeBase FROM ai_tool AS A order by iOrder")
17 17 List<ToolMeta> findAll();
18 18 }
19 19 \ No newline at end of file
... ...
src/main/java/com/xly/service/XlyErpService.java
... ... @@ -355,7 +355,8 @@ public class XlyErpService {
355 355 && ObjectUtil.isNotEmpty(session.getCurrentTool().getSInputTabelName())
356 356 && ObjectUtil.isNotEmpty(session.getCurrentTool().getSStructureMemo()))
357 357 ){
358   - String sSystemPrompt = AgentSystemPrompt.sSystemPrompt;
  358 + String sSystemPrompt = session.getCurrentTool().getBQuo()?AgentSystemPrompt.sSystemPromptQuo:AgentSystemPrompt.sSystemPrompt;
  359 + sSystemPrompt = StrUtil.format(sSystemPrompt,session.getCurrentTool().getSKnowledgeBase());
359 360 //如果客户输入了确认/生成 切换引导语言
360 361 if(ObjectUtil.isNotEmpty(session.getSSystemPrompt()) && isConfirmed){
361 362 sSystemPrompt = session.getSSystemPrompt();
... ... @@ -365,7 +366,7 @@ public class XlyErpService {
365 366 }
366 367 //报价每次定义参数
367 368 if(!isConfirmed && ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentTool()) && session.getCurrentTool().getBQuo()){
368   - sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session);
  369 + sSystemPrompt = SystemPromptGenerator.generate(session.getCurrentTool().getSMethodName(),session,session.getCurrentTool().getSKnowledgeBase());
369 370 aiAgent = createConfirmeAgent(session);
370 371 }
371 372 Result<String> rs = aiAgent.chat(userId, input,sSystemPrompt);
... ...
src/main/java/com/xly/tool/DynamicToolProvider.java
... ... @@ -590,7 +590,9 @@ public class DynamicToolProvider implements ToolProvider {
590 590 }
591 591 }
592 592 String sendUrl = baseUrl + UrlErpConstant.getBusinessDataByFormcustomId;
593   - sendUrl = StrUtil.format(sendUrl,sAIshowfieldShowAll.get(0).get("sFormcustomId"),sSrcFormId);
  593 + if(ObjectUtil.isNotEmpty(sAIshowfieldShowAll) && ObjectUtil.isNotEmpty(sAIshowfieldShowAll.get(0))){
  594 + sendUrl = StrUtil.format(sendUrl,sAIshowfieldShowAll.get(0).get("sFormcustomId"),sSrcFormId);
  595 + }
594 596 meta.setSendUrl(sendUrl);
595 597 paramRuleList = paramRuleListNew;
596 598 paramRuleListCheck = paramRuleListNew;
... ...