文章目录前言先搞明白Spring AI到底是个啥环境准备先把装备捡起来第一滴血用最少的代码聊上天Prompt模板别让拼接字符串恶心到自己拥抱国产通义千问零成本接入进阶玩法让AI调用你的Java方法避坑指南老哥踩过的雷你别踩第一个坑超时问题第二个坑上下文长度第三个坑费用控制写在最后Javaer的AI时代真来了无意间发现了一个CSDN大神的人工智能教程忍不住分享一下给大家。很通俗易懂重点是还非常风趣幽默像看小说一样。床送门放这了 http://blog.csdn.net/jiangjunshow前言说实话前两年Java程序员在AI这波浪潮里确实有点憋屈。看着Python圈那帮兄弟天天折腾Transformer、LangChain咱们还在Spring Boot里CRUD心里那个痒啊。要不怎么说Spring团队懂咱们呢Spring AI这框架一出来Javaer终于不用酸了咱们也能优雅地玩大模型而且玩得还挺溜。今天这篇就跟你唠唠怎么用Spring AI这把瑞士军刀把你的Java项目武装成AI应用。不整那些花里胡哨的概念直接上手撸代码保证你看完就能跑起来。先搞明白Spring AI到底是个啥你要是没接触过可能以为这又是个什么高深框架。其实说白了Spring AI就是Spring团队给咱们做的一层翻译官。你想啊现在大模型厂商那么多OpenAI、阿里通义、百度文心、智谱GLM每家都有自己的API格式要是你挨个对接那不得写一堆适配代码头发都得掉光。Spring AI就干了一件事统一接口。它把各种大模型的调用方式封装成了一样的API就像JDBC统一了数据库访问一样。你今天用OpenAI明天想切到国产模型改几行配置就搞定代码根本不用动。这叫啥这就叫面向接口编程老Spring传统了。而且我跟你说这玩意儿现在2026年3月已经相当稳了1.0版本早就Release不是那种玩具项目。Spring官方亲自维护生态也起来了连阿里都专门出了Spring AI Alibaba来支持通义千问排面拉满。环境准备先把装备捡起来开搞之前得把环境整明白。Spring AI要求Spring Boot 3.2以上JDK 17起步。你要是还在用JDK 8那确实该升级了这年头连AI都嫌弃老版本。pom.xml 核心依赖org.springframework.boot spring-boot-starter-parent 3.2.5 com.alibaba.cloud.ai spring-ai-alibaba-starter 1.0.0-M2看到那个1.0.0-M2没这是2025年的里程碑版本相当稳定了。别用那些0.x的老版本坑多。第一滴血用最少的代码聊上天环境搭好先来最简单的Hello World——让AI回你一句话。Spring AI搞了个ChatClient这设计真挺直觉的跟RestTemplate一个套路。RestControllerpublicclassChatController{privatefinalChatClientchatClient;// 构造函数注入Spring自动装配publicChatController(ChatClient.BuilderchatClientBuilder){this.chatClientchatClientBuilder.build();}GetMapping(/chat)publicStringchat(RequestParamStringmsg){// 就这一行完事了returnchatClient.prompt().user(msg)// 用户说的话.call()// 发起调用.content();// 拿到AI回复的字符串}}看到没比你写个JDBC查询还简单。prompt()开始构建提示user()塞用户输入call()发请求content()取结果。链式调用 fluent API写起来真挺顺手。配置文件里把API Key填上以OpenAI为例spring:ai:openai:api-key:${OPENAI_API_KEY}chat:options:model:gpt-4o-mini# 成本考虑用这个性价比高temperature:0.7# 创意度0.7比较平衡跑起来浏览器访问http://localhost:8080/chat?msgJava未来会被AI取代吗就能看到AI回复。整个过程不到10分钟这效率以前用HttpClient自己封装那会儿想都不敢想。Prompt模板别让拼接字符串恶心到自己实际业务里咱不可能直接把用户输入丢给AI得包装一下。比如你要做个专业面试官功能得告诉AI“你现在是个资深Java面试官请对以下简历进行评价…”要是用字符串拼接那代码丑得没法看。Spring AI提供了PromptTemplate跟Spring的StringTemplate一个感觉干净得很。ServicepublicclassInterviewService{privatefinalChatClientchatClient;publicInterviewService(ChatClientchatClient){this.chatClientchatClient;}publicStringevaluateResume(StringresumeContent){// 模板定义用{}占位Stringtemplate 你是一位拥有10年经验的Java技术面试官擅长考察候选人的系统 design 能力。 请对以下简历内容进行专业评价指出优点和不足并给出模拟面试问题3-5个 简历内容{resume} 要求 1. 评价要具体别整那些虚的 2. 如果候选人有分布式经验重点考察一致性协议理解 3. 输出格式用Markdown好看点 ;PromptTemplatepromptTemplatenewPromptTemplate(template);PromptpromptpromptTemplate.create(Map.of(resume,resumeContent));returnchatClient.prompt(prompt).call().content();}}看到那个{resume}没这就是占位符create()方法把真实内容填进去。这样模板和业务数据分离代码看着舒服多了。而且模板里还能用{currentDate}这种内置变量Spring AI自动帮你填充省得自己new Date()。拥抱国产通义千问零成本接入说实话现在这环境用国内大模型更稳妥而且阿里云给的免费额度挺香。Spring AI Alibaba就是专门干这个的集成得贼丝滑。改下依赖和配置spring:ai:dashscope:api-key:${DASHSCOPE_API_KEY}# 阿里云控制台申请免费领额度chat:options:model:qwen-turbo# 或者 qwen-max看你要速度还是智商**代码层完全不用动**还是那个ChatClient还是那套API。这就是Spring AI的牛逼之处——抽象层做得够厚底层换模型跟换数据库连接池一样无感。而且我跟你说通义千问现在2026年3月的代码能力真不差特别是中文理解有时候比GPT-4o还懂人话。写注释、生成CRUD代码、解释祖传屎山都挺好使。进阶玩法让AI调用你的Java方法光聊天还不够得让AI能动手。比如用户问“查查我账户余额还剩多少” AI不能瞎编啊得真的去调你的Service查数据库。这叫Function Calling或者Tool UseSpring AI支持得挺好。先定义一个工具类publicclassAccountTools{AutowiredprivateUserServiceuserService;// 这个方法要给AI用必须加这个注解BeanDescription(查询指定用户的账户余额)// 这个描述很重要AI靠它理解这函数干啥的publicFunctionqueryBalance(){returnrequest-{// 真实业务逻辑BigDecimalbalanceuserService.getBalance(request.userId());returnnewBalanceResponse(request.userId(),balance,LocalDateTime.now());};}}// 请求和响应得定义成record方便序列化publicrecordBalanceRequest(StringuserId){}publicrecordBalanceResponse(StringuserId,BigDecimalamount,LocalDateTimequeryTime){}然后在调用时注册这个工具GetMapping(/smart-chat)publicStringsmartChat(RequestParamStringmsg){returnchatClient.prompt().user(msg).functions(queryBalance)// 告诉AI你可以用这个工具.call().content();}这时候如果用户问我账户还有多少钱AI不会瞎编数字而是会回调你的queryBalance方法拿到真实数据再组织语言回复。整个过程对调用方是透明的AI自己决定要不要用工具用哪个工具聪明得很。避坑指南老哥踩过的雷你别踩写到这儿得给你提个醒几个坑我帮你踩过了第一个坑超时问题大模型有时候想得久默认30秒可能不够。记得在RestClientSpring AI底层用的HTTP客户端里调超时时间BeanpublicChatClientcustomChatClient(ChatClient.Builderbuilder){// 通过自定义HttpClient调超时returnbuilder.defaultOptions(OpenAiChatOptions.builder().withHttpClient(HttpClient.create().responseTimeout(Duration.ofSeconds(60))).build()).build();}第二个坑上下文长度Spring AI默认只维护单轮对话要实现多轮得自己把历史记录传进去。简单做法是用ChatMemory接口有现成的InMemoryChatMemory实现ServicepublicclassChatService{privatefinalChatClientchatClient;privatefinalChatMemorychatMemorynewInMemoryChatMemory();// 存对话历史publicStringchat(StringsessionId,StringuserMessage){// 把历史记录塞进去ListhistorychatMemory.get(sessionId);StringresponsechatClient.prompt().messages(history)// 带上历史.user(userMessage).call().content();// 更新记忆chatMemory.add(sessionId,newUserMessage(userMessage));chatMemory.add(sessionId,newAssistantMessage(response));returnresponse;}}第三个坑费用控制千万别在循环里无脑调AI那账单能吓死你。生产环境一定要加限流或者用本地缓存存常见问题的答案。写在最后Javaer的AI时代真来了你看从头到尾咱们没写几行胶水代码就把大模型能力集成进Spring Boot了。这就是Spring生态的厉害之处——它总能在技术普及时机成熟时给出一套企业级的解决方案让咱们这些写业务代码的也能追上技术潮流。2026年这会儿AI应用已经从玩具变成生产力工具了。你用Spring AI做个智能客服、简历筛选、代码Review助手甚至自动SQL优化器都是实打实能提升效率的东西。而且Java这生态部署运维监控一条龙成熟得很比你用Python脚本东拼西凑稳定多了。所以啊别观望了把Spring AI加到你下个项目的pom.xml里试试。刚开始可能觉得AI回复有点人工智障多调调Prompt换个好点的模型配合Function Calling给足上下文效果真挺惊艳的。毕竟咱们Java程序员学习能力那是经过检验的从Spring到Spring Boot再到Spring Cloud哪次不是后来居上这次AI也一样上手了你就会发现真香。
Java+AI爆发!Spring AI集成大模型实战,3月19日最新可用版
文章目录前言先搞明白Spring AI到底是个啥环境准备先把装备捡起来第一滴血用最少的代码聊上天Prompt模板别让拼接字符串恶心到自己拥抱国产通义千问零成本接入进阶玩法让AI调用你的Java方法避坑指南老哥踩过的雷你别踩第一个坑超时问题第二个坑上下文长度第三个坑费用控制写在最后Javaer的AI时代真来了无意间发现了一个CSDN大神的人工智能教程忍不住分享一下给大家。很通俗易懂重点是还非常风趣幽默像看小说一样。床送门放这了 http://blog.csdn.net/jiangjunshow前言说实话前两年Java程序员在AI这波浪潮里确实有点憋屈。看着Python圈那帮兄弟天天折腾Transformer、LangChain咱们还在Spring Boot里CRUD心里那个痒啊。要不怎么说Spring团队懂咱们呢Spring AI这框架一出来Javaer终于不用酸了咱们也能优雅地玩大模型而且玩得还挺溜。今天这篇就跟你唠唠怎么用Spring AI这把瑞士军刀把你的Java项目武装成AI应用。不整那些花里胡哨的概念直接上手撸代码保证你看完就能跑起来。先搞明白Spring AI到底是个啥你要是没接触过可能以为这又是个什么高深框架。其实说白了Spring AI就是Spring团队给咱们做的一层翻译官。你想啊现在大模型厂商那么多OpenAI、阿里通义、百度文心、智谱GLM每家都有自己的API格式要是你挨个对接那不得写一堆适配代码头发都得掉光。Spring AI就干了一件事统一接口。它把各种大模型的调用方式封装成了一样的API就像JDBC统一了数据库访问一样。你今天用OpenAI明天想切到国产模型改几行配置就搞定代码根本不用动。这叫啥这就叫面向接口编程老Spring传统了。而且我跟你说这玩意儿现在2026年3月已经相当稳了1.0版本早就Release不是那种玩具项目。Spring官方亲自维护生态也起来了连阿里都专门出了Spring AI Alibaba来支持通义千问排面拉满。环境准备先把装备捡起来开搞之前得把环境整明白。Spring AI要求Spring Boot 3.2以上JDK 17起步。你要是还在用JDK 8那确实该升级了这年头连AI都嫌弃老版本。pom.xml 核心依赖org.springframework.boot spring-boot-starter-parent 3.2.5 com.alibaba.cloud.ai spring-ai-alibaba-starter 1.0.0-M2看到那个1.0.0-M2没这是2025年的里程碑版本相当稳定了。别用那些0.x的老版本坑多。第一滴血用最少的代码聊上天环境搭好先来最简单的Hello World——让AI回你一句话。Spring AI搞了个ChatClient这设计真挺直觉的跟RestTemplate一个套路。RestControllerpublicclassChatController{privatefinalChatClientchatClient;// 构造函数注入Spring自动装配publicChatController(ChatClient.BuilderchatClientBuilder){this.chatClientchatClientBuilder.build();}GetMapping(/chat)publicStringchat(RequestParamStringmsg){// 就这一行完事了returnchatClient.prompt().user(msg)// 用户说的话.call()// 发起调用.content();// 拿到AI回复的字符串}}看到没比你写个JDBC查询还简单。prompt()开始构建提示user()塞用户输入call()发请求content()取结果。链式调用 fluent API写起来真挺顺手。配置文件里把API Key填上以OpenAI为例spring:ai:openai:api-key:${OPENAI_API_KEY}chat:options:model:gpt-4o-mini# 成本考虑用这个性价比高temperature:0.7# 创意度0.7比较平衡跑起来浏览器访问http://localhost:8080/chat?msgJava未来会被AI取代吗就能看到AI回复。整个过程不到10分钟这效率以前用HttpClient自己封装那会儿想都不敢想。Prompt模板别让拼接字符串恶心到自己实际业务里咱不可能直接把用户输入丢给AI得包装一下。比如你要做个专业面试官功能得告诉AI“你现在是个资深Java面试官请对以下简历进行评价…”要是用字符串拼接那代码丑得没法看。Spring AI提供了PromptTemplate跟Spring的StringTemplate一个感觉干净得很。ServicepublicclassInterviewService{privatefinalChatClientchatClient;publicInterviewService(ChatClientchatClient){this.chatClientchatClient;}publicStringevaluateResume(StringresumeContent){// 模板定义用{}占位Stringtemplate 你是一位拥有10年经验的Java技术面试官擅长考察候选人的系统 design 能力。 请对以下简历内容进行专业评价指出优点和不足并给出模拟面试问题3-5个 简历内容{resume} 要求 1. 评价要具体别整那些虚的 2. 如果候选人有分布式经验重点考察一致性协议理解 3. 输出格式用Markdown好看点 ;PromptTemplatepromptTemplatenewPromptTemplate(template);PromptpromptpromptTemplate.create(Map.of(resume,resumeContent));returnchatClient.prompt(prompt).call().content();}}看到那个{resume}没这就是占位符create()方法把真实内容填进去。这样模板和业务数据分离代码看着舒服多了。而且模板里还能用{currentDate}这种内置变量Spring AI自动帮你填充省得自己new Date()。拥抱国产通义千问零成本接入说实话现在这环境用国内大模型更稳妥而且阿里云给的免费额度挺香。Spring AI Alibaba就是专门干这个的集成得贼丝滑。改下依赖和配置spring:ai:dashscope:api-key:${DASHSCOPE_API_KEY}# 阿里云控制台申请免费领额度chat:options:model:qwen-turbo# 或者 qwen-max看你要速度还是智商**代码层完全不用动**还是那个ChatClient还是那套API。这就是Spring AI的牛逼之处——抽象层做得够厚底层换模型跟换数据库连接池一样无感。而且我跟你说通义千问现在2026年3月的代码能力真不差特别是中文理解有时候比GPT-4o还懂人话。写注释、生成CRUD代码、解释祖传屎山都挺好使。进阶玩法让AI调用你的Java方法光聊天还不够得让AI能动手。比如用户问“查查我账户余额还剩多少” AI不能瞎编啊得真的去调你的Service查数据库。这叫Function Calling或者Tool UseSpring AI支持得挺好。先定义一个工具类publicclassAccountTools{AutowiredprivateUserServiceuserService;// 这个方法要给AI用必须加这个注解BeanDescription(查询指定用户的账户余额)// 这个描述很重要AI靠它理解这函数干啥的publicFunctionqueryBalance(){returnrequest-{// 真实业务逻辑BigDecimalbalanceuserService.getBalance(request.userId());returnnewBalanceResponse(request.userId(),balance,LocalDateTime.now());};}}// 请求和响应得定义成record方便序列化publicrecordBalanceRequest(StringuserId){}publicrecordBalanceResponse(StringuserId,BigDecimalamount,LocalDateTimequeryTime){}然后在调用时注册这个工具GetMapping(/smart-chat)publicStringsmartChat(RequestParamStringmsg){returnchatClient.prompt().user(msg).functions(queryBalance)// 告诉AI你可以用这个工具.call().content();}这时候如果用户问我账户还有多少钱AI不会瞎编数字而是会回调你的queryBalance方法拿到真实数据再组织语言回复。整个过程对调用方是透明的AI自己决定要不要用工具用哪个工具聪明得很。避坑指南老哥踩过的雷你别踩写到这儿得给你提个醒几个坑我帮你踩过了第一个坑超时问题大模型有时候想得久默认30秒可能不够。记得在RestClientSpring AI底层用的HTTP客户端里调超时时间BeanpublicChatClientcustomChatClient(ChatClient.Builderbuilder){// 通过自定义HttpClient调超时returnbuilder.defaultOptions(OpenAiChatOptions.builder().withHttpClient(HttpClient.create().responseTimeout(Duration.ofSeconds(60))).build()).build();}第二个坑上下文长度Spring AI默认只维护单轮对话要实现多轮得自己把历史记录传进去。简单做法是用ChatMemory接口有现成的InMemoryChatMemory实现ServicepublicclassChatService{privatefinalChatClientchatClient;privatefinalChatMemorychatMemorynewInMemoryChatMemory();// 存对话历史publicStringchat(StringsessionId,StringuserMessage){// 把历史记录塞进去ListhistorychatMemory.get(sessionId);StringresponsechatClient.prompt().messages(history)// 带上历史.user(userMessage).call().content();// 更新记忆chatMemory.add(sessionId,newUserMessage(userMessage));chatMemory.add(sessionId,newAssistantMessage(response));returnresponse;}}第三个坑费用控制千万别在循环里无脑调AI那账单能吓死你。生产环境一定要加限流或者用本地缓存存常见问题的答案。写在最后Javaer的AI时代真来了你看从头到尾咱们没写几行胶水代码就把大模型能力集成进Spring Boot了。这就是Spring生态的厉害之处——它总能在技术普及时机成熟时给出一套企业级的解决方案让咱们这些写业务代码的也能追上技术潮流。2026年这会儿AI应用已经从玩具变成生产力工具了。你用Spring AI做个智能客服、简历筛选、代码Review助手甚至自动SQL优化器都是实打实能提升效率的东西。而且Java这生态部署运维监控一条龙成熟得很比你用Python脚本东拼西凑稳定多了。所以啊别观望了把Spring AI加到你下个项目的pom.xml里试试。刚开始可能觉得AI回复有点人工智障多调调Prompt换个好点的模型配合Function Calling给足上下文效果真挺惊艳的。毕竟咱们Java程序员学习能力那是经过检验的从Spring到Spring Boot再到Spring Cloud哪次不是后来居上这次AI也一样上手了你就会发现真香。