| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 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;
- import space.anyi.springAiAlibabaLearn.model.Person;
- @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());
- }
- @GetMapping("/entity")
- public Person entity(){
- //将LLM的输出转换为Java对象
- /**
- * 内部会在prompt中追加Person类的结构消息,并要求LLM输出符合格式的JSON字符串
- */
- return chatClient
- .prompt("生成一个人的消息.")
- .call()
- .entity(Person.class);
- }
- }
|