main
liu 1 year ago
parent 3245906812
commit 0c6a29ed55

@ -19,28 +19,6 @@ import java.util.*;
@Component
public class ConditionJudgeHandler {
/**
* ,
*
* @param question
* @param candidateAnswerList
* @param userAnswer
* @return
*/
public Set<String> conditionJudge(String question, Collection<String> candidateAnswerList, String userAnswer) {
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("system", "现在要做社会保障业务分类,我现在给你一个问题,给你候选答案列表,请你根据用户的实际回答,从候选答案列表中给我选择对应的候选答案.除了候选答案,什么其他的都不要说."));
messageList.add(new MessageDTO("assistant", "好的"));
messageList.add(new MessageDTO("user", StrUtil.format("问题:[{}]", question)));
messageList.add(new MessageDTO("assistant", "继续"));
messageList.add(new MessageDTO("user", StrUtil.format("候选答案列表:[{};未找到匹配答案]", StrUtil.join(";", candidateAnswerList))));
messageList.add(new MessageDTO("assistant", "继续"));
messageList.add(new MessageDTO("user", StrUtil.format("用户答案:[{}],现在请给我所有匹配的候选答案.如果有多个候选答案,用;号分割.现在你可以回答了.", userAnswer)));
log.info("conditionJudge判断候选答案:{}", JSONUtil.toJsonStr(messageList));
String judgeResult = AiUtil.chatByMessage(messageList);
log.info("conditionJudge判断结果是:{}", judgeResult);
return new HashSet<>(Arrays.asList(judgeResult.split(";")));
}
/**
* ,
@ -72,31 +50,5 @@ public class ConditionJudgeHandler {
return result;
}
/**
*
*
* @param question
* @param candidateAnswerList
* @param userAnswer
*/
public Set<String> newConditionJudge(String question, Collection<String> candidateAnswerList, String userAnswer, String conditionType) {
Set<String> judgeResultSet = new HashSet<>();
String template = "当我问用户:{},用户给我的回答是:[{}]\n" +
"基于用户的回答,判断一下用户{}是否满足[{}]满足就只回复true反之只回复false";
for (String candidateAnswer : candidateAnswerList) {
String judgeResult = StrUtil.format(template, question, userAnswer, conditionType, candidateAnswer);
String answer = AiUtil.chat(judgeResult);
log.info("conditionJudge判断条件:\n{},\n结果是:{}", judgeResult, answer);
try {
if (BooleanUtil.toBoolean(answer)) {
judgeResultSet.add(candidateAnswer);
}
} catch (Exception e) {
log.info("{}非布尔类型,不统计在内", answer);
}
}
return judgeResultSet;
}
}

