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