spring-ai|Spring‑AI 2.0.0 新特性 + 入门教程
spring-ai|Spring‑AI 2.0.0 新特性 入门教程Spring AI 2.0.0 GA 最低依赖 Spring Boot 4.x、Spring Framework 7、Java21 不再兼容 Spring Boot3 底层切换厂商官方 SDK大量 API 重构稳定性提升面向 Agent、RAG 生产环境一、核心新特性Spring1. 底层架构重大升级全链路 JSpecify 空安全注解大量返回Optional减少 NPEKotlin 友好Options 配置全部改为不可变 Builder 模式移除 setter 方法Spring。Jackson3 序列化新增JsonHelper工具类自定义 JSON 更方便。模型厂商剥离到独立仓库OpenAI、Anthropic 不再内置 http 封装直接使用官方 Java SDKOpenAI 兼容接口依然可用Microsoft ...。部分向量存储移除SAP HANA、Infinispan 被移除需要更换其他向量库。2. Tool‑Calling工具调用Agent 能力大幅增强术语统一FunctionCallback→ToolCallbackfunctions()→tools()行业对齐 Agent 术语Spring。ToolSearchToolCallingAdvisor工具数量多30时不会一次性把全部工具定义传给大模型按需检索工具减少 token 消耗解决上下文膨胀问题支持 regex/lucene/vector 三种索引模式Spring。ToolExecutionEligibilityChecker自定义工具调用循环终止条件灵活控制 Agent 执行逻辑Spring。3. 结构化输出增强Self‑Correcting.entity()结构化输出新增自校验纠错机制模型输出 JSON 不符合 Java Record schema框架自动把错误返回给模型让模型自我修正提升结构化返回成功率同时支持厂商原生结构化输出模式Spring。4. ChatMemory 对话内存改进PromptChatMemoryAdvisor必须显式传入conversationId会话 ID不再隐式自动生成消除会话状态混乱问题生产环境更可控GitHub。MessageWindowChatMemory支持按对话轮次边界截断避免工具消息重复注入内存。5. RAG 与向量存储只读向量存储接口ReadOnlyVectorStore纯检索场景不需要写权限。Advisor 模块包名重构spring‑ai‑advisors‑vector‑store→spring‑ai‑vector‑store‑advisorSpring。6. 可观测性 评估 APIMicrometer 完整可观测自动埋点 token 消耗、调用耗时、模型调用链路对接 Prometheus/Grafana。Evaluation 评估框架自动化评估 RAG 回答质量内置相关性评估、事实校验评估器输出 0‑1 分数用于自动化测试 RAG 系统效果。7. API 变更重点迁移注意Options 类全部移除 setter只能用 Builder 构建OpenAI 属性类重命名OpenAiConnectionProperties→OpenAiCommonProperties旧OpenAiApi自定义 API 层全部删除替换为官方 SDK Client 对象GitHub源码spring-ai-sample: spring ai 和 spring ai alibaba 相关项目学习 demo - Gitee.com部分源码依赖properties spring-boot.version4.0.0/spring-boot.version spring-ai.version2.0.0/spring-ai.version /properties dependencyManagement dependencies !-- 1. Spring Boot 依赖管理替代 parent 的作用 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version${spring-boot.version}/version typepom/type scopeimport/scope /dependency !-- 2. Spring AI 依赖管理 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagementpackage com.kcnf.ai.controller; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.memory.ChatMemory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.util.Map; import java.util.UUID; /** * Spring‑AI 2.0.0 演示Controller * 两个ChatClientBean做隔离 * 2. memoryChatClient装配了MessageChatMemoryAdvisor需要传入ConversationId实现多轮上下文记忆 * */ RestController RequestMapping(/api/ai) public class AiMemoryController { /** * 带记忆Advisor的ChatClient用于多轮对话必须传入会话ID */ private final ChatClient memoryChatClient; public AiMemoryController( Qualifier(memoryChatClient) ChatClient memoryChatClient) { this.memoryChatClient memoryChatClient; } /** * ④多轮记忆对话阻塞版 * POST /api/ai/chat/memory * HeaderConversation‑Id不传自动生成UUID * advisors()给MemoryAdvisor传入会话ID绑定ChatMemory存储的历史消息 */ PostMapping(/chat/memory) public MapString,String chatWithMemory( RequestParam(value message) String message, RequestHeader(value Conversation-Id,required false) String conversationId ){ // 没有传入会话ID生成全新会话 if(conversationId null || conversationId.isBlank()){ conversationId UUID.randomUUID().toString(); } String finalConversationId conversationId; String reply memoryChatClient.prompt() .user(message) // 给记忆Advisor设置会话ID读取/写入该会话历史 .advisors(a - a.param(ChatMemory.CONVERSATION_ID, finalConversationId)) .call() .content(); return Map.of(conversationId,conversationId,reply,reply); } /** * ⑥SSE流式 上下文记忆 * GET /api/ai/chat/memory/stream * Header Conversation‑Id同一个ID历史上下文会被读取 */ GetMapping(value /chat/memory/stream,produces text/event-stream) public SseEmitter chatMemoryStream( RequestParam(value message) String message, RequestHeader(value Conversation-Id,required false) String conversationId ){ SseEmitter emitter new SseEmitter(60_000L); if(conversationId null || conversationId.isBlank()){ conversationId UUID.randomUUID().toString(); } String convId conversationId; memoryChatClient.prompt() .user(message) // 流式请求同样必须指定CONVERSATION_ID .advisors(a - a.param(ChatMemory.CONVERSATION_ID, convId)) .stream() .content() .subscribe( token - { try { emitter.send(SseEmitter.event().data(token)); }catch (Exception e){ emitter.completeWithError(e); } }, emitter::completeWithError, ()-{ try { emitter.send(SseEmitter.event().data(\n会话IDconvId)); }catch (Exception ignored){} emitter.complete(); } ); return emitter; } }演示

相关新闻

【Linux】Ext 系列文件系统深度解析:从 LBA、inode、块组到路径解析、挂载与软硬链接

【Linux】Ext 系列文件系统深度解析:从 LBA、inode、块组到路径解析、挂载与软硬链接

🔥 本文定位:面向已经掌握 Linux 基础命令、准备深入文件系统与系统编程的同学,沿着“块设备 → Ext 布局 → inode → 目录项 → 路径解析 → 挂载 → 链接 → 日志”这条主线,建立一套能真正解释现象的文件系统模型。 &#x1f…

2026/11/11 8:15:30 阅读更多 →
3 分钟让 Figma 变全中文:FigmaCN 免费汉化插件的完整体验指南

3 分钟让 Figma 变全中文:FigmaCN 免费汉化插件的完整体验指南

3 分钟让 Figma 变全中文:FigmaCN 免费汉化插件的完整体验指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 如果你和我一样,第一次打开 Figma 时被满屏英文劝…

2026/11/2 11:05:15 阅读更多 →
VortMall v1.3.15 支付能力升级:Apple Pay、汇付与拉卡拉配置及适用场景

VortMall v1.3.15 支付能力升级:Apple Pay、汇付与拉卡拉配置及适用场景

VortMall 微服务商城系统 v1.3.15 新增 Apple Pay、汇付和拉卡拉三类支付渠道,分别覆盖苹果设备快捷支付、多终端线上收单以及线下门店收银。商家可以根据商城终端、客户群体和履约方式选择对应渠道,补充线上零售、多商户商城及 O2O 门店的收款方案。App…

2026/11/10 6:36:42 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