Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7),下个月就是 RC1,紧接着就是 GA!,对于我们 Java 开发者来说,这绝对是个值得关注的好消息!

但是对于 Java 学习者来说,内心难免吐槽一句:又有新东西要学啦!
像我最近在写 AI 相关的项目教程,基于的是 M6 版本,结果突然就来 M7 了,当时还不知道有没有什么破坏性变更,让我不由得心头一紧 “刚写完的教程又得更新了?”
考虑到很多读者还不知道 Spring AI 是什么,这里先简单介绍一下。
Spring AI 介绍
简单来说,Spring AI 就是 Spring 家族为我们 Java 开发者量身打造的、用来简化 AI 应用开发的框架。
Spring AI 提供了构建常见 AI 应用的能力,例如:基于文档的问答、与文档交互的聊天。它的目标就是将数据和 API 无缝连接到 AI 模型中。

这是 Spring AI 官方对其的描述:
The Spring AI project aims to streamline the development of applications that incorporate artificial intelligence functionality without unnecessary complexity.
Spring AI 项目旨在简化集成人工智能功能的应用程序开发,避免不必要的复杂性。
Spring AI 核心想解决这几个问题:
-
提供抽象,屏蔽底层差异: 不管你用的是 OpenAI 的 GPT,还是谷歌的 Gemini,或者是 Anthropic 的 Claude,甚至是 Hugging Face 上的开源模型,Spring AI 都想提供一套统一的、可移植的 API 让你去调用。同样,对于向量数据库(像 Milvus、Pinecone、Redis、PGVector 等),它也提供了统一的 API 和查询方式。这意味着你的代码可以更容易地在不同的 AI 服务和数据库之间切换,不用被某个厂商锁死。
-
简化 AI 应用开发: 构建一个稍微复杂点的 AI 应用,比如 RAG(检索增强生成),涉及到数据加载、切分、向量化、存储、检索、调用 LLM 等一系列步骤。Spring AI 提供了像 ETL 框架、ChatClient、VectorStore 等组件和抽象,大大简化了这些流程的实现。
-
模型与向量数据库支持广泛: 它对接了市面上几乎所有主流的大模型提供商(聊天、文生图模型都支持)和向量数据库。选择非常丰富。
-
深度集成 Spring 生态: 这可是 Spring 的看家本领!提供了各种 Spring Boot Starter,让 AI 模型、向量数据库的配置和集成变得超级简单,遵循“约定大于配置”的原则,开箱即用。
项目地址:https://github.com/spring-projects/spring-ai/tags

Spring AI 1.0.0 M7 改进
Spring AI 1.0.0 M7 号称是最后一个里程碑版本,值得关注一波,下个月就是 RC1,紧接着就是 GA!

这意味着框架的结构和核心 API 趋于稳定了。不过,也正因为如此,M7 带来了一些重要的(破坏性的)变更,主要是为了让整个框架结构更合理、更模块化。大家升级的时候需要注意一下!
下面我会对这个版本的改动做详细的解读,官方解读在这里:https://spring.io/blog/2025/04/10/spring-ai-1-0-0-m7-released 。
1、包名和类路径大调整 (Breaking Change):
-
Starter 的 Artifact ID 变了! 命名规则更加规范了,比如模型相关的 Starter 从
spring-ai-{model}-spring-boot-starter变成了spring-ai-starter-model-{model},向量数据库的也类似。升级时pom.xml或build.gradle文件里的依赖需要修改。 -
一些类的包路径也挪了地方,比如 Content、Media 相关类挪到了
org.springframework.ai.content包下。不过别担心,这些重构你的 IDE(比如 IDEA)应该能自动帮你搞定。
2、核心架构大升级:从“大一统”到“模块化” (Core Architecture Improvements):
这是 M7 最核心的变化!之前的 spring-ai-core 被拆分成了多个更专注的领域模块,比如:
-
-
spring-ai-commons: 最基础的,包含文档(Document)、文本分割器(TextSplitter)等核心模型和工具,不依赖其他 Spring AI 模块。 -
spring-ai-model:负责 AI 能力的抽象,像ChatModel,EmbeddingModel,ImageModel这些接口都在这。 -
spring-ai-vector-store: 统一的向量数据库抽象层。 -
spring-ai-client-chat:更高层的对话式 AI API,像 ChatClient、对话记忆 (ChatMemory) 都在这里。 -
spring-ai-rag: 专门为 RAG 设计的框架。 -
spring-ai-model-chat-memory-*:持久化实现,Cassandra、Neo4j 和 JDBC 实现。 -
......
-
-
好处是啥?
-
按需引入,应用更轻量: 你只需要引入你真正用到的模块,应用的依赖更少,部署包更小。
-
减少依赖冲突: 模块化后,传递性依赖更少,跟其他第三方库冲突的概率也小了。
-
关注点分离更清晰: 每个模块职责更明确。
-
-
升级影响: 如果你之前用的是 Spring AI 的 Starter,那这个变化对你来说应该是透明的,因为 Starter 会自动帮你引入新的模块化依赖。但如果你是直接依赖旧的 spring-ai-core,那这次升级就需要手动调整依赖了。
-
自动配置也模块化了: 配合核心架构的调整,自动配置类也拆分到各个模块对应的 autoconfigure 包里了,同样是为了减少不必要的依赖。

