Spring AI 1.0.0 新变化,从 0.8.1 如何升级

Spring AI 1.0.0-M1 版本已经发布,距离 1.0.0 正式版又更近了一步。同时这也意味着,Spring AI 1.0.0 的 API 已经基本确定,不会发生大的改动。这里介绍一下,相对于上一个发布版本 0.8.1,Spring AI 1.0.0 的一些重要的变化。

首先是把与 AI 模型进行交互的 ModelClient 拆分成了两个接口。Model 接口负责与模型进行交互,承接了之前的 ModelClient 的功能。Client 则负责创建调用 Model 时的请求,以及对 Model 返回的结果进行解析。每个不同类型的 Model , 都应该有与之对应的 Client。目前来说,只提供了与 ChatModel 对应的 ChatClient。ChatClient 提供的是流式 API 接口,在设计上类似 Spring 中已有的 RestClient 和 WebClient。

2ca91ba61d93c17d76c0d5df3f10b974.png

ChatClient 由 ChatClient.Builder 来负责创建。在创建时,可以配置 ChatClient 的默认行为。ChatClient 的流式 API,可以对发送给 ChatModel 的 Prompt 进行配置,并对返回的 ChatResponse 进行解析。

使用了 ChatClient 的流式 API 之后,调用大模型并返回结果的基本方式如下所示。

String output = chatClient.prompt().user(input).call().content();

第二个改动是增加了 RequestResponseAdvisor 接口。这个接口的作用是对发送给模型的请求和得到的响应,进行统一的处理。从接口名称中可以看出来,用到的是 AOP 的思想。多个 Advisor 可以串联成一个链条,依次对请求和响应进行处理。多个 Advisor 通过一个 Map 来共享上下文。Spring AI 提供了一些内置的 RequestResponseAdvisor 实现,包括在请求中添加历史消息,以及实现基于向量数据库的问答功能。

public interface RequestResponseAdvisor {default AdvisedRequest adviseRequest(AdvisedRequest request, Map<String, Object> context) {return request;}default ChatResponse adviseResponse(ChatResponse response, Map<String, Object> context) {return response;}default Flux<ChatResponse> adviseResponse(Flux<ChatResponse> fluxResponse, Map<String, Object> context) {return fluxResponse;}}

第三个改动是添加了内置的 Memory 支持,也就是 ChatMemory 接口,以及一个基于内存中的 ConcurrentHashMap 的实现。

public interface ChatMemory {default void add(String conversationId, Message message) {this.add(conversationId, List.of(message));}void add(String conversationId, List<Message> messages);List<Message> get(String conversationId, int lastN);void clear(String conversationId);}

ChatMemory 一般与 RequestResponseAdvisor 搭配使用,以非侵入的方式实现消息历史记录功能。Spring AI 内置提供了 MessageChatMemoryAdvisor 和 PromptChatMemoryAdvisor 两种实现来添加消息历史记录。这两种实现都用到了 ChatMemory。

第四个改动是废弃了解析模型输出的 OutputParser 接口及其实现,改为使用 StructuredOutputConverter 接口及其实现。同样提供了 List、Map 和 Bean 三种内置实现。新的接口及其实现,可以完全替代之前的接口和实现。

5a37564dfa1bbe1fc1c0cc68f6931dea.png

第五个改动是新增了对大模型的输出进行评价的 Evaluator 接口,以及一个默认的实现 RelevancyEvaluator。该默认实现使用大模型来进行评价。

public interface Evaluator {EvaluationResponse evaluate(EvaluationRequest evaluationRequest);}

第六个改动是新增了 DocumentRetriever 接口,表示根据查询条件,获取相关的文档。

public interface DocumentRetriever extends Function<String, List<Document>> {List<Document> retrieve(String query);default List<Document> apply(String query) {return retrieve(query);}}

以上就是 Spring AI 1.0.0 中比较大的变化。

下面看一下怎么从 Spring AI 0.8.1 升级到 1.0.0。最大的改动来自于 ChatClient。Spring Boot 的自动配置功能,不会再创建 ChatClient 对象,取而代之的是创建 ChatClient.Builder 对象,需要从 Builder 中创建出 ChatClient。

