diff --git a/pom.xml b/pom.xml index 5edcd75..e418274 100644 --- a/pom.xml +++ b/pom.xml @@ -85,6 +85,14 @@ + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + true + + diff --git a/src/main/java/com/supervision/contoller/ChatController.java b/src/main/java/com/supervision/contoller/ChatController.java index 42ddb47..7a41377 100644 --- a/src/main/java/com/supervision/contoller/ChatController.java +++ b/src/main/java/com/supervision/contoller/ChatController.java @@ -55,14 +55,7 @@ public class ChatController { } @GetMapping(value="/stream",produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux>> test2(@RequestParam("query") String query) { + public Flux>> stream(@RequestParam("query") String query) { return chatService.streamingMessage(query); } - - @GetMapping(value = "/webflux",produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux chatWebFlux() { - String string = ResourceUtil.readUtf8Str("classpath:static/test.txt"); - String[] stringArray = StrUtil.split(string, 1); - return Flux.just(stringArray).delayElements(Duration.ofMillis(50)); - } } diff --git a/src/main/java/com/supervision/service/impl/ChatServiceImpl.java b/src/main/java/com/supervision/service/impl/ChatServiceImpl.java index 8bd1946..a7ec257 100644 --- a/src/main/java/com/supervision/service/impl/ChatServiceImpl.java +++ b/src/main/java/com/supervision/service/impl/ChatServiceImpl.java @@ -76,25 +76,27 @@ public class ChatServiceImpl implements IChatService { Map map = new HashMap<>(); map.put("event", response.getEvent()); if (response.getEvent().equals("message") && response.getAnswer() != null) { - String voiceBaseId = UUID.randomUUID().toString(); //遍历answer中的每一个字符,判断是否为标点符号,如果是,说明是句子的结尾,将标点符号前的文本拼接到sentence中,并打印,然后清空sentence,如果标点符号后还有文本,将文本拼接到sentence中 for (char ch : response.getAnswer().toCharArray()) { sentence.append(ch); if (ch == '。' || ch == '!' || ch == '?' || ch == ',' || ch == '、' || ch == '‘' || ch == '’' || ch == '“' || ch == '”') { // Check for punctuation marks log.info(sentence.toString()); TtsResultDTO ttsResultDTO = TtsUtil.ttsTransform(sentence.toString()); + String voiceBaseId = UUID.randomUUID().toString(); voiceCache.put(voiceBaseId, ttsResultDTO.getAudio()); map.put("audioId", voiceBaseId); sentence.setLength(0); // Clear the sentence + return ServerSentEvent.builder(map).build(); } } if (response.getEvent().equals("message_end") && !sentence.isEmpty()) { log.info(sentence.toString()); TtsResultDTO ttsResultDTO = TtsUtil.ttsTransform(sentence.toString()); + String voiceBaseId = UUID.randomUUID().toString(); voiceCache.put(voiceBaseId, ttsResultDTO.getAudio()); map.put("audioId", voiceBaseId); + return ServerSentEvent.builder(map).build(); } - return ServerSentEvent.builder(map).build(); } return ServerSentEvent.builder(map).build(); }); diff --git a/src/main/resources/static/test.txt b/src/main/resources/static/test.txt deleted file mode 100644 index 66b1b21..0000000 --- a/src/main/resources/static/test.txt +++ /dev/null @@ -1,3 +0,0 @@ -SpringBoot+WebFlux通过流式响应实现类似ChatGPT的打字机效果 -突然间想用Java实现一下像ChatGPT一样的打字机输出效果,但是网上搜了相关教程感觉都不够满意。 -这里贴一下自己的实现,为中文互联网做一点小小的贡献 \ No newline at end of file