|
|
@@ -0,0 +1,68 @@
|
|
|
+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.client.advisor.api.Advisor;
|
|
|
+import org.springframework.ai.chat.client.advisor.api.CallAdvisor;
|
|
|
+import org.springframework.ai.chat.model.ChatModel;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+import reactor.core.publisher.Flux;
|
|
|
+import space.anyi.springAiAlibabaLearn.advisor.MyCallAdvisor;
|
|
|
+import space.anyi.springAiAlibabaLearn.advisor.MyCallAdvisor2;
|
|
|
+import space.anyi.springAiAlibabaLearn.advisor.MySteamAdvisor;
|
|
|
+
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@RestController
|
|
|
+@RequestMapping("/advisor")
|
|
|
+public class AdvisorController {
|
|
|
+ private final Logger log = LoggerFactory.getLogger(AdvisorController.class);
|
|
|
+ private final ChatClient chatClient;
|
|
|
+
|
|
|
+ public AdvisorController(ChatModel chatModel) {
|
|
|
+ this.chatClient = ChatClient.create(chatModel);
|
|
|
+ }
|
|
|
+ @GetMapping("/testCallAdvisor")
|
|
|
+ public String callAdvisorTest(){
|
|
|
+ //测试一个advisor的场景
|
|
|
+ return chatClient
|
|
|
+ .prompt("who are you?")
|
|
|
+ //添加一个advisor
|
|
|
+ .advisors(new MyCallAdvisor())
|
|
|
+ .call()
|
|
|
+ .content();
|
|
|
+ }
|
|
|
+ @GetMapping("/testChain")
|
|
|
+ public String advisorChainTest(){
|
|
|
+ //测试advisorChain的场景
|
|
|
+ List<Advisor> advisorList = List.of(new MyCallAdvisor(), new MyCallAdvisor2());
|
|
|
+ /**
|
|
|
+ * 链的处理流程与FilterChain和InterceptorChain的处理流程是一致的(有调用栈的存在)
|
|
|
+ * 1.advisor1前置处理
|
|
|
+ * 2.advisor2前置处理
|
|
|
+ * 3.实际调用LLM...
|
|
|
+ * 4.advisor2后置处理
|
|
|
+ * 5.advisor1后置处理
|
|
|
+ */
|
|
|
+ return chatClient
|
|
|
+ .prompt("Java是世界上最好的语言?")
|
|
|
+ //添加一个advisorList
|
|
|
+ .advisors(advisorList)
|
|
|
+ .call()
|
|
|
+ .content();
|
|
|
+ }
|
|
|
+ @GetMapping("/testStreamAdvisor")
|
|
|
+ public Flux<String> streamAdvisorTest(){
|
|
|
+ //测试一个advisor的场景
|
|
|
+ return chatClient
|
|
|
+ .prompt("who are you?")
|
|
|
+ //添加一个advisor
|
|
|
+ .advisors(new MySteamAdvisor())
|
|
|
+ .stream()
|
|
|
+ .content();
|
|
|
+ }
|
|
|
+}
|