Spring Boot 的自动配置功能会创建 ChatModel。也可以自己创建 Builder 对象。在创建 Builder 对象时必须提供的是 ChatModel。ChatClient 的使用方式也发生了变化,根据新的 API 来调整即可。

下面的代码展示了如何从自定义的 ChatClient.Builder 中创建出 ChatClient。

public class AppConfiguration {@Beanpublic ChatClient chatClient(ChatModel chatModel) {return ChatClient.builder(chatModel).build();}
}

如果使用了解析输出的 OutputParser 接口,把每个 OutputParser 实现替换成对应的 StructuredOutputConverter 实现即可。比如,ListOutputParser 替换成 ListOutputConverter。解析时调用的方法,从 parse 改成 convert 即可。功能上并没有什么变化。

其他的功能属于新增的内容,对使用 Spring AI 0.8.1 的代码并没有影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松跨越国界:使用WildCard畅享全球AI服务

大家好&#xff0c;现在AI技术已经深入到我们的日常生活中。然而&#xff0c;许多朋友仍然难以获取优质的AI工具和应用。那么&#xff0c;如何才能使用像ChatGPT这样的AI服务呢&#xff1f; 今天我为大家介绍一个“一劳永逸”的解决方案&#xff0c;它就是我们的主角——WildC…

HDU 1506 Largest Rectangle in a Histogram (DP或单调栈+笛卡尔树)

传送门 题目大意&#xff1a; 有N条的长条状的矩形&#xff0c;宽度都为1&#xff0c;第i条高度为Hi&#xff0c;相邻的竖立在x轴上&#xff0c;求最大的子矩形面积 DP思路及代码 求出当前点能够到达的最左边和最右边的位置&#xff0c;答案就是&#xff08;最右边-最左边&…

阿里云 ECS 服务器的安全组设置

阿里云 ECS 服务器的安全组设置 缘由安全组多个安全组各司其职一些常见的IP段百度 IP 段华为云 IP 段搜狗蜘蛛 IP 段阿里云 IP 段 。。。 缘由 最近公司规模缩减&#xff0c;原有的托管在 IDC 机房的服务器&#xff0c;都被处理掉了&#xff0c;所有代码都迁移到了阿里云的云服…

大模型学习笔记2【大模型】

文章目录 学习内容1.选择基座模型2.验证3.微调4.训练数据5.Instruction Tuning6.训练7.测试8.部署 学习内容 介绍流程 1.选择基座模型 基座模型对结果比较重要&#xff0c;一般选择的流程&#xff1a;首先关注整体性能&#xff08;打榜&#xff09;&#xff0c;其次关注所需…

腾讯云函数部署环境[使用函数URL]

使用函数URL 之前使用的是网关API,最近腾讯云的网关API说要关闭了,所以没有办法这里改成函数URL,使用后发现只要不是在浏览器直接访问的情况,函数URL都可以满足! 这里结合腾讯云函数node.js返回自动带反斜杠这篇文章来做说明,比如这里的URL如下: 结合文章腾讯云函数node.js返…

数组与 ArrayList 的区别是什么?

在Java中&#xff0c;数组和ArrayList都是非常常见的数据结构&#xff0c;但它们在使用场景、特点和功能上各有千秋。 理解它们的不同&#xff0c;对于初级Java工程师来说&#xff0c;是提升编程技能的一个重要环节。 下面&#xff0c;我将以一种简单明了的方式&#xff0c;对…

T113基于评估板SDK配置PD引脚异常

使用PD0/PD1/PD2作为IO输入时,发现输入检测到的值异常,断开输入的信号,直接示波器打IO口,还能发现波形信号,猜测该引脚存在引脚复用情况。 原因 这三个引脚在默认系统是作为显示相关引脚功能。 解决方法 1 ) Uboot修改

99. 岛屿数量

题目描述&#xff1a;给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述&#xff1a…

SSZipArchive 解压后 中文文件名乱码问题

不知道什么情况&#xff0c;做为一个三方广泛使用的框架库&#xff0c;会出现这种比较低级的问题&#xff01; 还有中文的文件名解压后显示乱码&#xff01; 经过深入研究排查&#xff0c;发现目录或文件名编码错误&#xff01;但是POD库&#xff0c;不可能直接在里面改&#…

