|
|
|
@ -11,6 +11,8 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 条件判断handler
|
|
|
|
@ -32,18 +34,18 @@ public class ConditionJudgeHandler {
|
|
|
|
|
List<MessageDTO> messageList = new ArrayList<>();
|
|
|
|
|
String template = "当我问用户:{},用户给我的回答是:[{}],\n" +
|
|
|
|
|
"基于用户的回答,请依次判断以下列表:[{}]中的哪些项满足用户的回答?\n" +
|
|
|
|
|
"请从给定列表中找出所有满足的项.以jsonArray格式输出且只返回jsonArray.jsonArray的格式示例为:```json[\"满足的条件1\",\"满足的条件2\"]```.如果列表中项全部不满足,则返回:未找到";
|
|
|
|
|
"请从给定列表中找出所有满足的项,并以json数组的格式返回,格式示例[\"xxx\",\"xxx\"]。直接说答案,不需要推理过程。如果列表中项全部不满足,则返回:未找到";
|
|
|
|
|
|
|
|
|
|
String judgeAsk = StrUtil.format(template, question, userAnswer, CollUtil.join(candidateAnswerList, ";"));
|
|
|
|
|
log.info("conditionJudge问题是:{}", judgeAsk);
|
|
|
|
|
messageList.add(new MessageDTO("user", judgeAsk));
|
|
|
|
|
String judgeResult = AiUtil.chatByMessage(messageList);
|
|
|
|
|
log.info("conditionJudge判断结果是:{}", judgeResult);
|
|
|
|
|
if (judgeResult.contains("```json")) {
|
|
|
|
|
judgeResult = StrUtil.subBetween(judgeResult, "```json", "```");
|
|
|
|
|
judgeResult = StrUtil.removePrefix(judgeResult, "```json");
|
|
|
|
|
judgeResult = StrUtil.removeSuffix(judgeResult, "```");
|
|
|
|
|
String[] strings = StrUtil.subBetweenAll(judgeResult, "[", "]");
|
|
|
|
|
if (strings.length == 0) {
|
|
|
|
|
return new HashSet<>();
|
|
|
|
|
}
|
|
|
|
|
HashSet<String> result = new HashSet<>(JSONUtil.toList(judgeResult, String.class));
|
|
|
|
|
HashSet<String> result = new HashSet<>(JSONUtil.toList("[" + strings[0] + "]", String.class));
|
|
|
|
|
if (result.size() == 1 && result.contains("未找到")) {
|
|
|
|
|
return new HashSet<>();
|
|
|
|
|
}
|
|
|
|
|