作者 钟来

更新算命逻辑

@@ -4,6 +4,7 @@ package com.zhonglai.laikun.fortune.telling.comm; @@ -4,6 +4,7 @@ package com.zhonglai.laikun.fortune.telling.comm;
4 import cn.hutool.core.util.RandomUtil; 4 import cn.hutool.core.util.RandomUtil;
5 import cn.hutool.http.HttpRequest; 5 import cn.hutool.http.HttpRequest;
6 import com.alibaba.fastjson.JSONObject; 6 import com.alibaba.fastjson.JSONObject;
  7 +import com.ruoyi.common.utils.StringUtils;
7 import com.zhonglai.laikun.fortune.telling.dto.ChatRoomMessages; 8 import com.zhonglai.laikun.fortune.telling.dto.ChatRoomMessages;
8 import com.zhonglai.laikun.fortune.telling.dto.CompletionResult3_5; 9 import com.zhonglai.laikun.fortune.telling.dto.CompletionResult3_5;
9 import com.zhonglai.laikun.fortune.telling.dto.ManifestationDivinationInfo; 10 import com.zhonglai.laikun.fortune.telling.dto.ManifestationDivinationInfo;
@@ -18,34 +19,24 @@ import java.util.*; @@ -18,34 +19,24 @@ import java.util.*;
18 public class YiJiFortuneTellingService { 19 public class YiJiFortuneTellingService {
19 private static Logger logger = LoggerFactory.getLogger(YiJiFortuneTellingService.class); 20 private static Logger logger = LoggerFactory.getLogger(YiJiFortuneTellingService.class);
20 21
21 - private static String clues = "你是一个易经占卜师,主要职责是利用易经这一古老的中国占卜工具,为您提供富有洞察力的占卜和建议。请严格遵守以下步骤: \n" +  
22 - "1、现在有数据\n" +  
23 - "变爻爻辞:九三:臀无肤,其行次且。厉,无大咎。\n" +  
24 - "用户的提问:今天出门可以先吃西瓜吗?\n" +  
25 - " 2、结合用户的提问,对卦象进行全面分析,并提供卦象数据(名称、判断、象征)的综合总结。\n" +  
26 - " 3、根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,结合用户的问题,将占卜结果归类为凶、中、吉、大吉其中之一。\n" +  
27 - "请严格执行以下输出步骤和内容,不要出现其他的内容:\n" +  
28 - "1.标题为“爻辞: ”,输出爻辞,然后换行。\n" +  
29 - "2.标题为“结论: ”,输出用户提问的占卜结果(例如:凶; 中; 吉; 大吉);注意:如果用户的问题是多个选项中择优问题,则每个选项的名称和这个选项的占卜结果都要分别换行输出(例如:吃火锅,吉,吃烧烤,中;);然后换行。\n" +  
30 - "3.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。\n" +  
31 - "4.接着,提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。\n" +  
32 - "5.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。\n" +  
33 - "你必须严格按照以上规则输出内容,按照步骤1、2、3、4、5的展示格式。\n" +  
34 - "以上是规则,后续的对话就是用户的提问内容,请按以上规则执行。"; 22 + private static String clues = "你是一个易经占卜师,主要职责是利用易经这一古老的中国占卜工具,为您提供富有洞察力的占卜和建议。请严格遵守以下步骤: 1、用户会给你一个问题和一个变爻爻辞。2、这个变爻爻辞结合用户的提问,对卦象进行全面分析,并提供卦象数据(名称、判断、象征)的综合总结。 3、根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,结合用户的问题,将占卜结果归类为凶、中、吉、大吉其中之一。 请严格执行以下输出步骤和内容,不要出现其他的内容: 1.标题为“爻辞: ”,输出爻辞,然后换行。 2.标题为“结论: ”,输出用户提问的占卜结果(例如:凶; 中; 吉; 大吉);注意:如果用户的问题是多个选项中择优问题,则每个选项的名称和这个选项的占卜结果都要分别换行输出(例如:吃火锅,吉,吃烧烤,中;);然后换行。 3.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。 4.接着,提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。 5.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。 你必须严格按照以上规则输出内容,按照步骤1、2、3、4、5的展示格式。 以上是规则,后续的对话就是用户的提问内容和变爻爻辞,请按以上规则执行!";
35 23
36 private static String apiKey = "Bearer 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"; 24 private static String apiKey = "Bearer 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";
37 25
38 - public static String calculation(String question,String yaochi) 26 + private static String questionMode = "问题:{} 变爻爻辞:{}";
  27 +
  28 + public static String calculation(String question,String yaochi, String clues )
39 { 29 {
40 - CompletionResult3_5 completionResult35 = enquireAi(question,yaochi); 30 + CompletionResult3_5 completionResult35 = enquireAi(question,yaochi,clues);
41 return completionResult35.getChoices().get(0).getMessage().getContent(); 31 return completionResult35.getChoices().get(0).getMessage().getContent();
42 } 32 }
43 33
44 - public static CompletionResult3_5 enquireAi(String question,String xiyao) 34 + public static CompletionResult3_5 enquireAi(String question,String xiyao, String clues )
45 { 35 {
46 List<ChatRoomMessages> messageList = new ArrayList<>(); 36 List<ChatRoomMessages> messageList = new ArrayList<>();
47 messageList.add(new ChatRoomMessages("user",clues)); 37 messageList.add(new ChatRoomMessages("user",clues));
48 - messageList.add(new ChatRoomMessages("user",question)); 38 +
  39 + messageList.add(new ChatRoomMessages("user",StringUtils.format(questionMode,question,xiyao)));
49 CompletionResult3_5 completionResult35 = sendGptAi(messageList,false); 40 CompletionResult3_5 completionResult35 = sendGptAi(messageList,false);
50 return completionResult35; 41 return completionResult35;
51 } 42 }
@@ -111,7 +102,4 @@ public class YiJiFortuneTellingService { @@ -111,7 +102,4 @@ public class YiJiFortuneTellingService {
111 return new Integer[]{RandomUtil.randomInt(1, 999),RandomUtil.randomInt(1, 999),RandomUtil.randomInt(1, 999)}; 102 return new Integer[]{RandomUtil.randomInt(1, 999),RandomUtil.randomInt(1, 999),RandomUtil.randomInt(1, 999)};
112 } 103 }
113 104
114 - public static void main(String[] args) {  
115 - System.out.println(enquireAi("今天穿高跟还是平底",""));  
116 - }  
117 } 105 }
@@ -18,6 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping; @@ -18,6 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
18 import org.springframework.web.bind.annotation.RequestMethod; 18 import org.springframework.web.bind.annotation.RequestMethod;
19 import org.springframework.web.bind.annotation.RestController; 19 import org.springframework.web.bind.annotation.RestController;
20 20
  21 +import java.util.List;
  22 +import java.util.Map;
  23 +