评估指标rouge安装与测试

github链接 https://github.com/pltrdy/rougegit clone https://github.com/pltrdy/rouge cd rouge python setup.py install新建一个py文件进行测试 注意:不能命名为rouge,否则导入相同的模块会因重名而报错!测试1(文本测试)from rouge import Rouge hypothesis = "…

Objective-C语法基础

注&#xff1a;编译器版本 XCode 15.4 新建一个XCode项目 新建一个类 1、成员变量、属性 1.1、类内使用成员变量&#xff0c;类外使用属性 Role.h #import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGINinterface Role : NSObject {//成员变量&#xff1a;只能…

Ubuntu18.04安装AutoWare.ai(完整版)

目录 目录 一、安装Opencv 1.1 下载安装包Opencv官网 1.2 安装opencv_contrib 二、安装Eigen库 1. 解压文件 2. 安装Eigen 3. 配置路径&#xff1a; 三、安装Ros和rosdepc 四、安装Autoware.ai-1.14.0 4.1 安装依赖 4.2 下载Autoware.ai 1.在home路径下打开终端输…

Linux下系统目录对应的功能介绍

Linux系统的目录结构遵循FHS&#xff08;Filesystem Hierarchy Standard&#xff0c;文件系统层次结构标准&#xff09;&#xff0c;提供一个清晰、一致的目录布局&#xff0c;便于系统维护和升级。 下面是Linux系统目录及其功能和存放内容的详细说明&#xff1a; /bin 功能…

RUP开发模型-系统架构师(二十三)

1、RUP是一个二维软件开发模型&#xff0c;其核心特点之一是&#xff08;&#xff09;。RUP将软件开发周期划分多个循环&#xff0c;每个循环由4个连续阶段组成&#xff0c;每个阶段完成确定的任务。设计及确定系统的体系结构&#xff0c;制定工作计划及资源要求在&#xff08;…

yum使用报错:ImportError: /lib64/libxml2.so.2: file too short

系统版本&#xff1a;Rocky 8.10 报错信息&#xff1a; Traceback (most recent call last):File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 14, in swig_import_helperreturn importlib.import_module(mname)File "/usr/lib64/python3.6/i…

CentOS创建SSH_key

使用命令创建ssh_key&#xff1a;ssh-keygen -t rsa -b 4096 -C "yournameexample.com"。提示创建密码等选项。进入SSH_key保存目录下&#xff0c;查看SSH_key&#xff1a; cd /root/.ssh #进入目录 ls #查看密钥文件将会发现有两个密钥文件&#xff0c;id_rsa, …

【AI学习】无线AI的问题和挑战

无线AI&#xff0c;即无线人工智能&#xff0c;是指内生于未来&#xff08;6G&#xff09;无线通信系统并通过无线架构、无线数据、无线算法和无线应用所呈现出来的新的人工智能技术体系。 最近一直在进行无线AI的调研&#xff0c;感觉真的是路漫漫其修远兮。业界有一些探索&a…

CVPR 2024最佳论文:“神兵”的组合器 Generative Image Dynamics

CVPR 2024的最佳论文来自谷歌、美国加州大学圣迭戈分校。两篇都来至于视频生成领域&#xff0c;可见今年外界对视频生成领域关注度很高。今天的这篇是“Generative Image Dynamics”&#xff0c;Google Research发布的。它的研究成果令人震惊&#xff0c;从单张RGB图像生成连续…

vite安装

参考&#xff1a; https://blog.csdn.net/xhc6666/article/details/135438491 要在项目中安装Vite&#xff0c;你需要使用npm或者yarn。以下是安装Vite的步骤&#xff1a; 打开终端&#xff08;或命令提示符&#xff09;。 确保你已经初始化了一个npm项目&#xff08;如果没…

远程监控在工业机械安全操作中的应用——以汽车起重机为例

远程监控技术&#xff0c;作为现代信息技术的重要分支&#xff0c;正逐渐在各个领域展现其独特的价值。从字面上理解&#xff0c;远程监控可以分为“监”和“控”两部分&#xff1a;其中&#xff0c;“监”指的是通过网络进行信息的获取与传递&#xff0c;实现远程状态的实时感…