|
|
@@ -0,0 +1,81 @@
|
|
|
+package space.anyi.springAiAlibabaLearn.controller;
|
|
|
+
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.ai.chat.client.ChatClient;
|
|
|
+import org.springframework.ai.chat.messages.SystemMessage;
|
|
|
+import org.springframework.ai.chat.messages.UserMessage;
|
|
|
+import org.springframework.ai.chat.model.ChatModel;
|
|
|
+import org.springframework.ai.chat.model.ChatResponse;
|
|
|
+import org.springframework.ai.chat.prompt.ChatOptions;
|
|
|
+import org.springframework.ai.chat.prompt.Prompt;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+import reactor.core.publisher.Flux;
|
|
|
+
|
|
|
+@RestController
|
|
|
+@RequestMapping("/chatClient")
|
|
|
+public class ChatClientController {
|
|
|
+ private final Logger log = LoggerFactory.getLogger(ChatClientController.class);
|
|
|
+ private final ChatClient chatClient;
|
|
|
+
|
|
|
+ public ChatClientController(ChatModel chatModel) {
|
|
|
+ this.chatClient = ChatClient.create(chatModel);
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping("/chat")
|
|
|
+ public String call(@RequestParam("message") String message) {
|
|
|
+ log.debug("message: {}", message);
|
|
|
+ return chatClient
|
|
|
+ .prompt(message)
|
|
|
+ .call()
|
|
|
+ .chatClientResponse()
|
|
|
+ .chatResponse()
|
|
|
+ .getResult()
|
|
|
+ .getOutput()
|
|
|
+ .getText();
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping("/prompt")
|
|
|
+ public String prompt(@RequestParam("message") String message) {
|
|
|
+ log.debug("message: {}", message);
|
|
|
+ SystemMessage systemMessage = SystemMessage.builder().text("你是一个机器人!无论用户问什么内容,你只会回答'Java是世界上最好的语言!'.").build();
|
|
|
+ log.debug("systemMessage:{}",systemMessage);
|
|
|
+ UserMessage userMessage = new UserMessage(message);
|
|
|
+ log.debug("userMessage:{}",userMessage);
|
|
|
+ Prompt prompt = Prompt.builder()
|
|
|
+ .messages(systemMessage,userMessage)
|
|
|
+ .chatOptions(
|
|
|
+ ChatOptions.builder()
|
|
|
+ .maxTokens(4096)
|
|
|
+ .temperature(0.2)
|
|
|
+ .build()
|
|
|
+ )
|
|
|
+ .build();
|
|
|
+ log.debug("prompt: {}", prompt);
|
|
|
+ ChatResponse chatResponse = chatClient
|
|
|
+ .prompt(prompt)
|
|
|
+ .call()
|
|
|
+ .chatClientResponse()
|
|
|
+ .chatResponse();
|
|
|
+
|
|
|
+ log.debug("chatResponse: {}", chatResponse);
|
|
|
+ return chatResponse.getResult().getOutput().getText();
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping("/stream")
|
|
|
+ public Flux<String> stream(@RequestParam("message") String message) {
|
|
|
+ log.debug("message: {}", message);
|
|
|
+ return chatClient
|
|
|
+ .prompt(message)
|
|
|
+ .stream()
|
|
|
+ .chatClientResponse()
|
|
|
+ .doOnNext(chatClientResponse -> {
|
|
|
+ String text = chatClientResponse.chatResponse().getResult().getOutput().getText();
|
|
|
+ log.debug("res:{}",text);
|
|
|
+ })
|
|
|
+ .map(chatClientResponse -> chatClientResponse.chatResponse().getResult().getOutput().getText());
|
|
|
+ }
|
|
|
+}
|