spring-ai 1.0.0 (3)交互增強:Advisor 顧問模塊

?

核心組件

API 由非流式處理方案和 和 流式處理方案組成。?

在1.0.0版本中,顧問鏈AdvisorChain相關接口已經棄用,可能是老版本的思想不太合倫理吧

可以使用下面的方式實現多個顧問按oder順序訪問模型

    public ChatController(ChatClient.Builder chatClientBuilder) {MySimpleLoggerAdvisor advisor3=  new MySimpleLoggerAdvisor(3);MySimpleLoggerAdvisor advisor2= new MySimpleLoggerAdvisor(2);MySimpleLoggerAdvisor advisor1= new MySimpleLoggerAdvisor(1);this.chatClient = chatClientBuilder//此處執行順序由order決定,并非添加順序決定.defaultAdvisors(List.of(advisor3,advisor2,advisor1)).defaultSystem("You are a helpful assistant").build();}

下圖說明了顧問鏈和聊天模型之間的交互:

顧問advice之間的request和response 基于order 對稱,比如三個女孩子按順序123追你,你給出的答復順序則應該是321

?

交互返回:

Spring AI 提供了兩種類型的內存顧問程序來維護對話上下文:

顧問存儲機制模板占位符
PromptChatMemoryAdvisor內存中或自定義instructions,memory
VectorStoreChatMemoryAdvisor向量數據庫instructions,long_term_memory

下面是一個簡單顧問的實現用于參考學習:

package com.example.advisor;import org.springframework.ai.chat.client.ChatClientRequest;
import org.springframework.ai.chat.client.ChatClientResponse;
import org.springframework.ai.chat.client.advisor.api.CallAdvisor;
import org.springframework.ai.chat.client.advisor.api.CallAdvisorChain;
import org.springframework.ai.chat.client.advisor.api.StreamAdvisor;
import org.springframework.ai.chat.client.advisor.api.StreamAdvisorChain;
import reactor.core.publisher.Flux;public class MySimpleLoggerAdvisor implements CallAdvisor, StreamAdvisor {private Integer order;public MySimpleLoggerAdvisor() {super();}public MySimpleLoggerAdvisor(Integer preOrder) {order = preOrder;}public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAdvisorChain callAdvisorChain) {System.out.println("BEFORE: {}" + chatClientRequest);System.out.println("do something order  " + this.order);ChatClientResponse chatClientResponse = callAdvisorChain.nextCall(chatClientRequest);System.out.println("AFTER: {}" + chatClientResponse);System.out.println("was do something order  " + this.order);return chatClientResponse;}@Overridepublic String getName() {return "MySimpleLoggerAdvisor";}@Overridepublic int getOrder() {return this.order == null ? 0 : this.order;}//	@Override
//	public AdvisedResponse aroundCall(AdvisedRequest advisedRequest, CallAroundAdvisorChain chain) {
//
//		logger.debug("BEFORE: {}", advisedRequest);
//
//		AdvisedResponse advisedResponse = chain.nextAroundCall(advisedRequest);
//
//		logger.debug("AFTER: {}", advisedResponse);
//
//		return advisedResponse;
//	}
//@Overridepublic Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest, StreamAdvisorChain streamAdvisorChain) {System.out.println("BEFORE: {}" + chatClientRequest);System.out.println("do something");Flux<ChatClientResponse> chatClientResponse = streamAdvisorChain.nextStream(chatClientRequest);System.out.println("AFTER: {}" + chatClientResponse);System.out.println("was do something");return chatClientResponse;}//	@Override
//	public Flux<AdvisedResponse> aroundStream(AdvisedRequest advisedRequest, StreamAroundAdvisorChain chain) {
//
//		logger.debug("BEFORE: {}", advisedRequest);
//
//		Flux<AdvisedResponse> advisedResponses = chain.nextAroundStream(advisedRequest);
//
//        return new MessageAggregator().aggregateAdvisedResponse(advisedResponses,
//                    advisedResponse -> logger.debug("AFTER: {}", advisedResponse));
//	}
}

