From a98c1ef39d9ed513ceb9e92012dc6a4bdbdb1bfb Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 23 Apr 2024 17:45:12 +0800 Subject: [PATCH] =?UTF-8?q?1.=20Qanything=E6=B7=BB=E5=8A=A0=E6=B5=81?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E7=AD=94=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supervision/controller/KGController.java | 9 +++++++ .../qanything/QanythingService.java | 4 +++ .../qanything/constant/QanythingConstant.java | 5 ++++ .../qanything/impl/QanythingServiceImpl.java | 27 +++++++++++++++++++ .../java/com/supervision/vo/kg/ChatResVo.java | 4 --- .../test/java/com/supervision/YoudaoTest.java | 16 +++++++++-- 6 files changed, 59 insertions(+), 6 deletions(-) diff --git a/kbqa-graph/src/main/java/com/supervision/controller/KGController.java b/kbqa-graph/src/main/java/com/supervision/controller/KGController.java index cc1c706..2104268 100644 --- a/kbqa-graph/src/main/java/com/supervision/controller/KGController.java +++ b/kbqa-graph/src/main/java/com/supervision/controller/KGController.java @@ -18,6 +18,9 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.security.NoSuchAlgorithmException; @@ -37,6 +40,12 @@ public class KGController { return kgService.chat(chatReqVo); } + @ApiOperation("流式问答对话") + @PostMapping("/chatStream") + public void chatStream(@RequestBody ChatReqVo chatReqVo, HttpServletResponse response) throws NoSuchAlgorithmException, IOException { + + qanythingService.chatStream(response,chatReqVo.getQuestion(),CollUtil.newArrayList("KB403a6543629648a3a74b60be5707398f_240328")); + } @ApiOperation("qanythingChat问答对话-调试用") @PostMapping("/qanythingChat") public ResultWrapper qanythingChat(@RequestBody ChatReqVo chatReqVo) throws NoSuchAlgorithmException { diff --git a/kbqa-graph/src/main/java/com/supervision/qanything/QanythingService.java b/kbqa-graph/src/main/java/com/supervision/qanything/QanythingService.java index efa9c32..f6a6358 100644 --- a/kbqa-graph/src/main/java/com/supervision/qanything/QanythingService.java +++ b/kbqa-graph/src/main/java/com/supervision/qanything/QanythingService.java @@ -2,7 +2,9 @@ package com.supervision.qanything; import com.supervision.qanything.dto.*; +import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.List; @@ -28,6 +30,8 @@ public interface QanythingService { ResultWrapper chat(String question,List history, List kbIds) throws NoSuchAlgorithmException; + void chatStream(HttpServletResponse response, String question, List kbIds) throws NoSuchAlgorithmException, IOException; + /** * 上传文件接口 * @param kbId 知识库ID diff --git a/kbqa-graph/src/main/java/com/supervision/qanything/constant/QanythingConstant.java b/kbqa-graph/src/main/java/com/supervision/qanything/constant/QanythingConstant.java index 6f22126..82b0107 100644 --- a/kbqa-graph/src/main/java/com/supervision/qanything/constant/QanythingConstant.java +++ b/kbqa-graph/src/main/java/com/supervision/qanything/constant/QanythingConstant.java @@ -17,6 +17,11 @@ public interface QanythingConstant { */ String URL_CHAT = "/q_anything/paas/chat"; + /** + * 聊天流 + */ + String URL_CHAT_STREAM = "/q_anything/paas/chat_stream"; + /** * 上传文件 */ diff --git a/kbqa-graph/src/main/java/com/supervision/qanything/impl/QanythingServiceImpl.java b/kbqa-graph/src/main/java/com/supervision/qanything/impl/QanythingServiceImpl.java index 303c985..4d8e8cf 100644 --- a/kbqa-graph/src/main/java/com/supervision/qanything/impl/QanythingServiceImpl.java +++ b/kbqa-graph/src/main/java/com/supervision/qanything/impl/QanythingServiceImpl.java @@ -1,5 +1,6 @@ package com.supervision.qanything.impl; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.TypeReference; import cn.hutool.http.HttpRequest; @@ -14,7 +15,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.security.NoSuchAlgorithmException; import java.util.List; @@ -119,6 +123,29 @@ public class QanythingServiceImpl implements QanythingService { } } + @Override + public void chatStream(HttpServletResponse response, String question, List kbIds) throws NoSuchAlgorithmException, IOException { + + Assert.notEmpty(kbIds, "kbIds不能为空"); + Assert.notEmpty(question, "问题不能为空"); + + log.info("chat:请求入参:question:{},kbIds:{}", question, kbIds); + ChatParam chatParam = new ChatParam(); + chatParam.setQ(question); + chatParam.setKbIds(kbIds); + // 添加鉴权相关参数 + AuthV3Util.addAuthParams(APP_KEY, APP_SECRET, chatParam); + String paramString = JSONUtil.toJsonStr(chatParam); + log.info("chat:请求参数:{}", paramString); + + HttpRequest request = HttpRequest.post(BASE_URL + QanythingConstant.URL_CHAT_STREAM) + .body(paramString); + try (HttpResponse qResponse = request.execute()){ + InputStream inputStream = qResponse.bodyStream(); + IoUtil.copy(inputStream,response.getOutputStream()); + } + } + @Override public ResultWrapper> uploadDoc(String kbId, File file) throws NoSuchAlgorithmException { Assert.notNull(file, "文件不能为空"); diff --git a/kbqa-graph/src/main/java/com/supervision/vo/kg/ChatResVo.java b/kbqa-graph/src/main/java/com/supervision/vo/kg/ChatResVo.java index 50f473b..60ed34c 100644 --- a/kbqa-graph/src/main/java/com/supervision/vo/kg/ChatResVo.java +++ b/kbqa-graph/src/main/java/com/supervision/vo/kg/ChatResVo.java @@ -14,10 +14,6 @@ public class ChatResVo { List sourceKgInfoList; - public boolean isSuccess() { - return success; - } - public static ChatResVo makeError() { ChatResVo chatResVo = new ChatResVo(); chatResVo.success = false; diff --git a/kbqa-graph/src/test/java/com/supervision/YoudaoTest.java b/kbqa-graph/src/test/java/com/supervision/YoudaoTest.java index 9e1a4c8..c32f5a3 100644 --- a/kbqa-graph/src/test/java/com/supervision/YoudaoTest.java +++ b/kbqa-graph/src/test/java/com/supervision/YoudaoTest.java @@ -12,11 +12,13 @@ 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.mock.web.MockHttpServletResponse; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; -import java.io.File; -import java.io.IOException; +import javax.servlet.ServletOutputStream; +import java.io.*; +import java.nio.charset.StandardCharsets; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; @@ -47,6 +49,16 @@ public class YoudaoTest { System.out.println(chat.getResult().getResponse()); } + + @Test + public void qanythingChatStreamTest() throws NoSuchAlgorithmException, IOException { + + + MockHttpServletResponse mockHttpServletResponse = new MockHttpServletResponse(); + qanythingService.chatStream(mockHttpServletResponse,"需要提供哪些材料?",CollUtil.newArrayList("KB403a6543629648a3a74b60be5707398f_240328")); + ServletOutputStream outputStream = mockHttpServletResponse.getOutputStream(); + + } @Test public void qanythingUploadDocTest() throws NoSuchAlgorithmException {