SpringAI的简单理解

发布时间:2026/8/20 14:09:20

SpringAI的简单理解
SpringAISpring AI 是 Spring 官方针对人工智能AI应用开发推出的标准化框架。它的核心宗旨是将 Spring 开发者熟悉的“依赖注入、统一抽象、声明式配置、面向接口编程”等生态优势完美复刻到 AI 和大模型开发领域。Java 程序员想在项目里接入大模型、搞 RAG 知识库或者搞 AgentSpring AI 就是量身定制的大模型开发脚手架。Spring AI 如何调用模型Spring AI 推荐使用ChatClientSpring Boot 会根据 starter 和配置自动创建ChatModel、EmbeddingModel与ChatClient.Builder。Spring AI ChatClient 文档1. Maven 依赖使用 OllamadependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion2.0.0/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-ollama/artifactId/dependency/dependencies该 starter 同时提供 Ollama Chat 和 Embedding 自动配置。Spring AI Ollama 文档2. 模型配置application.ymlspring:ai:ollama:base-url:http://localhost:11434chat:options:model:qwen3:8btemperature:0.7embedding:options:model:qwen3-embedding:0.6b确保本地已经存在模型模型下载详情见https://blog.csdn.net/sinat_32502451/article/details/163534744ollama pull qwen3:8b ollama pull qwen3-embedding:0.6b3. 使用 ChatClient 调用模型packagecom.example.ai;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.stereotype.Service;importreactor.core.publisher.Flux;ServicepublicclassAiChatService{privatefinalChatClientchatClient;publicAiChatService(ChatClient.BuilderchatClientBuilder){this.chatClientchatClientBuilder.build();}/** * 同步调用模型。 */publicStringchat(Stringquestion){returnchatClient.prompt().user(question).call().content();}/** * 携带系统提示词调用模型。 */publicStringchat(StringsystemPrompt,Stringquestion){returnchatClient.prompt().system(systemPrompt).user(question).call().content();}/** * 流式调用模型。 */publicFluxStringstream(Stringquestion){returnchatClient.prompt().user(question).stream().content();}}核心调用只有StringanswerchatClient.prompt().system(你是一个 Java 技术助手).user(介绍一下 Spring AI).call().content();各方法含义prompt()创建一次模型请求。system()设置系统提示词。user()设置用户消息。call()同步调用模型。stream()流式调用模型。content()取得模型返回的文本。4. 提供 REST 接口packagecom.example.ai;importorg.springframework.http.MediaType;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importreactor.core.publisher.Flux;RestControllerRequestMapping(/api/ai)publicclassAiController{privatefinalAiChatServiceaiChatService;publicAiController(AiChatServiceaiChatService){this.aiChatServiceaiChatService;}/** * 普通问答。 */GetMapping(/chat)publicStringchat(RequestParamStringquestion){returnaiChatService.chat(question);}/** * 流式问答。 */GetMapping(value/stream,producesMediaType.TEXT_EVENT_STREAM_VALUE)publicFluxStringstream(RequestParamStringquestion){returnaiChatService.stream(question);}}普通调用curlhttp://localhost:8080/api/ai/chat?question介绍一下Spring%20AI流式调用curl-Nhttp://localhost:8080/api/ai/stream?question介绍一下Spring%20AI5. 使用底层 ChatModelChatClient底层使用的是ChatModel。如果需要更直接地控制调用可以直接注入packagecom.example.ai;importorg.springframework.ai.chat.model.ChatModel;importorg.springframework.ai.chat.model.ChatResponse;importorg.springframework.ai.chat.prompt.Prompt;importorg.springframework.stereotype.Service;ServicepublicclassLowLevelChatService{privatefinalChatModelchatModel;publicLowLevelChatService(ChatModelchatModel){this.chatModelchatModel;}/** * 直接通过 ChatModel 调用模型。 */publicStringchat(Stringquestion){PromptpromptnewPrompt(question);ChatResponseresponsechatModel.call(prompt);returnresponse.getResult().getOutput().getText();}}也可以显式构造消息importjava.util.List;importorg.springframework.ai.chat.messages.SystemMessage;importorg.springframework.ai.chat.messages.UserMessage;importorg.springframework.ai.chat.model.ChatResponse;importorg.springframework.ai.chat.prompt.Prompt;SystemMessagesystemMessagenewSystemMessage(你是一个 Java 技术助手);UserMessageuserMessagenewUserMessage(Spring AI 是什么);PromptpromptnewPrompt(List.of(systemMessage,userMessage));ChatResponseresponsechatModel.call(prompt);Stringanswerresponse.getResult().getOutput().getText();6. 调用 Embedding 模型Spring Boot 同样会自动创建EmbeddingModel。Spring AI Ollama Embedding 文档packagecom.example.ai;importjava.util.List;importorg.springframework.ai.embedding.EmbeddingModel;importorg.springframework.stereotype.Service;ServicepublicclassAiEmbeddingService{privatefinalEmbeddingModelembeddingModel;publicAiEmbeddingService(EmbeddingModelembeddingModel){this.embeddingModelembeddingModel;}/** * 将一段文本转换为向量。 */publicfloat[]embed(Stringtext){returnembeddingModel.embed(text);}/** * 批量将文本转换为向量。 */publicListfloat[]embedAll(ListStringtexts){returnembeddingModel.embed(texts);}}使用float[]vectoraiEmbeddingService.embed(Spring AI 模型调用示例);System.out.println(vector.length);底层交互过程Java 代码chatClient.prompt().user(你好).call().content();Spring AI 内部执行ChatClient ↓ OllamaChatModel ↓ 将 Prompt 转换成 Ollama JSON 请求 ↓ POST http://localhost:11434/api/chat ↓ Ollama 调用 qwen3:8b ↓ JSON 响应转换为 ChatResponse ↓ content() 返回文本Embedding 调用则是EmbeddingModel.embed(text) ↓ OllamaEmbeddingModel ↓ POST http://localhost:11434/api/embed ↓ qwen3-embedding:0.6b ↓ 返回 float[] 向量Java 业务代码本身是供应商无关的。以后切换到 OpenAI、Azure OpenAI 或其他模型时通常只需要更换 starter 和application.ymlChatClient、ChatModel、EmbeddingModel的调用代码可以保持不变。资料spring-ai官方文档 https://docs.spring.io/spring-ai/reference/index.html

