spring AI Advisors類似于攔截器,會對請求的prompt做出特定的修改和增強(比如傳入歷史溝通記錄、搜索信息等等),以達到完善prompt的目的。通過Advisors API,開發人員可以創建更為復雜、可重用、可維護的AI組件。下面介紹下Advisors的運作原理。
我用的是包是spring-ai-alibaba-starter-dashscope, Advisor相關邏輯在spring-ai-client-chat-1.0.0.jar。
針對流式和非流式兩個場景,Advisor有兩組核心類
場景 | 類名 | 包含方法 | |
流式 | StreamAdvisor | adviseStream | |
流式 | StreamAdvisorChain | nextStream、getStreamAdvisors | |
非流式 | CallAdvisor | adviseCall | |
非流式 | CallAdvisorChain | nextCall、getCallAdvisors |
order可以定義advisor優先級,這將決定先調用哪一個(數越小代表優先級越高)。
name是advisor的名稱。
nextCall/nextStream是關鍵方法,主要根據order獲取當前可以執行的advisor,并且調用advisor的adviseCall/adviseStream,?adviseCall/adviseStream又會調用advisor的before和after方法,以BaseAdvisor為例,代碼如下:
以CallAdvisor為例,具體實行的邏輯如下:
1. Spring AI 根據用戶的提示創建一個 chatClientRequest 對象。
2. 鏈中的每個advisor都會處理請求,并可能對其進行修改。
3. 最終的advisor將請求發送至聊天模型。
4. 聊天模型的響應隨后會通過advisorChain傳遞回去,并轉換為chatClientResponse。
5. 每位advisor都可以處理或修改回復。
6. 最終的chatClientResponse通過提取聊天完成內容返回給客戶端。