From f8ff5808e5db52263ca3e0401a950ca1e69f8e84 Mon Sep 17 00:00:00 2001 From: Hanserwei <2628273921@qq.com> Date: Wed, 22 Oct 2025 22:40:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(dashscope):=20=E5=AE=9E=E7=8E=B0=E6=B5=81?= =?UTF-8?q?=E5=BC=8F=E5=93=8D=E5=BA=94=E6=8E=A5=E5=8F=A3=E5=B9=B6=E8=BF=94?= =?UTF-8?q?=E5=9B=9EAIResponse=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增AIResponse模型类用于封装流式响应内容- 修改DashScopeController以支持流式输出 - 将原有的chat方法改为generateStream方法 - 使用Prompt构建提示词并获取流式响应- 映射chatResponse到AIResponse对象- 添加@Slf4j注解以支持日志记录- 引入必要的Spring AI相关类和Lombok注解 --- .../controller/DashScopeController.java | 28 ++++++++++++++----- .../hanserwei/snailsai/model/AIResponse.java | 15 ++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hanserwei/snailsai/model/AIResponse.java diff --git a/src/main/java/com/hanserwei/snailsai/controller/DashScopeController.java b/src/main/java/com/hanserwei/snailsai/controller/DashScopeController.java index 05640fb..667fc28 100644 --- a/src/main/java/com/hanserwei/snailsai/controller/DashScopeController.java +++ b/src/main/java/com/hanserwei/snailsai/controller/DashScopeController.java @@ -1,13 +1,19 @@ package com.hanserwei.snailsai.controller; +import com.hanserwei.snailsai.model.AIResponse; import com.hanserwei.snailsai.model.ChatMessageDTO; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.memory.ChatMemory; +import org.springframework.ai.chat.messages.UserMessage; +import org.springframework.ai.chat.model.Generation; +import org.springframework.ai.chat.prompt.Prompt; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; +@Slf4j @RequestMapping("/dashscope") @RestController @CrossOrigin @@ -16,12 +22,20 @@ public class DashScopeController { @Resource private ChatClient dashScopeChatClient; - @PostMapping(value = "/chat",produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux chat(@RequestBody ChatMessageDTO chatMessageDTO) { - return dashScopeChatClient.prompt() - .user(chatMessageDTO.getMessage()) - .advisors(e-> e.param(ChatMemory.CONVERSATION_ID,chatMessageDTO.getConversionId())) - .stream() - .content(); + @PostMapping(value = "/generateStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux generateStream(@RequestBody ChatMessageDTO chatMessageDTO) { + // 构建提示词 + Prompt prompt = new Prompt(new UserMessage(chatMessageDTO.getMessage())); + + // 流式输出 + return dashScopeChatClient.prompt(prompt) + .advisors(a -> a.param(ChatMemory.CONVERSATION_ID, chatMessageDTO.getConversionId())) + .stream() // 流式输出 + .chatResponse() + .mapNotNull(chatResponse -> { + Generation generation = chatResponse.getResult(); + String text = generation.getOutput().getText(); + return AIResponse.builder().v(text).build(); + }); } } diff --git a/src/main/java/com/hanserwei/snailsai/model/AIResponse.java b/src/main/java/com/hanserwei/snailsai/model/AIResponse.java new file mode 100644 index 0000000..0114702 --- /dev/null +++ b/src/main/java/com/hanserwei/snailsai/model/AIResponse.java @@ -0,0 +1,15 @@ +package com.hanserwei.snailsai.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AIResponse { + // 流式响应内容 + private String v; +} \ No newline at end of file