作者 钟来

更新算命逻辑

... ... @@ -4,6 +4,7 @@ package com.zhonglai.laikun.fortune.telling.comm;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.laikun.fortune.telling.dto.ChatRoomMessages;
import com.zhonglai.laikun.fortune.telling.dto.CompletionResult3_5;
import com.zhonglai.laikun.fortune.telling.dto.ManifestationDivinationInfo;
... ... @@ -18,34 +19,24 @@ import java.util.*;
public class YiJiFortuneTellingService {
private static Logger logger = LoggerFactory.getLogger(YiJiFortuneTellingService.class);
private static String clues = "你是一个易经占卜师,主要职责是利用易经这一古老的中国占卜工具,为您提供富有洞察力的占卜和建议。请严格遵守以下步骤: \n" +
"1、现在有数据\n" +
"变爻爻辞:九三:臀无肤,其行次且。厉,无大咎。\n" +
"用户的提问:今天出门可以先吃西瓜吗?\n" +
" 2、结合用户的提问,对卦象进行全面分析,并提供卦象数据(名称、判断、象征)的综合总结。\n" +
" 3、根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,结合用户的问题,将占卜结果归类为凶、中、吉、大吉其中之一。\n" +
"请严格执行以下输出步骤和内容,不要出现其他的内容:\n" +
"1.标题为“爻辞: ”,输出爻辞,然后换行。\n" +
"2.标题为“结论: ”,输出用户提问的占卜结果(例如:凶; 中; 吉; 大吉);注意:如果用户的问题是多个选项中择优问题,则每个选项的名称和这个选项的占卜结果都要分别换行输出(例如:吃火锅,吉,吃烧烤,中;);然后换行。\n" +
"3.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。\n" +
"4.接着,提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。\n" +
"5.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。\n" +
"你必须严格按照以上规则输出内容,按照步骤1、2、3、4、5的展示格式。\n" +
"以上是规则,后续的对话就是用户的提问内容,请按以上规则执行。";
private static String clues = "你是一个易经占卜师,主要职责是利用易经这一古老的中国占卜工具,为您提供富有洞察力的占卜和建议。请严格遵守以下步骤: 1、用户会给你一个问题和一个变爻爻辞。2、这个变爻爻辞结合用户的提问,对卦象进行全面分析,并提供卦象数据(名称、判断、象征)的综合总结。 3、根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,结合用户的问题,将占卜结果归类为凶、中、吉、大吉其中之一。 请严格执行以下输出步骤和内容,不要出现其他的内容: 1.标题为“爻辞: ”,输出爻辞,然后换行。 2.标题为“结论: ”,输出用户提问的占卜结果(例如:凶; 中; 吉; 大吉);注意:如果用户的问题是多个选项中择优问题,则每个选项的名称和这个选项的占卜结果都要分别换行输出(例如:吃火锅,吉,吃烧烤,中;);然后换行。 3.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。 4.接着,提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。 5.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。 你必须严格按照以上规则输出内容,按照步骤1、2、3、4、5的展示格式。 以上是规则,后续的对话就是用户的提问内容和变爻爻辞,请按以上规则执行!";
private static String apiKey = "Bearer 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";
public static String calculation(String question,String yaochi)
private static String questionMode = "问题:{} 变爻爻辞:{}";
public static String calculation(String question,String yaochi, String clues )
{
CompletionResult3_5 completionResult35 = enquireAi(question,yaochi);
CompletionResult3_5 completionResult35 = enquireAi(question,yaochi,clues);
return completionResult35.getChoices().get(0).getMessage().getContent();
}
public static CompletionResult3_5 enquireAi(String question,String xiyao)
public static CompletionResult3_5 enquireAi(String question,String xiyao, String clues )
{
List<ChatRoomMessages> messageList = new ArrayList<>();
messageList.add(new ChatRoomMessages("user",clues));
messageList.add(new ChatRoomMessages("user",question));
messageList.add(new ChatRoomMessages("user",StringUtils.format(questionMode,question,xiyao)));
CompletionResult3_5 completionResult35 = sendGptAi(messageList,false);
return completionResult35;
}
... ... @@ -111,7 +102,4 @@ public class YiJiFortuneTellingService {
return new Integer[]{RandomUtil.randomInt(1, 999),RandomUtil.randomInt(1, 999),RandomUtil.randomInt(1, 999)};
}
public static void main(String[] args) {
System.out.println(enquireAi("今天穿高跟还是平底",""));
}
}
... ...
... ... @@ -18,6 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@Api(tags = "算命")
@RestController
@RequestMapping("/fortuneTelling")
... ... @@ -47,7 +50,39 @@ public class FortuneTellingController extends BaseController {
}
String yaochi = YiJiFortuneTellingService.fortuneTelling(nums[0],nums[1],nums[2]);
String str = YiJiFortuneTellingService.calculation(question,yaochi);
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");
String clues = "你是一个易经占卜师,主要职责是利用易经这一古老的中国占卜工具,为用户提供富有洞察力的占卜和建议。请严格遵守以下步骤: \n" +
"步骤一:用户会给你一个问题和一个变爻爻辞。\n" +
"步骤二:请将用户给的变爻爻辞结合用户的提问问题,对卦象进行全面分析,并提供卦象数据(名称、判断、象征)的综合总结。 \n" +
"步骤三:判断用户提出的问题中,是否具有多个选择项。当问题里有多个选择项时:根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,必须给每个选择项都占卜一个结果(凶、中、吉、大吉其中之一),例如:(例如:吃火锅,吉,吃烧烤,中);当问题里没有多个选择项时:根据变爻爻辞的中文内容,严格按照匹配的中文关键词和内容判断规则,将这个问题的占卜结果归类为凶、中、吉、大吉其中之一。\n" +
"步骤四:按照以上规则,请严格执行以下输出步骤和内容格式,不要出现其他的内容!\n" +
"当问题中有多个选择项时,输出格式如下:\n" +
"1.标题为“爻辞: ”,输出爻辞,然后换行。\n" +
"2.标题为“结论: ”, 然后换行。\n" +
"3.选择项的名称,选择项的占卜结果(每个选择项都必须分包单独一行输出)\n" +
"示例:\n" +
"吃火锅,吉\n" +
"吃烧烤,中\n" +
"吃串串,中\n" +
"4.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。\n" +
"5.提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。\n" +
"6.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。 \n" +
"\n" +
"当问题里没有多个选择项时:,输出格式如下:\n" +
"1.标题为“爻辞: ”,输出爻辞,然后换行。\n" +
"2.标题为“结论: ”, 然后换行。\n" +
"3.输出用户提问的占卜结果(例如:凶; 中; 吉; 大吉)\n" +
"4.根据变爻的文本和占卜结果,提炼出对用户问题的关键占卜结论,并进行详细解释。\n" +
"5.提供变爻内容的深入、全面的专家级解释,分析并回答用户的问题。\n" +
"6.相关于用户问题的其他方面分析:针对财务、生活、爱情、健康、工作、事业、未来等相关领域(最多三个),根据变爻数字和用户问题提供详细分析和建议。 \n" +
"你必须严格按照以上规则输出内容,按照步骤1、2、3、4、5、6的展示格式。 以上是规则,后续的对话就是用户的提问内容和变爻爻辞,请按以上规则执行!";
if(null != list && list.size() == 1)
{
clues = (String) list.get(0).get("remark");
}
String str = YiJiFortuneTellingService.calculation(question,yaochi,clues);
FortuneTellingLog fortuneTellingLog = new FortuneTellingLog();
fortuneTellingLog.setQuestion(question);
... ... @@ -66,4 +101,34 @@ public class FortuneTellingController extends BaseController {
{
return AjaxResult.success(YiJiFortuneTellingService.randomNums());
}
@ApiOperation("今日运势")
@Transactional
@RequestMapping(value = "/todaysFortune",method = RequestMethod.GET)
public AjaxResult todaysFortune()
{
Integer[] nums = YiJiFortuneTellingService.randomNums();
String question = "我今天运势怎样";
return meiHuaYiShu(question,nums);
}
@ApiOperation("求签")
@Transactional
@RequestMapping(value = "/seek",method = RequestMethod.GET)
public AjaxResult seek ()
{
Integer[] nums = YiJiFortuneTellingService.randomNums();
String question = "我的愿望是否成真";
return meiHuaYiShu(question,nums);
}
@ApiOperation("解惑")
@Transactional
@RequestMapping(value = "/resolveDoubts",method = RequestMethod.GET)
public AjaxResult resolveDoubts (String question)
{
Integer[] nums = YiJiFortuneTellingService.randomNums();
return meiHuaYiShu(question,nums);
}
}
... ...