From 0c6a29ed559d20f94cbb541f81be4d80ff60d646 Mon Sep 17 00:00:00 2001 From: liu Date: Tue, 23 Apr 2024 10:36:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/gpt/ConditionJudgeHandler.java | 48 ------------ .../handler/gpt/ItemExtractHandler.java | 77 +------------------ .../com/supervision/vo/SingleTalkReqVO.java | 4 + .../test/java/com/supervision/GlmTest.java | 47 ----------- 4 files changed, 5 insertions(+), 171 deletions(-) delete mode 100644 kbqa-graph/src/test/java/com/supervision/GlmTest.java diff --git a/kbqa-graph/src/main/java/com/supervision/handler/gpt/ConditionJudgeHandler.java b/kbqa-graph/src/main/java/com/supervision/handler/gpt/ConditionJudgeHandler.java index 14bac7f..02fe9db 100644 --- a/kbqa-graph/src/main/java/com/supervision/handler/gpt/ConditionJudgeHandler.java +++ b/kbqa-graph/src/main/java/com/supervision/handler/gpt/ConditionJudgeHandler.java @@ -19,28 +19,6 @@ import java.util.*; @Component public class ConditionJudgeHandler { - /** - * 效果有些一般,但是也能勉强去用 - * - * @param question - * @param candidateAnswerList - * @param userAnswer - * @return - */ - public Set conditionJudge(String question, Collection candidateAnswerList, String userAnswer) { - List 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 newConditionJudge(String question, Collection candidateAnswerList, String userAnswer, String conditionType) { - Set 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; - } } diff --git a/kbqa-graph/src/main/java/com/supervision/handler/gpt/ItemExtractHandler.java b/kbqa-graph/src/main/java/com/supervision/handler/gpt/ItemExtractHandler.java index 0c1ae6a..0afe45b 100644 --- a/kbqa-graph/src/main/java/com/supervision/handler/gpt/ItemExtractHandler.java +++ b/kbqa-graph/src/main/java/com/supervision/handler/gpt/ItemExtractHandler.java @@ -18,50 +18,6 @@ import java.util.*; @Component public class ItemExtractHandler { - /** - * 直接从问题中提取事项 - * - * @param question 问题 - * @return 提取结果 - */ - @Deprecated - public String itemExtract(String question) { - List 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 itemExtractByPossibleItem(String question, List possible) { - String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。请确保只识别并标注一种可能性最高的社保业务事项。" + - "事项名称列表:\n" + - "{}" + - "句子是:{}"; - List 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 itemExtractByPossibleItemWithExample(String question, List possible) { String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。" + - "请确保只识别并标注一种可能性最高的社保业务事项。\n" + + "请确保只识别并标注一种可能性最高的社保业务事项。不要识别出事项列表之外的事项。\n" + "事项列表:{}\n" + "我现在有一些示例,可供你学习。\n" + "输入:企业职工多少岁可以退休?输出:企业职工退休\n" + @@ -101,37 +57,6 @@ public class ItemExtractHandler { } - @Deprecated - public String itemExtractBusiness(String question) { - List 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("未从问题中找到业务事项"); - } } diff --git a/kbqa-graph/src/main/java/com/supervision/vo/SingleTalkReqVO.java b/kbqa-graph/src/main/java/com/supervision/vo/SingleTalkReqVO.java index e8bca32..abcc89c 100644 --- a/kbqa-graph/src/main/java/com/supervision/vo/SingleTalkReqVO.java +++ b/kbqa-graph/src/main/java/com/supervision/vo/SingleTalkReqVO.java @@ -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 { diff --git a/kbqa-graph/src/test/java/com/supervision/GlmTest.java b/kbqa-graph/src/test/java/com/supervision/GlmTest.java deleted file mode 100644 index 13b0fde..0000000 --- a/kbqa-graph/src/test/java/com/supervision/GlmTest.java +++ /dev/null @@ -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 strings = CollUtil.newArrayList("深圳户口", "广东省其他地区", "港澳台及外籍地区", "省外户口", "非深圳户口"); - - Set strings1 = conditionJudgeHandler.newConditionJudge("你的户口所在地是哪里?", strings, "我是汕头人", "户籍所在地"); - log.info("答案是: {}", CollUtil.join(strings1, ";")); - } - - @Test - public void test1() { - ArrayList strings = CollUtil.newArrayList("深圳户口", "广东省其他地区", "港澳台及外籍地区", "省外户口", "非深圳户口"); - - Set strings1 = conditionJudgeHandler.conditionJudge("你的户口所在地是哪里?", strings, "我是汕头人"); - log.info("答案是: {}", CollUtil.join(strings1, ";")); - } - - @Test - public void test2() { - ArrayList strings = CollUtil.newArrayList("大于60岁", "65岁以上", "年龄大于50周岁", "50岁以上"); - Set strings1 = conditionJudgeHandler.conditionJudgeAll("你的年龄多少岁?", strings, "我今天中午吃的酸菜鱼"); - log.info("答案是: {}", CollUtil.join(strings1, ";")); - } - - -}