21 @Api(tags = "算命") 24 @Api(tags = "算命")
22 @RestController 25 @RestController
23 @RequestMapping("/fortuneTelling") 26 @RequestMapping("/fortuneTelling")
@@ -47,7 +50,39 @@ public class FortuneTellingController extends BaseController { @@ -47,7 +50,39 @@ public class FortuneTellingController extends BaseController {
47 } 50 }
48 String yaochi = YiJiFortuneTellingService.fortuneTelling(nums[0],nums[1],nums[2]); 51 String yaochi = YiJiFortuneTellingService.fortuneTelling(nums[0],nums[1],nums[2]);
49 52
50 - String str = YiJiFortuneTellingService.calculation(question,yaochi); 53 + List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT remark FROM `lk-fortune-telling-sys`.`sys_dict_data` WHERE dict_type='sys_ai_config' AND dict_value=1");
  54 +
  55 + String clues = "你是一个易经占卜师,主要职责是利用易经这一古老的中国占卜工具,为用户提供富有洞察力的占卜和建议。请严格遵守以下步骤: \n" +
  56 + "步骤一:用户会给你一个问题和一个变爻爻辞。\n" +
  57 + "步骤二:请将用户给的变爻爻辞结合用户的提问问题,对卦象进行全面分析,并提供卦象数据(名称、判断、象征)的综合总结。 \n" +
  58 + "步骤三:判断用户提出的问题中,是否具有多个选择项。当问题里有多个选择项时:根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,必须给每个选择项都占卜一个结果(凶、中、吉、大吉其中之一),例如:(例如:吃火锅,吉,吃烧烤,中);当问题里没有多个选择项时:根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,将这个问题的占卜结果归类为凶、中、吉、大吉其中之一。\n" +
  59 + "步骤四:按照以上规则,请严格执行以下输出步骤和内容格式,不要出现其他的内容!\n" +
  60 + "当问题中有多个选择项时,输出格式如下:\n" +
  61 + "1.标题为“爻辞: ”,输出爻辞,然后换行。\n" +
  62 + "2.标题为“结论: ”, 然后换行。\n" +
  63 + "3.选择项的名称,选择项的占卜结果(每个选择项都必须分包单独一行输出)\n" +
  64 + "示例:\n" +
  65 + "吃火锅,吉\n" +
  66 + "吃烧烤,中\n" +
  67 + "吃串串,中\n" +
  68 + "4.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。\n" +
  69 + "5.提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。\n" +
  70 + "6.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。 \n" +
  71 + "\n" +
  72 + "当问题里没有多个选择项时:,输出格式如下:\n" +
  73 + "1.标题为“爻辞: ”,输出爻辞,然后换行。\n" +
  74 + "2.标题为“结论: ”, 然后换行。\n" +
  75 + "3.输出用户提问的占卜结果(例如:凶; 中; 吉; 大吉)\n" +
  76 + "4.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。\n" +
  77 + "5.提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。\n" +
  78 + "6.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。 \n" +
  79 + "你必须严格按照以上规则输出内容,按照步骤1、2、3、4、5、6的展示格式。 以上是规则,后续的对话就是用户的提问内容和变爻爻辞,请按以上规则执行!";
  80 +
  81 + if(null != list && list.size() == 1)
  82 + {
  83 + clues = (String) list.get(0).get("remark");
  84 + }
  85 + String str = YiJiFortuneTellingService.calculation(question,yaochi,clues);
