Ver código fonte

feat:多种重载方法进行API调用;同步调用和异步流式调用;

yangyi 7 meses atrás
pai
commit
7d06d8b530

+ 41 - 0
src/main/java/space/anyi/springAiAlibabaLearn/controller/HelloController.java

@@ -2,10 +2,16 @@ package space.anyi.springAiAlibabaLearn.controller;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+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.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Flux;
 
 @RestController
 public class HelloController {
@@ -23,6 +29,41 @@ public class HelloController {
     @GetMapping("/chat")
     public String chat(@RequestParam("message") String message){
         log.debug("message:{}",message);
+        //同步调用
         return chatModel.call(message);
     }
+    @GetMapping("/message")
+    public String message(@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);
+        //携带历史消息(系统消息)同步调用
+        return chatModel.call(systemMessage,userMessage);
+    }
+    @GetMapping("/prompt")
+    public String prompt(@RequestParam("message") String message){
+        log.debug("message:{}",message);
+        Prompt prompt = Prompt.builder()
+                .messages(UserMessage.builder()
+                        .text(message)
+                        .build())
+                .chatOptions(
+                        ChatOptions.builder()
+                                .maxTokens(4096)
+                                .temperature(0.2)
+                                .build()
+                ).build();
+        log.debug("prompt:{}",prompt);
+        //更加细粒度的配置进行同步调用
+        ChatResponse chatResponse = chatModel.call(prompt);
+        log.debug("chatResponse:{}",chatResponse);
+        return chatResponse.getResults().getFirst().getOutput().getText();
+    }
+    @GetMapping("/stream")
+    public Flux<String> stream(@RequestParam("message") String message){
+        //异步流式响应
+        return chatModel.stream(message).doOnNext(msg->log.debug("msg:{}",msg));
+    }
 }