Spring AI 依赖项
3、升级到 MCP 0.9.0 (Breaking Change):
-
Spring AI 集成了最新的 Multimodal Client Protocol (MCP) 参考实现 0.9.0 版本。MCP 是 Spring AI 用于处理多模态交互(比如文本+图像)的一种协议。新版本带来了基于 Session 和 Exchange 的架构改进,更健壮、更符合规范。
-
如果你用到了 MCP 相关的功能,升级时需要参考官方 MCP 升级说明进行代码调整,地址:https://docs.spring.io/spring-ai/reference/upgrade-notes.html#upgrading-to-1-0-0-m7 。
4、模型集成更新与增强 (New and Enhanced Model Integrations):
-
Anthropic Claude: 支持了最新的 Claude 3.7 Sonnet 模型并设为默认,增加了 "thinking" 能力,API 命名向 "tool" 靠拢。
-
Mistral AI: 增加了内容审核模型、自定义 JSON 输出能力。
-
Ollama: 增加了更多模型参数和对新模型的支持(如 LLAMA3_2_3B)。
-
Azure OpenAI / OpenAI: 也有一些选项增强和问题修复。
5、重量级新特性:支持 Docker Desktop 的 Model Runner!
-
Docker Desktop 4.40 版本引入了 Model Runner 功能,可以在本地运行 AI 模型,并提供了一个与 OpenAI API 兼容的本地接口。
-
Spring AI M7 现在原生支持了这个功能!这意味着:
-
你可以在本地(比如 M 系列芯片的 Mac)直接运行像 Gemma 这样的模型,而不需要把数据发送到云端。
-
配置非常简单,只需要在 Spring AI 的 OpenAI 配置里把 base-url 指向本地 Model Runner 的地址(如 http://localhost:12434/engines)就行了,API Key 都可以忽略。
-
所有 Spring AI 的功能(函数调用、流式输出等)都能无缝对接本地模型。
-
-
这对于本地开发、调试、或者注重数据隐私的场景来说,简直是太方便了!
6、工具调用 (Tool/Function Calling) 和多模态能力增强:
-
工具执行框架有改进,比如增加了 ToolExecutionEligibilityPredicate 接口。
-
多模态方面,增强了对 Base64 编码图像的处理能力。
7、文档处理、记忆存储、向量数据库增强:
-
增加了 JSoup HTML 文档读取器。
-
新增了基于 JDBC 和 Neo4j 的 ChatMemory 实现。
-
新增了 Couchbase 向量数据库支持,并对 Milvus、PgVector 等现有向量库做了增强。
8、开发者体验提升:
-
改进了 Spring Boot 自动配置模式。
-
增强了 AOT 和 Native Image 的支持。
-
官方文档也做了更新,增加了 M7 的升级指南和模块架构图。
相关文章:
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7),下个月就是 RC1,紧接着就是 GA!,对于我们 Java 开发者来说,这绝对是个值得关注的好消息! 但是对于 Java 学习者来说,…...
jdk 安装
oracle官网 : Java Archive | Oracle 中国 export JAVA_HOME/Users/xxxxx/app/services/x86jdk/jdk1.8.0_431.jdk/Contents/Home export PATH$JAVA_HOME/bin:$PATH 华为镜像网站:Index of java-local/jdk...
Windows服务器组建与综合服务部署技术方案
目录 一、项目背景与需求分析 1.1 企业网络架构 1.2 核心服务需求矩阵 二、Active Directory与权限管理体系 2.1 用户账户标准化 2.2 文件服务器纵深防御 三、高可用服务集群构建 3.1 分布式文件服务(DFS) 3.2 打印服务高可用方案 四、安全加固与审计体系 4.1 本地安…...
3.2.2.2 Spring Boot配置视图控制器
在Spring Boot中配置视图控制器可以简化页面跳转跳逻辑。通过实现WebMvcConfigurer接口的addViewControllers方法,可以直接将URL映射到特定的视图,而无需编写控制器类。例如,将根路径"/"映射到welcome.html视图,当访问应…...
华为OD机试真题——找出两个整数数组中同时出现的整数(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 华为OD机试真题《找出两个整数数组中同时出现的整数》: 目录 题目名称:找出两个整数数组中同…...
Go 1.24 新方法:编写性能测试用例方法 testing.B.Loop 介绍
Go 开发者在使用 testing包编写基准测试用例时,如果不注意,可能会遇到各种陷阱。这些陷阱,导致基准测试结果不准确。Go1.24 版本引入了一种新的基准测试编写方式,它同样易用,并且可以帮助规避编写基准测试时的一些坑。…...
烽火ai场控接入deepseek自动回复话术软件
要将烽火AI场控软件与DeepSeek自动回复话术软件进行对接,实现直播间自动互动功能,需通过API接口或脚本工具完成数据互通。以下是具体操作步骤及注意事项: 确认兼容性与准备工作 软件支持检查 确认烽火AI场控是否开放API接口(一般需…...
Spring AOP 学习笔记 之 Advice详解
学习材料:https://docs.spring.io/spring-framework/reference/core/aop/ataspectj/advice.html 1. 什么是 Advice(通知) 定义:Advice 是 AOP 的核心概念之一,表示在特定的连接点(Join Point)上…...
【Linux系统】进程地址空间
命令行参数 int main (int argc, char* argv[]) 命令行参数列表 argc:参数的个数argv:参数的清单 int main (int argc, char* argv[]) {printf("argc: %d\n",argc);for(int i 0; i < argc; i){printf("argv[%d] : %s \n", i…...
记录学习的第二十六天
还是每日一题。 今天这道题有点难度,我看着题解抄的。 之后做了两道双指针问题。 这道题本来是想用纯暴力做的,结果出错了。😓...
python成功解决AttributeError: can‘t set attribute ‘lines‘
文章目录 报错信息与原因分析解决方法示例代码代码解释总结 报错信息与原因分析 在使用 matplotlib绘图时,若尝试使用 ax.lines []来清除图表中的线条,会遇到AttributeError: can’t set attribute错误。这是因为 ax.lines是一个只读属性,不…...
测试 认识bug
一、软件测试生命周期与测试模型 1. 软件(开发)生命周期:包括需求分析、计划、设计、编码、测试、运行维护阶段。需求分析是起始点,明确用户需求,后续阶段依此展开 。例如开发电商软件,需求分析阶段确定商品…...
Mysql主从复制有哪些方式
MySQL 主从复制主要有以下几种方式,根据不同的分类标准(如同步机制、数据复制格式、拓扑结构等)可以分为: 一、按同步机制分类 1. 异步复制 (Asynchronous Replication) 原理:主库提交事务后,立即返回给客…...
如何建立可复用的项目管理模板
建立可复用的项目管理模板能够显著提高项目执行效率、减少重复劳动、确保项目管理标准化。在企业中,项目管理往往涉及多个步骤和多个团队,然而每次开始一个新项目时,如果都从头开始设计流程和文档,势必浪费大量的时间和精力。通过…...
Spring Cloud 服务间调用深度解析
前言 在构建微服务架构时,服务间的高效通信是至关重要的。Spring Cloud 提供了一套完整的解决方案来实现服务间的调用、负载均衡、服务发现等功能。本文将深入探讨 Spring Cloud 中服务之间的调用机制,并通过源码片段和 Mermaid 图表帮助读者更好地理解…...
如何使用通义灵码玩转Docker - AI助手提升开发效率
一、引言 Docker 作为一种流行的虚拟化技术,能够帮助开发者快速搭建所需的运行环境。然而,对于初学者来说,掌握 Docker 的基本概念和使用方法可能会遇到一些挑战。本文将介绍如何利用通义灵码这一智能编码助手,帮助你更高效地学习…...
GGML源码逐行调试(下)
目录 前言1. 简述2. 预分配计算图内存2.1 创建图内存分配器2.2 构建最坏情况的计算图2.3 预留计算图内存 3. 分词4. 模型推理与生成4.1 模型推理4.2 采样 结语下载链接参考 前言 学习 UP 主 比飞鸟贵重的多_HKL 的 GGML源码逐行调试 视频,记录下个人学习笔记&#x…...
uniapp的通用页面及组件基本封装
1.基本布局页面 适用于自定义Navbar头部 <template><view class"bar" :style"{height : systemInfo.statusBarHeight px, background: param.barBgColor }"></view><view class"headBox" :style"{ height: param.h…...
YOLO11改进——融合BAM注意力机制增强图像分类与目标检测能力
深度学习在计算机视觉领域的应用取得了显著进展,尤其是在目标检测(Object Detection)和图像分类(Image Classification)任务中。YOLO(You Only Look Once)系列算法凭借其高效的单阶段检测框架和卓越的实时性能,成为目标检测领域的研究热点。然而,随着应用场景的复杂化…...
Spring Boot循环依赖全解析:原理、解决方案与最佳实践
🚨 Spring Boot循环依赖全解析:原理、解决方案与最佳实践 #SpringBoot核心 #依赖注入 #设计模式 #性能优化 一、循环依赖的本质与危害 1.1 什么是循环依赖? 循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系。 典…...
力扣 283 移动零的两种高效解法详解
目录 方法一:两次遍历法 方法二:单次遍历交换法 两种方法对比 在解决数组中的零移动到末尾的问题时,我们需要保持非零元素的顺序,并原地修改数组。以下是两种高效的解法及其详细分析。 方法一:两次遍历法 思路分析…...
「2025AIGC终极形态」AI系统源码:文本→图像→音乐→视频生成
—从技术痛点到企业级部署,手把手实现全流程AI内容工厂 行业核心痛点:为什么需要多模态AIGC系统? 1. 工具割裂,效率低下 传统流程: 文案(ChatGPT)→ 配图(Midjourney)→…...
使用CS Roofline Toolkit测量带宽
使用CS Roofline Toolkit测量带宽 工程下载:使用CS Roofline Toolkit测量带宽-案例工程文件,也可以按照下面的说明使用git clone下载 目录 使用CS Roofline Toolkit测量带宽0、Roofline模型理解1、CS Roofline Toolkit下载1.1、设置代理1.2、git clone下…...
L1-4 拯救外星人
题目 你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“57”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。 本题就请你…...
现代c++获取linux系统名称
现代c获取linux系统名称 前言一、使用命令获取操作系统名称二、使用c代码获取操作系统名称三、验证四、总结 前言 本文介绍一种使用c获取当前操作系统名称的方法 一、使用命令获取操作系统名称 在linux系统中可以使用uname或者uname -s命令来获取当前操作系统名称,…...
力扣刷题HOT100——53.最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出:6…...
Java面试黄金宝典48
1. C++ 的拷贝构造函数,深拷贝和浅拷贝 定义 拷贝构造函数:在 C++ 里,拷贝构造函数属于特殊的构造函数,其功能是使用一个已存在的对象来初始化一个新对象。当对象以值传递的方式作为参数传给函数、函数返回对象、用一个对象初始化另一个对象时,拷贝构造函数会被调用。浅拷…...
QuickAPI 核心能力解析:构建数据服务化的三位一体生态
在企业数据资产化运营的进程中,如何打破数据开发与共享的效率瓶颈,实现从 “数据可用” 到 “数据好用” 的跨越?麦聪软件的 QuickAPI 给出了系统性答案。作为 SQL2API 理念的标杆产品,QuickAPI 通过SQL 编辑器、数据 API、数据市…...
ES和MySQL概念对比
基本概念 ES和MySQL都属于数据库,不过各有各的特性,大致使用方法与MySQL类似并无区别。 MySQL:擅长事务持有ACID的特性,确保数据的一致性和安全。 ES:持有倒排索引,适合海量数据搜索和分析。 ES和MySQL如何…...
Spring如何解决项目中的循环依赖问题?
目录 什么是循环依赖? 如何解决? 采用两级缓存解决 需要AOP的Bean的循环依赖问题? 三级缓存解决 什么是循环依赖? 循环依赖就是Spring在初始化Bean时两个不同的Bean你依赖我,我依赖你的情况 例如A依赖B…...