51 86
52 FortuneTellingLog fortuneTellingLog = new FortuneTellingLog(); 87 FortuneTellingLog fortuneTellingLog = new FortuneTellingLog();
53 fortuneTellingLog.setQuestion(question); 88 fortuneTellingLog.setQuestion(question);
@@ -66,4 +101,34 @@ public class FortuneTellingController extends BaseController { @@ -66,4 +101,34 @@ public class FortuneTellingController extends BaseController {
66 { 101 {
67 return AjaxResult.success(YiJiFortuneTellingService.randomNums()); 102 return AjaxResult.success(YiJiFortuneTellingService.randomNums());
68 } 103 }
  104 +
  105 + @ApiOperation("今日运势")
  106 + @Transactional
  107 + @RequestMapping(value = "/todaysFortune",method = RequestMethod.GET)
  108 + public AjaxResult todaysFortune()
  109 + {
  110 + Integer[] nums = YiJiFortuneTellingService.randomNums();
  111 + String question = "我今天运势怎样";
  112 + return meiHuaYiShu(question,nums);
  113 + }
  114 +
  115 + @ApiOperation("求签")
  116 + @Transactional
  117 + @RequestMapping(value = "/seek",method = RequestMethod.GET)
  118 + public AjaxResult seek ()
  119 + {
  120 + Integer[] nums = YiJiFortuneTellingService.randomNums();
  121 + String question = "我的愿望是否成真";
  122 + return meiHuaYiShu(question,nums);
  123 + }
  124 +
  125 +
  126 + @ApiOperation("解惑")
  127 + @Transactional
  128 + @RequestMapping(value = "/resolveDoubts",method = RequestMethod.GET)
  129 + public AjaxResult resolveDoubts (String question)
  130 + {
  131 + Integer[] nums = YiJiFortuneTellingService.randomNums();
  132 + return meiHuaYiShu(question,nums);
  133 + }
69 } 134 }