Commit 262f1b7cc048615434c5ebf28b35d538a7ce4751

Authored by qianbao
1 parent e715e1dd

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

src/main/java/com/xly/agent/AgentSystemPrompt.java
@@ -20,4 +20,12 @@ public class AgentSystemPrompt { @@ -20,4 +20,12 @@ public class AgentSystemPrompt {
20 "2. 严禁与用户进行任何对话!严禁输出“您好”、“请提供”、“需要补充”等任何纯文本回复!\n" + 20 "2. 严禁与用户进行任何对话!严禁输出“您好”、“请提供”、“需要补充”等任何纯文本回复!\n" +
21 "3. 无论用户输入多么简短(例如只输入了公司名),或者参数缺失多么严重,你都必须直接调用工具,将缺失的字段留空或填0。\n" + 21 "3. 无论用户输入多么简短(例如只输入了公司名),或者参数缺失多么严重,你都必须直接调用工具,将缺失的字段留空或填0。\n" +
22 "4. 不要试图去引导用户,引导用户是你的后端程序要做的事,你只需要负责把提取到的参数传出去。"; 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 \ No newline at end of file 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,16 +12,18 @@ import java.util.stream.Collectors;
12 12
13 public class SystemPromptGenerator { 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 StringBuilder sb = new StringBuilder(); 16 StringBuilder sb = new StringBuilder();
17 -  
18 sb.append("你是一个无情的参数提取器,不是聊天助手。\n\n"); 17 sb.append("你是一个无情的参数提取器,不是聊天助手。\n\n");
19 sb.append("【核心任务】\n"); 18 sb.append("【核心任务】\n");
20 sb.append("从用户输入中提取参数,并立即调用工具 ").append(toolName).append("。\n\n"); 19 sb.append("从用户输入中提取参数,并立即调用工具 ").append(toolName).append("。\n\n");
21 sb.append("【绝对指令】\n"); 20 sb.append("【绝对指令】\n");
22 sb.append("1. 严禁与用户对话,严禁输出任何纯文本回复。\n"); 21 sb.append("1. 严禁与用户对话,严禁输出任何纯文本回复。\n");
23 sb.append("2. 无论参数缺失多么严重,都必须直接调用工具,缺失字段填空字符串或0。\n"); 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 sb.append("【参数提取规则】\n"); 27 sb.append("【参数提取规则】\n");
26 sb.append("用户输入格式为 \"参数名: 值\" 或 \"参数名 值\",你必须识别参数名并提取对应的值。\n\n"); 28 sb.append("用户输入格式为 \"参数名: 值\" 或 \"参数名 值\",你必须识别参数名并提取对应的值。\n\n");
27 sb.append("【可提取的参数列表】\n"); 29 sb.append("【可提取的参数列表】\n");
@@ -37,7 +39,6 @@ public class SystemPromptGenerator { @@ -37,7 +39,6 @@ public class SystemPromptGenerator {
37 if (count++ >= 3) break; 39 if (count++ >= 3) break;
38 sb.append("- 用户输入 \"").append(paramRule.getSParam()).append(": {值}\" → 提取 ").append(paramRule.getSParam()).append("\n"); 40 sb.append("- 用户输入 \"").append(paramRule.getSParam()).append(": {值}\" → 提取 ").append(paramRule.getSParam()).append("\n");
39 } 41 }
40 -  
41 if(ObjectUtil.isNotEmpty(session.getArgs())){ 42 if(ObjectUtil.isNotEmpty(session.getArgs())){
42 sb.append("【已提取参数】\n"); 43 sb.append("【已提取参数】\n");
43 sb.append(JSON.toJSONString(session.getArgs(), JSONWriter.Feature.PrettyFormat)); 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,6 +52,7 @@ public class ToolMeta {
52 private String sVectorjson; 52 private String sVectorjson;
53 private String sVectorfiledAll; 53 private String sVectorfiledAll;
54 private String sVectorfiledShow; 54 private String sVectorfiledShow;
  55 + private String sKnowledgeBase;
55 private String sTsMemo; 56 private String sTsMemo;
56 private Boolean sQue = false; 57 private Boolean sQue = false;
57 private Boolean bQuo = false; 58 private Boolean bQuo = false;
src/main/java/com/xly/mapper/ToolMetaMapper.java
@@ -13,6 +13,6 @@ import java.util.List; @@ -13,6 +13,6 @@ import java.util.List;
13 public interface ToolMetaMapper { 13 public interface ToolMetaMapper {
14 14
15 // XML配置方式 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 List<ToolMeta> findAll(); 17 List<ToolMeta> findAll();
18 } 18 }
19 \ No newline at end of file 19 \ No newline at end of file
src/main/java/com/xly/service/XlyErpService.java
@@ -355,7 +355,8 @@ public class XlyErpService { @@ -355,7 +355,8 @@ public class XlyErpService {
355 && ObjectUtil.isNotEmpty(session.getCurrentTool().getSInputTabelName()) 355 && ObjectUtil.isNotEmpty(session.getCurrentTool().getSInputTabelName())
356 && ObjectUtil.isNotEmpty(session.getCurrentTool().getSStructureMemo())) 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 if(ObjectUtil.isNotEmpty(session.getSSystemPrompt()) && isConfirmed){ 361 if(ObjectUtil.isNotEmpty(session.getSSystemPrompt()) && isConfirmed){
361 sSystemPrompt = session.getSSystemPrompt(); 362 sSystemPrompt = session.getSSystemPrompt();
@@ -365,7 +366,7 @@ public class XlyErpService { @@ -365,7 +366,7 @@ public class XlyErpService {
365 } 366 }
366 //报价每次定义参数 367 //报价每次定义参数
367 if(!isConfirmed && ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getCurrentTool()) && session.getCurrentTool().getBQuo()){ 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 aiAgent = createConfirmeAgent(session); 370 aiAgent = createConfirmeAgent(session);
370 } 371 }
371 Result<String> rs = aiAgent.chat(userId, input,sSystemPrompt); 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,7 +590,9 @@ public class DynamicToolProvider implements ToolProvider {
590 } 590 }
591 } 591 }
592 String sendUrl = baseUrl + UrlErpConstant.getBusinessDataByFormcustomId; 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 meta.setSendUrl(sendUrl); 596 meta.setSendUrl(sendUrl);
595 paramRuleList = paramRuleListNew; 597 paramRuleList = paramRuleListNew;
596 paramRuleListCheck = paramRuleListNew; 598 paramRuleListCheck = paramRuleListNew;