1. Qanything添加流式问答接口

main
xueqingkun 10 months ago
parent 71494928f8
commit a98c1ef39d

@ -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<ChatResult> qanythingChat(@RequestBody ChatReqVo chatReqVo) throws NoSuchAlgorithmException {

@ -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<ChatResult> chat(String question,List<HistoryDTO> history, List<String> kbIds) throws NoSuchAlgorithmException;
void chatStream(HttpServletResponse response, String question, List<String> kbIds) throws NoSuchAlgorithmException, IOException;
/**
*
* @param kbId ID

@ -17,6 +17,11 @@ public interface QanythingConstant {
*/
String URL_CHAT = "/q_anything/paas/chat";
/**
*
*/
String URL_CHAT_STREAM = "/q_anything/paas/chat_stream";
/**
*
*/

@ -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<String> 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<List<UploadResult>> uploadDoc(String kbId, File file) throws NoSuchAlgorithmException {
Assert.notNull(file, "文件不能为空");

@ -14,10 +14,6 @@ public class ChatResVo {
List<SourceKgInfo> sourceKgInfoList;
public boolean isSuccess() {
return success;
}
public static ChatResVo makeError() {
ChatResVo chatResVo = new ChatResVo();
chatResVo.success = false;

@ -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 {

Loading…
Cancel
Save