Jelajahi Sumber

feat:使用ChatClient进行API调用;同步调用和异步流式调用;

yangyi 7 bulan lalu
induk
melakukan
52142a67f9

+ 81 - 0
src/main/java/space/anyi/springAiAlibabaLearn/controller/ChatClientController.java

@@ -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());
+    }
+}