最后分析一下顧問模塊的依賴關系:chatclient客戶端是依賴于它的,他和chatclient客戶端也同時依賴于spring-ai-模型,Core Advisor 框架在spring-ai-模型中得到定義和泛化

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913289.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913289.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913289.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習筆記Ⅰ】2 線性回歸模型

線性回歸&#xff08;Linear Regression&#xff09;是機器學習中最基礎、最常用的監督學習模型之一&#xff0c;用于解決回歸問題&#xff08;預測連續數值輸出&#xff09;。它的核心思想是通過擬合一條直線&#xff08;或超平面&#xff09;來描述輸入特征&#xff08;自變量…

2025.7.6總結

第天&#xff0c;Morning power 1.四四呼吸&#xff0c;做了10分鐘。 2.感恩環節:有兩周沒去新勵成上課了&#xff0c;感謝今天早上去上了當眾講話&#xff0c;遇到了不少老朋友&#xff0c;聊的還蠻開心滴&#xff0c;滿足了我的社交需求。其次&#xff0c;在臺上做了個小面試…

RabbitMQ 高級特性之死信隊列

1. 簡介 在前面的高級特性中&#xff0c;我們介紹了重試機制和 TTL&#xff0c;那么產生下列問題&#xff1a; 在重試機制中&#xff0c;當消費者消費消息發生異常時&#xff0c;會觸發消息重發機制&#xff0c;由于我們配置了最大的重發次數&#xff0c;那么當超過這個次數后…

如何選擇合適的工業相機快門種類

在工業相機領域&#xff0c;常見的三種快門類型&#xff1a;全局快門&#xff08;Global Shutter&#xff09;、卷簾快門&#xff08;Rolling Shutter&#xff09;以及全局復位式卷簾快門&#xff08;Global - reset rolling Shutter&#xff09;。我們主要來講講全局快門&…

uloop源碼剖析

uloop是libubox庫的核心模塊&#xff0c;libubox是OpenWrt基礎庫之一&#xff0c;用來提供事件驅動、基礎數據結構等。 uloop支持文件描述符監控、超時定時器、子進程管理、信號處理事件、間隔定時器等五大核心功能。 主體框架 uloop循環的主體框架有三個函數構成&#xff0c…

Mac電腦 虛擬機 VMware Fusion13

VMware Fusion mac 不僅能讓你在Mac蘋果電腦上運行Windows或Linux系統、使用非Mac平臺的應用&#xff0c;而且還可以支持各種USB硬件設備。 原文地址&#xff1a;VMware Fusion 13 Mac虛擬機

嵌套容器是隱射宿主機的路徑而不是容器的路徑

嵌套容器是隱射宿主機的路徑而不是容器的路徑 為什么&#xff1f;容器中的 Docker 運行流程 為什么&#xff1f; 這個問題涉及 Docker 的工作原理&#xff0c;特別是嵌套容器的行為。讓我們逐步分析為什么在容器內部啟動其他容器時&#xff0c;文件系統的掛載行為是基于 宿主機…

Go語言--語法基礎6--基本數據類型--切片類型

Go 語言切片是對數組的抽象。Go 數組的長度不可改變&#xff0c;在特定場景中這樣的集合就不太適用&#xff0c;Go 中提供了一種靈活、功能強悍的內置類型切片 ("動態數組")&#xff0c;與數組相比切片的長度是不固定的&#xff0c;可以追加元素&#xff0c;在追加時…

?御控物聯網綜合應用實訓平臺-物聯網系統和實驗室實訓系統?

在科技飛速發展的今天&#xff0c;物聯網技術已滲透到各個領域&#xff0c;成為推動產業升級和創新發展的重要力量。對于職業教育和科研機構而言&#xff0c;搭建一套完善的物聯網綜合應用實訓系統&#xff0c;培養適應時代需求的物聯網專業人才&#xff0c;顯得尤為迫切。而御…

ElasticSearch中的分片是什么?

