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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…