Переглянути джерело

feat:实现BaseAdvisor接口,自定义MyAdvisor;

yangyi 7 місяців тому
батько
коміт
51f72c5049

+ 43 - 0
src/main/java/space/anyi/springAiAlibabaLearn/advisor/MyAdvisor.java

@@ -0,0 +1,43 @@
+package space.anyi.springAiAlibabaLearn.advisor;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.ai.chat.client.ChatClientRequest;
+import org.springframework.ai.chat.client.ChatClientResponse;
+import org.springframework.ai.chat.client.advisor.api.AdvisorChain;
+import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
+
+/**
+ * 自定义BaseAdvisor,BaseAdvisor接口继承自CallAdvisor和StreamAdvisor
+ */
+public class MyAdvisor implements BaseAdvisor {
+    private final Logger log = LoggerFactory.getLogger(MyAdvisor.class);
+    /**
+     * 前置处理
+     * @param chatClientRequest
+     * @param advisorChain
+     * @return
+     */
+    @Override
+    public ChatClientRequest before(ChatClientRequest chatClientRequest, AdvisorChain advisorChain) {
+        log.info("{}的前置处理",getName());
+        return chatClientRequest;
+    }
+
+    /**
+     * 后置处理
+     * @param chatClientResponse
+     * @param advisorChain
+     * @return
+     */
+    @Override
+    public ChatClientResponse after(ChatClientResponse chatClientResponse, AdvisorChain advisorChain) {
+        log.info("{}的后置处理",getName());
+        return chatClientResponse;
+    }
+
+    @Override
+    public int getOrder() {
+        return 0;
+    }
+}

+ 2 - 2
src/main/java/space/anyi/springAiAlibabaLearn/advisor/MySteamAdvisor.java → src/main/java/space/anyi/springAiAlibabaLearn/advisor/MyStreamAdvisor.java

@@ -8,8 +8,8 @@ import org.springframework.ai.chat.client.advisor.api.StreamAdvisor;
 import org.springframework.ai.chat.client.advisor.api.StreamAdvisorChain;
 import reactor.core.publisher.Flux;
 //StreamAdvisor使用在异步流式调用LLM的场景
-public class MySteamAdvisor implements StreamAdvisor {
-    private final Logger log = LoggerFactory.getLogger(MySteamAdvisor.class);
+public class MyStreamAdvisor implements StreamAdvisor {
+    private final Logger log = LoggerFactory.getLogger(MyStreamAdvisor.class);
     @Override
     public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest, StreamAdvisorChain streamAdvisorChain) {
         log.info("{}的前置处理",getName());

+ 7 - 4
src/main/java/space/anyi/springAiAlibabaLearn/controller/AdvisorController.java

@@ -4,17 +4,16 @@ 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.MyAdvisor;
 import space.anyi.springAiAlibabaLearn.advisor.MyCallAdvisor;
 import space.anyi.springAiAlibabaLearn.advisor.MyCallAdvisor2;
-import space.anyi.springAiAlibabaLearn.advisor.MySteamAdvisor;
+import space.anyi.springAiAlibabaLearn.advisor.MyStreamAdvisor;
 
-import java.util.Collections;
 import java.util.List;
 
 @RestController
@@ -61,8 +60,12 @@ public class AdvisorController {
         return chatClient
                 .prompt("who are you?")
                 //添加一个advisor
-                .advisors(new MySteamAdvisor())
+                .advisors(new MyStreamAdvisor())
                 .stream()
                 .content();
     }
+    @GetMapping("/testBaseAdvisor")
+    public String baseAdvisorTest(){
+        return chatClient.prompt("你知道我是谁吗?").advisors(new MyAdvisor()).call().content();
+    }
 }