SpringAI 彻底炸场!Java 后端不用转 Python,也能快速开发 AI 智能体
前言

过去做AI智能体、RAG知识库、工具调用,几乎被Python的LangChain垄断,Java团队要么被迫转Python写AI服务,要么手写HTTP请求硬调大模型接口,代码杂乱难维护。Spring AI 的出现,让Java后端工程师在熟悉的Spring Boot技术栈内直接开发企业级AI Agent智能体,不用切换语言栈。
一、什么是 Spring AI
Spring AI 是 Spring 官方推出的AI工程框架,把Spring生态「POJO、自动配置、依赖注入、模块化」设计思想迁移到大模型领域。
简单理解:Java世界的LangChain,Spring全家桶原生AI扩展。
核心能力矩阵
- 多模型统一抽象:OpenAI、通义千问、DeepSeek、Claude、Ollama本地模型,一套
ChatClientAPI,切换模型只改依赖与配置,业务代码不动。 - Agent智能体核心:Tool Calling工具调用:通过
@Tool注解,把Java Service方法直接注册给大模型,大模型自主调用你的业务接口、查数据库、调第三方API,实现ReAct自主循环智能体。 - RAG检索增强生成:内置Advisor拦截器,实现文档解析、切片、向量化、向量库检索,一行代码接入知识库问答,适配Milvus、PGVector、Redis、Chroma等向量数据库。
- 结构化输出:直接把大模型返回JSON自动映射为Java POJO实体类,不用手动解析JSON字符串。
- Advisor拦截链:横切能力,记忆管理、RAG、日志打印、限流、工具调用全部作为拦截器组合,类似Spring Filter,低侵入业务代码。
- MCP模型上下文协议:标准化Agent调用外部工具协议,智能体能力可插拔扩展。
- 云原生可观测:对接Micrometer、OpenTelemetry,完整监控大模型调用耗时、token消耗、工具调用链路,满足生产环境运维需求。
Spring AI Alibaba:阿里基于官方Spring AI做的增强版本,对国内大模型(通义千问等)适配更好,内置更多Agent模式、图编排能力。
二、为什么Java后端不用转Python做AI Agent
| 痛点 | 传统方案 | SpringAI方案 |
|---|---|---|
| 技术割裂 | Java业务后端,单独维护一套Python LangChain服务,跨语言调用、两套运维、两套日志监控 | 全部Java实现,复用现有SpringBoot、MyBatis、Redis、权限体系,一个服务搞定业务+AI智能体 |
| 工具调用繁琐 | 手写http拼接FunctionCall JSON,手动解析返回、手动执行方法、组装返回给LLM,大量样板代码 | @Tool注解标记普通Java方法,框架自动生成function schema、自动反射执行、完成Agent循环,几乎零样板代码 |
| RAG开发成本高 | Python写向量处理,Java业务同步文档数据,双端同步容易数据不一致 | Java内完成文档解析、入库向量库、检索,业务数据和AI数据同一套代码流转 |
| 生产运维 | Python服务稳定性、内存、线程模型与Java微服务割裂,链路追踪很难打通 | 复用Spring Actuator、Sleuth链路追踪,AI调用日志直接融入现有监控告警体系 |
不是说Python不好,对于已经是Java微服务的企业,Spring AI避免团队技术栈分裂,原有后端工程师直接上手AI智能体开发,不用重新学习Python生态。
Spring AI VS LangChain4j
- Spring AI:Spring官方,深度绑定Spring Boot,自动配置,Bean管理,适合Spring微服务项目,上手成本极低,Advisor链式架构是最大亮点。
- LangChain4j:Java版LangChain,不依赖Spring容器,灵活,但需要手动组装大量组件,适合非Spring项目。
环境要求:SpringBoot3.5+,Java17+ / Java21,Spring‑AI 2.0.0
1. pom.xml依赖
<properties>
<java.version>21</java.version>
<spring-ai.version>2.0.0</spring-ai.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- openai兼容接口,DeepSeek、通义千问兼容接口都可以用 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
</dependencies>
application.yml配置
spring:
ai:
openai:
api-key: sk-xxx
base-url: https://api.deepseek.com
chat:
options:
model: deepseek-chat
2. 定义工具服务:使用@Tool注解(Agent可调用的Java方法)
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
@Service
public class OrderAgentTools {
/**
* 工具:根据订单号查询订单状态,大模型可以自主调用这个业务方法
*/
@Tool(description = "查询用户订单状态,输入订单编号,返回订单详情、状态、金额")
public String queryOrderStatus(
@ToolParam(description = "用户的订单编号,字符串") String orderNo
) {
// 这里可以调用Mapper查数据库,真实业务逻辑
return "订单["+orderNo+"]状态:已发货,金额:299元,物流单号SF12345678";
}
@Tool(description = "获取当前系统时间")
public String getNowTime() {
return java.time.LocalDateTime.now().toString();
}
}
关键点:@Tool、@ToolParam注解,框架自动解析方法参数、描述生成Function Call JSON Schema,不需要手写任何JSON定义。
3. 构建ChatClient,开启工具调用,写Controller接口
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AgentController {
private final ChatClient chatClient;
// 直接注入工具Bean,注册给ChatClient,开启Agent工具循环
public AgentController(ChatClient.Builder builder, OrderAgentTools orderAgentTools) {
this.chatClient = builder
.defaultTools(orderAgentTools) // 注册全部@Tool工具
.defaultSystem("你是订单客服智能助手,可以调用工具查询订单,不知道就如实说。")
.build();
}
@GetMapping("/ai/agent/chat")
public String agentChat(@RequestParam String question){
// 内部自动执行Agent ReAct循环:大模型决定调用工具→框架执行Java方法→返回结果给LLM→生成最终答案
return chatClient.prompt()
.user(question)
.call()
.content();
}
}
访问接口示例:
GET
/ai/agent/chat?question=帮我查订单号ORD20260820的状态,现在几点?
智能体执行流程:
- LLM识别需要调用2个工具:
queryOrderStatus、getNowTime - Spring AI框架自动调用我们写的Java业务方法拿到返回结果
- 将工具执行结果回传给大模型
- LLM整合信息输出最终自然语言回答,整个ReAct循环框架封装完成,业务代码只需要几行。
流式输出SSE:调用
.stream(),返回Flux,实现打字机效果前端对话。
四、RAG知识库检索增强示例(Advisor拦截器)
Spring AI通过Advisor实现RAG,不需要改写主对话逻辑,类似AOP切面。
// 向量库、文档切分等组件自动装配
public AgentController(ChatClient.Builder builder, VectorStore vectorStore) {
this.chatClient = builder
// RAG检索增强拦截器,用户提问自动去向量库检索相关文档,塞到prompt上下文
.defaultAdvisors(QuestionAnswerAdvisor.builder(vectorStore).build())
.build();
}
用户提问,Advisor自动执行:
用户问题 → Embedding向量化 → VectorStore向量检索 → 把检索到文档片段追加Prompt → LLM生成基于私有文档的回答。
五、主流Agent模式在SpringAI落地
- ReAct单智能体:上面演示的Tool Calling,思考-行动-观察循环,业务客服、运维助手。
- Routing路由智能体:根据用户输入分类,分发给不同专业prompt处理器,比如售后、账单、技术问题分流。
- Orchestrator‑Workers编排‑工作者多智能体:主管Agent拆解复杂任务,分派给多个子Agent并行执行,最后汇总结果,适合复杂规划场景,例如旅游规划、方案生成。
- Reflection反思Agent:执行完任务,大模型自我反思输出结果,修正答案,提升回答质量。
六、生产环境注意点
- 工具调用安全:
@Tool暴露的Java方法做好权限校验,防止Agent调用高危接口,不能把删除、修改数据的接口直接注册为工具。 - 循环保护:Agent工具调用循环设置最大轮次,避免LLM死循环反复调用工具。
- Token管控:对话记忆做好消息压缩,防止上下文无限膨胀token超限。
- 可观测:开启Micrometer监控,记录每一次大模型调用、每一次工具调用日志,方便排查Agent行为异常。
- 国内模型适配:官方SpringAI对国产大模型适配有限,可以选择 Spring‑AI‑Alibaba,内置通义千问、智谱等Starter,MCP、Agent Graph编排能力更强。
七、哪些场景适合用SpringAI做Java Agent
✅ 企业内部业务智能客服:直接操作订单、会员、库存数据库,不用跨Python服务
✅ 私有知识库RAG系统:企业文档、产品手册问答
✅ 运维智能助手:Agent调用后端接口查询服务状态、执行查询任务
✅ ERP/CRM系统内置AI助手,业务与AI一体化部署
✅ 多智能体工作流,任务拆解,业务系统自动处理复杂用户请求
❌ 纯AI算法科研、快速原型Demo验证,Python LangChain依然更灵活,生态组件更丰富。
总结
Spring AI最大价值,打通Java业务系统和大模型之间的鸿沟。
过去Java后端想要做AI智能体,面临技术栈分裂、跨语言服务维护成本高的难题;现在,Java工程师可以继续使用熟悉Spring Boot,用注解定义业务工具,框架封装ReAct Agent循环、RAG向量检索,直接构建可上生产的AI智能体服务,不必强制转Python。
局限:相比成熟的Python LangChain生态,Spring AI高级Agent案例、第三方工具插件数量还在追赶迭代,企业项目优先评估Spring‑AI‑Alibaba增强版本,国内模型适配更友好。
如果你需要,我可以继续写:
- SpringAI完整RAG文档入库+问答完整可运行代码
- Supervisor多智能体(主管+子Agent分工)实战demo
- Spring AI Alibaba ReAct Agent完整示例
- SSE流式对话前后端完整示例。

浙公网安备 33010602011771号