@ -18,50 +18,6 @@ import java.util.*;
@Component
public class ItemExtractHandler {
/**
*
*
* @param question
* @return
*/
@Deprecated
public String itemExtract(String question) {
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("system", "假设你是一个命名实体识别模型且精通社保实体识别." +
"现在我会给你一个句子,请根据我的要求识别出句子中的实体数据在社保业务中属于哪一类业务事项,并给我事项名称,如果未找到事项,就回复:未找到;其他什么都不要说!"));
messageList.add(new MessageDTO("assistant", "好的"));
messageList.add(new MessageDTO("user", "句子是:" + question + ";请识别这句话中的社保业务事项.除了识别到的业务事项,其他什么都不要说"));
String item = AiUtil.chatByMessage(messageList);
if (StrUtil.equals("未找到", item)) {
throw new ItemExtractException("未从问题中找到事项");
}
return item;
}
/**
* ,
*
* @param question
* @return
*/
@Deprecated
public List<String> itemExtractByPossibleItem(String question, List<String> possible) {
String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。请确保只识别并标注一种可能性最高的社保业务事项。" +
"事项名称列表:\n" +
"{}" +
"句子是:{}";
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("user", StrUtil.format(template, CollUtil.join(possible, ";"), question)));
log.info("itemExtractByPossibleItem查询语句为:{}", JSONUtil.toJsonStr(messageList));
String item = AiUtil.chatByMessage(messageList);
log.info("itemExtractByPossibleItem结果为:{}", item);
if (StrUtil.equals("未找到", item)) {
throw new ItemExtractException("未从问题中找到事项");
}
return Collections.singletonList(item);
}
/**
*
*
@ -70,7 +26,7 @@ public class ItemExtractHandler {
*/
public List<String> itemExtractByPossibleItemWithExample(String question, List<String> possible) {
String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。" +
"请确保只识别并标注一种可能性最高的社保业务事项。\n" +
"请确保只识别并标注一种可能性最高的社保业务事项。不要识别出事项列表之外的事项。\n" +
"事项列表:{}\n" +
"我现在有一些示例,可供你学习。\n" +
"输入:企业职工多少岁可以退休?输出:企业职工退休\n" +
@ -101,37 +57,6 @@ public class ItemExtractHandler {
}
@Deprecated
public String itemExtractBusiness(String question) {
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("user", "我现在是要进行实体抽取任务,并且精通社保业务,现在需要抽取[业务]这个实体类型的内容。\n" +
"\n" +
"下面是一些示例:\n" +
"\n" +
"输入:女性工人一般多少岁可以退休?\n" +
"输出:{\"business\":\"退休\"}\n" +
"输入:办理退休一般需要什么条件?\n" +
"输出:{\"business\":\"退休\"}\n" +
"输入:身份证挂失怎么办?\n" +
"输出:{\"business\":\"身份证挂失\"}\n" +
"输入:退休金没发,是什么原因?\n" +
"输出:{\"business\":\"退休金发放\"}\n" +
"\n" +
"现在有一句话,请进行抽取。\n" +
"输入:" + question + "\n" +
"输出:"));
log.info("itemExtractBusiness查询语句为:{}", JSONUtil.toJsonStr(messageList));
String item = AiUtil.chatByMessage(messageList);
log.info("itemExtractBusiness查询结果为:{}", item);
boolean typeJSON = JSONUtil.isTypeJSON(item);
if (typeJSON) {
String business = JSONUtil.parseObj(item).getStr("business");
if (StrUtil.isNotBlank(business)) {
return business;
}
}
throw new ItemExtractException("未从问题中找到业务事项");
}
}

@ -1,10 +1,14 @@
package com.supervision.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SingleTalkReqVO {

@ -1,47 +0,0 @@
package com.supervision;
import cn.hutool.core.collection.CollUtil;
import com.supervision.handler.gpt.ConditionJudgeHandler;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.ArrayList;
import java.util.Set;
@Slf4j
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringJUnit4ClassRunner.class)
public class GlmTest {
@Autowired
private ConditionJudgeHandler conditionJudgeHandler;
@Test
public void test() {
ArrayList<String> strings = CollUtil.newArrayList("深圳户口", "广东省其他地区", "港澳台及外籍地区", "省外户口", "非深圳户口");
Set<String> strings1 = conditionJudgeHandler.newConditionJudge("你的户口所在地是哪里?", strings, "我是汕头人", "户籍所在地");
log.info("答案是: {}", CollUtil.join(strings1, ";"));
}
@Test
public void test1() {
ArrayList<String> strings = CollUtil.newArrayList("深圳户口", "广东省其他地区", "港澳台及外籍地区", "省外户口", "非深圳户口");
Set<String> strings1 = conditionJudgeHandler.conditionJudge("你的户口所在地是哪里?", strings, "我是汕头人");
log.info("答案是: {}", CollUtil.join(strings1, ";"));
}
@Test
public void test2() {
ArrayList<String> strings = CollUtil.newArrayList("大于60岁", "65岁以上", "年龄大于50周岁", "50岁以上");
Set<String> strings1 = conditionJudgeHandler.conditionJudgeAll("你的年龄多少岁?", strings, "我今天中午吃的酸菜鱼");
log.info("答案是: {}", CollUtil.join(strings1, ";"));
}
}
Loading…
Cancel
Save