相关新闻

大模型上下文管理实战:5种压缩策略对抗Context Rot

大模型上下文管理实战:5种压缩策略对抗Context Rot

2026/8/20 14:09:20

1. 先搞清楚“上下文管理”到底在管什么 如果你用过 ChatGPT、Claude 这类大模型,肯定遇到过对话太长后,模型开始“胡言乱语”的情况:它要么忘记你开头说了什么,要么把不同角色的对话内容搞混,甚至开始凭空捏造信息。这…

ARM架构下进程和线程的核心区别(切换+创建)

ARM架构下进程和线程的核心区别(切换+创建)

2026/8/20 14:09:20

疑问:为什么进程的切换开销比线程大? 进程切换全流程 1. 触发调度,进入内核态进程 A 正在用户态运行,CPU 接到中断信号。硬件自动保存现场: 在进入内核异常处理程序前,CPU 硬件会自动完成以下原子操作&…

交流充电桩互操作性测试:从标准到实践,解决“充不上电”的兼容性难题

交流充电桩互操作性测试:从标准到实践,解决“充不上电”的兼容性难题

2026/8/20 14:09:20

1. 从“充不上电”的尴尬说起:为什么我们需要互操作性测试? 如果你是一位电动汽车车主,或者从事过充电桩的安装、运维工作,大概率遇到过这样的场景:你的爱车开到一台陌生的公共充电桩前,扫码、插枪&#xf…

魔兽争霸3还能再战十年:WarcraftHelper免费辅助工具,一次解决现代电脑上的兼容性难题

魔兽争霸3还能再战十年:WarcraftHelper免费辅助工具,一次解决现代电脑上的兼容性难题

2026/8/20 14:59:22

魔兽争霸3还能再战十年:WarcraftHelper免费辅助工具,一次解决现代电脑上的兼容性难题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelpe…

YoloMouse 游戏光标更换完整指南:三分钟上手,让每款游戏的鼠标指针都听你的

YoloMouse 游戏光标更换完整指南:三分钟上手,让每款游戏的鼠标指针都听你的

2026/8/20 14:59:22

YoloMouse 游戏光标更换完整指南:三分钟上手,让每款游戏的鼠标指针都听你的 【免费下载链接】YoloMouse Game Cursor Changer 项目地址: https://gitcode.com/gh_mirrors/yo/YoloMouse YoloMouse 是一款专为游戏场景设计的开源光标更换工具&#…

当系统弹出“此 Mac 已不支持“:OpenCore Legacy Patcher 把 2007 年的老 Mac 一路续到 Sequoia

当系统弹出“此 Mac 已不支持“:OpenCore Legacy Patcher 把 2007 年的老 Mac 一路续到 Sequoia

2026/8/20 14:59:22

当系统弹出"此 Mac 已不支持":OpenCore Legacy Patcher 把 2007 年的老 Mac 一路续到 Sequoia 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patche…

动物森友会修改器 NHSE 完整上手指南:零基础把存档玩出花

动物森友会修改器 NHSE 完整上手指南:零基础把存档玩出花

2026/8/20 14:59:22

动物森友会修改器 NHSE 完整上手指南:零基础把存档玩出花 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE 存档编辑器(Animal Crossing: New Horizons save editor&…

NBTExplorer快速上手全攻略:一次看懂Minecraft存档数据编辑

NBTExplorer快速上手全攻略:一次看懂Minecraft存档数据编辑

2026/8/20 14:59:22

NBTExplorer快速上手全攻略:一次看懂Minecraft存档数据编辑 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer NBTExplorer是一款免费开源的NBT编辑器&…

MAUI Windows应用集成Meadow物联网开发板模拟环境实战

MAUI Windows应用集成Meadow物联网开发板模拟环境实战

2026/8/20 14:49:22

1. 项目概述:在MAUI Windows应用中运行Meadow 最近在折腾一个物联网原型项目,需要在Windows电脑上实时显示并控制一些传感器数据。手头正好有 Wilderness Labs 的 Meadow 开发板,它跑的是 .NET nanoFramework,非常适合嵌入式场景。…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/19 9:17:18

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

2026/8/20 0:08:45

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com…

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

2026/8/20 0:08:45

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 判断你是否…

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

2026/8/20 0:08:45

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 按 3MF 官方规范的字面意思,一…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…