大家好&#xff0c;我是鋒哥。今天分享關于【ElasticSearch中的分片是什么?】面試題。希望對大家有幫助&#xff1b; ElasticSearch中的分片是什么? 超硬核AI學習資料&#xff0c;現在永久免費了&#xff01; 在 Elasticsearch 中&#xff0c;分片&#xff08;Shard&#x…

基于PHP+MySQL組合開發開源問答網站平臺源碼系統 源碼開源可二次開發 含完整的搭建指南

問答網站成為人們獲取知識、交流經驗的重要平臺。無論是專業領域的疑難解答&#xff0c;還是生活常識的分享探討&#xff0c;問答網站都發揮著巨大的作用。對于想要搭建問答網站的個人或企業來說&#xff0c;一款優秀的開源問答網站平臺源碼系統至關重要。今天&#xff0c;我們…

Python工程師面試題集

文章目錄一、Python基礎二、關鍵Python庫三、Web開發四、并發與性能五、系統設計答案區一、Python基礎Python的可變與不可變數據類型有哪些&#xff1f;底層實現原理&#xff1f;Python2與Python3的主要區別解釋GIL全局解釋器鎖及其對多線程的影響裝飾器Decorator的作用與實現原…

什么是碼率?剪映中如何選擇適合的視頻碼率

在視頻編輯過程中&#xff0c;碼率&#xff08;Bitrate&#xff09;是一個決定視頻畫質的關鍵參數。對于普通用戶來說&#xff0c;剪映作為一款功能強大的視頻編輯工具&#xff0c;其默認的碼率設置直接影響最終導出視頻的質量和文件大小。那么&#xff0c;剪映的默認碼率是多少…

專題:2025電商營銷與AI應用發展趨勢報告|附260+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p42834 電商行業在數字經濟浪潮中持續演進&#xff0c;2025年呈現出多平臺發力、技術驅動增長、消費需求多元等特點。快手和抖音作為國內直播電商的重要陣地&#xff0c;各品類銷售表現各有亮點&#xff0c;同時全球電商市場規模穩步…

windows安裝stable diffusion

安裝git https://git-scm.com/downloads/winclone項目 創建一個文件夾&#xff0c;clone下來stable diffusion webui git網址&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git安裝…

Python爬蟲 XPath 三方庫lxml

前言 XPath是Python爬蟲最重要的過濾原始數據的手段之一,是爬蟲最核心的技術 是專業抓取HTML頁面而生的,基本上只用于抓取HTML頁面使用 目錄 安裝支持XPath三方庫lxml XPath代碼入門示例 XPath表達式語法 在源代碼上面直接獲取XPath 安裝支持XPath三方庫lxml pip instal…

深度學習洪水推演:Python融合多源衛星數據可視化南方暴雨災情

目錄1. 引言&#xff1a;多源衛星融合分析的突破性價值2. 多模態融合架構設計3. 雙流程對比分析3.1 單源 vs 多源融合分析3.2 洪水推演核心流程4. 核心代碼實現4.1 多源數據融合處理&#xff08;Python&#xff09;4.2 時空洪水推演模型&#xff08;PyTorch&#xff09;4.3 三維…

「日拱一碼」016 深度學習常用庫——PyTorch

目錄 張量操作 創建張量&#xff1a; torch.tensor() &#xff1a;直接從數據創建張量 torch.zeros() &#xff1a;創建全零張量 torch.ones() &#xff1a;創建全一張量 torch.randn() &#xff1a;創建正態分布隨機張量 torch.arange() &#xff1a;創建等差序列張量 …

【Qt】QStringLiteral 介紹

QStringLiteral 介紹 QStringLiteral 是 Qt 框架中提供的一個宏&#xff0c;用于在編譯時從字符串字面量創建 QString 對象&#xff0c;具有高效和零內存分配的特點。 主要特點 編譯時轉換&#xff1a;將字符串字面量在編譯時轉換為 QString 數據&#xff0c;而不是運行時。…

UI前端與數字孿生結合實踐探索:智慧物流的貨物追蹤與配送優化

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;數字孿生重構智慧物流的技術范式在物流行業數字化轉型的浪潮中&#xff0…