diff --git a/kbqa-graph/src/main/java/com/supervision/ai/dto/ChatReqDTO.java b/kbqa-graph/src/main/java/com/supervision/ai/dto/ChatReqDTO.java index 6bf78b1..c2eef44 100644 --- a/kbqa-graph/src/main/java/com/supervision/ai/dto/ChatReqDTO.java +++ b/kbqa-graph/src/main/java/com/supervision/ai/dto/ChatReqDTO.java @@ -14,4 +14,6 @@ public class ChatReqDTO { private Float temperature = 0.01f; private List messages; + + private List tools; } diff --git a/kbqa-graph/src/main/java/com/supervision/ai/dto/ToolDTO.java b/kbqa-graph/src/main/java/com/supervision/ai/dto/ToolDTO.java new file mode 100644 index 0000000..9062f0a --- /dev/null +++ b/kbqa-graph/src/main/java/com/supervision/ai/dto/ToolDTO.java @@ -0,0 +1,13 @@ +package com.supervision.ai.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class ToolDTO { + + private String type = "web_search"; + + private WebSearchDTO web_search; +} diff --git a/kbqa-graph/src/main/java/com/supervision/ai/dto/WebSearchDTO.java b/kbqa-graph/src/main/java/com/supervision/ai/dto/WebSearchDTO.java new file mode 100644 index 0000000..f3bf887 --- /dev/null +++ b/kbqa-graph/src/main/java/com/supervision/ai/dto/WebSearchDTO.java @@ -0,0 +1,10 @@ +package com.supervision.ai.dto; + +import lombok.Data; + +@Data +public class WebSearchDTO { + + private Boolean enable = false; + +} diff --git a/kbqa-graph/src/main/java/com/supervision/handler/gpt/AnswerQuestionHandler.java b/kbqa-graph/src/main/java/com/supervision/handler/gpt/AnswerQuestionHandler.java index e3e4dcf..cac21bc 100644 --- a/kbqa-graph/src/main/java/com/supervision/handler/gpt/AnswerQuestionHandler.java +++ b/kbqa-graph/src/main/java/com/supervision/handler/gpt/AnswerQuestionHandler.java @@ -21,7 +21,7 @@ public class AnswerQuestionHandler { "\"\"\"{}\"\"\"\n" + "同时,有一个和用户的问答过程的记录供你参考以提供更精确的回答,内容是:" + "\"\"\"{}\"\"\"\n" + - "请用不超过 100 个词的长度准确和详细的回答用户的问题。回答一定要忠于原文,简洁但不丢信息,不要胡乱编造。请直接给我最终答案,不要反问"; + "请用不超过 100 个词的长度准确和详细的回答用户的问题。注意别让用户知道这个政策文档。回答一定要忠于原文,简洁但不丢信息,不要胡乱编造。请直接给我最终答案,不要反问"; String askRecordTemplate = "问:{}\n 用户答:{};\n"; StringBuilder askRecord = new StringBuilder(); for (Map.Entry entry : talkRecord.entrySet()) { @@ -42,7 +42,7 @@ public class AnswerQuestionHandler { public String answerSingleQuestionNew(String question, Map> detailMap) { String template = "作为AI助手,你的任务是帮助用户查找和理解特定政务的政策内容并给于用户答案。在这个场景中,你将使用政策内容来回答用户问题:{}。请根据政策内容\n" + "\"\"\"{}\"\"\"\n" + - "并用不超过 100 个词的长度准确和详细的回答用户的问题。回答一定要忠于原文,简洁但不丢信息,不要胡乱编造。请直接给我最终答案,不要反问"; + "并用不超过 100 个词的长度准确和详细的回答用户的问题。注意别让用户知道这个政策文档。回答一定要忠于原文,简洁但不丢信息,不要胡乱编造。请直接给我最终答案,不要反问"; List messageList = new ArrayList<>(); messageList.add(new MessageDTO("user", StrUtil.format(template, question, JSONUtil.toJsonStr(detailMap)))); diff --git a/kbqa-graph/src/test/java/com/supervision/AskTest.java b/kbqa-graph/src/test/java/com/supervision/AskTest.java deleted file mode 100644 index 741070d..0000000 --- a/kbqa-graph/src/test/java/com/supervision/AskTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.supervision; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.file.FileReader; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.poi.excel.ExcelReader; -import cn.hutool.poi.excel.ExcelUtil; -import cn.hutool.poi.excel.ExcelWriter; -import com.supervision.service.AskService; -import com.supervision.vo.SingleTalkReqVO; -import com.supervision.vo.SingleTalkResVO; -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.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.List; - -@Slf4j -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@RunWith(SpringJUnit4ClassRunner.class) -public class AskTest { - - @Autowired - private AskService askService; - - @Test - public void test() throws IOException { - // 从excel中获取问题,开始循环调用 - ExcelReader reader = ExcelUtil.getReader("/Users/flevance/Desktop/知识图谱/正常退休业务问题梳理_0422.xlsx", 1); - File file = FileUtil.file("/Users/flevance/Java/KBQA/test.log"); - ExcelWriter writer = ExcelUtil.getWriter("/Users/flevance/Desktop/知识图谱/正常退休业务问题梳理_0422_output.xlsx", "Sheet2"); - - // 从第一行开始读取 - List> readList = reader.read(1); - for (int i = 0; i < readList.size(); i++) { - List objects = readList.get(i); - SingleTalkReqVO singleTalkReqVO = new SingleTalkReqVO(); - singleTalkReqVO.setUserTalk(String.valueOf(objects.get(1))); - SingleTalkResVO singleTalkResVO = null; - try { - singleTalkResVO = askService.singleTalk(singleTalkReqVO); - } catch (Exception e) { - log.info("出现异常,结束"); - } - FileReader fileReader = new FileReader(file); - List strings = fileReader.readLines(); - int y = i + 1; - strings.stream().filter(e -> StrUtil.contains(e, "identifyIntent开始识别意图:")).findAny().ifPresent(e -> { - String s = StrUtil.subAfter(e, "identifyIntent开始识别意图:", true); - writer.writeCellValue(2, y, s); - }); - strings.stream().filter(e -> StrUtil.contains(e, "identifyIntent意图识别结果为:")).findAny().ifPresent(e -> { - String s = StrUtil.subAfter(e, "identifyIntent意图识别结果为:", true); - writer.writeCellValue(3, y, s); - }); - strings.stream().filter(e -> StrUtil.contains(e, "itemExtractByPossibleItemWithExample查询语句为:")).findAny().ifPresent(e -> { - String s = StrUtil.subAfter(e, "itemExtractByPossibleItemWithExample查询语句为:", true); - writer.writeCellValue(4, y, s); - }); - strings.stream().filter(e -> StrUtil.contains(e, "itemExtractByPossibleItemWithExample结果为:")).findAny().ifPresent(e -> { - String s = StrUtil.subAfter(e, "itemExtractByPossibleItemWithExample结果为:", true); - writer.writeCellValue(5, y, s); - }); - strings.stream().filter(e -> StrUtil.contains(e, "answerQuestion的prompt是:")).findAny().ifPresent(e -> { - String s = StrUtil.subAfter(e, "answerQuestion的prompt是:", true); - writer.writeCellValue(6, y, s); - }); - SingleTalkResVO finalSingleTalkResVO = singleTalkResVO; - strings.stream().filter(e -> StrUtil.contains(e, "answerQuestion的答案是:")).findAny().ifPresent(e -> { - String s = StrUtil.subAfter(e, "answerQuestion的答案是:", true); - if (ObjectUtil.isNotNull(finalSingleTalkResVO)) { - writer.writeCellValue(7, y, finalSingleTalkResVO.getAnswerText()); - } - }); - writer.flush(); - BufferedWriter writer1 = FileUtil.getWriter(file, Charset.defaultCharset(), false); - writer1.write(""); - writer1.flush(); - writer1.close(); - } - - - } - -}