Java 团队做 AI 应用,第一道选择题几乎都是 Spring AI 还是 LangChain4j。两个框架的名字经常被放在一起比,但它们解决的不是同一层问题,选错方向的代价比选错框架大得多。这篇文章把两家的能力边界摆清楚,只讲能落地的差异,不堆功能列表。
先把结论放前面:已经在 Spring Boot 4.x 生态里的团队,选 Spring AI 摩擦最小;需要最广的模型和向量库覆盖、或者根本不绑 Spring 的,选 LangChain4j。往下看理由。
两个框架的定位
Spring AI 2.0.0 在今年 6 月 GA,基于 Spring Boot 4.0 / 4.1 和 Spring Framework 7.0 构建。它的核心是把 AI 能力做成 Spring 生态里的一等公民:自动配置、依赖注入、可观测性都是 Spring 那一套,用写业务代码的方式调模型。官方自己的定位是"AI 世界的 JDBC"——一套 API 通吃多家模型,切换供应商像换数据源。
LangChain4j 从 2023 年初开始做,走的是另一条路:JVM 上的 AI 工具箱,追求覆盖广度。到 1.19.0,它支持的模型和向量存储数量是 Java 生态里最丰富的,框架本身不绑定 Spring,可以跑在 Quarkus、Micronaut 甚至纯 Java 里。
一句话区分:Spring AI 卖的是"集成效率",LangChain4j 卖的是"场景覆盖"。
模型与 MCP 支持
Spring AI 2.0 做了一次收窄。官方明确把核心项目的供应商支持收敛到一组:OpenAI、Anthropic、Amazon Bedrock、Google GenAI、Mistral、DeepSeek、Ollama,并且把 OpenAI、Anthropic、Google 的实现统一到厂商 SDK 上,以便跟上各家的 API 扩展。收敛的好处是行为一致、bug 少;代价是模型覆盖不如 LangChain4j 广。
LangChain4j 的模型支持以"多"著称,30 多个模型开箱即用,向量库覆盖也是最广的。如果团队要接一个冷门供应商或者特殊向量库,LangChain4j 往往已经有人适配好了。
MCP 两家都支持。Spring AI 2.0 用注解把 MCP 工具声明和消费都做进了框架:@McpTool 暴露工具,SyncMcpToolCallbackProvider 消费远程工具。LangChain4j 的 MCP 在 1.19 进入稳定期,配合 MCP 新规范里 Streamable HTTP 无状态化,集成方式在标准化。这一项两家打平,选谁取决于你更熟哪套注解。
工具调用与 Agent
工具调用是这两家最值得对比的地方,因为 2.0 之后的 Spring AI 在这块动了大手术。
Spring AI 1.x 的问题是每个 ChatModel 实现都内嵌了自己的私有工具执行循环,OpenAI 一套、Ollama 一套,行为不一致。2.0 把工具执行循环提升到 Advisor 链,做成一等公民,可组合、可替换:
String answer = ChatClient.builder(chatModel)
.build()
.prompt("帮我查一下今天的退款单量")
.tools(new RefundTools())
.call()
.content();
Advisor 链支持循环重入,工具调用 Advisor 可以重新进入下游链,同一套机制还能用来做结构化输出重试、评估循环。这个设计让工具调用的"循环"从黑盒变成了可以挂东西的钩子。
LangChain4j 走的是声明式 AI 服务,用接口 + 注解把模型交互抽象掉:
interface Assistant {
@SystemMessage("你是客服助手,用中文回答")
String chat(@UserMessage String question);
}
Assistant assistant = AiServices.create(Assistant.class, model);
String answer = assistant.chat("我的退款到哪了?");
两者都能做工具调用和 Agent,但风格不同:Spring AI 强调 ChatClient 的链式调用和 Advisor 组合,LangChain4j 强调接口声明式的简洁。后者在复杂多步逻辑上的 Agent 机制更成熟,前者在工具循环的可插拔上更现代。
对比表
| 维度 | Spring AI 2.0 | LangChain4j |
|---|---|---|
| 定位 | Spring 生态原生 AI 抽象 | 框架无关的 AI 工具箱 |
| Java 版本 | 需 Java 17+(Boot 4.x 基线) | 起步要求更低 |
| 模型覆盖 | 收敛到核心供应商 | 30+ 模型,覆盖最广 |
| 向量库覆盖 | 常用几种 | 最广 |
| MCP | @McpTool 注解 + 双向支持 | 1.19 进入稳定期 |
| 工具调用 | Advisor 链,可组合可替换 | 声明式 AiServices |
| 框架绑定 | 强绑定 Spring | 不绑定,Quarkus/Micronaut 可用 |
| 学习成本 | 低(熟 Spring 即上手) | 中高(写法更杂) |
选型建议
按团队现状对号入座,比纠结"哪个更好"实用:
- 项目已经是 Spring Boot 4.x、团队熟 Spring,要快速把 AI 接进现有系统:Spring AI 2.0,摩擦最小,自动配置、依赖注入、可观测性全现成。
- 项目不是纯 Spring(Quarkus、Micronaut、纯 Java),或要接冷门模型 / 特殊向量库:LangChain4j,覆盖广是它的护城河。
- 要在 Spring 生态里做多 Agent 编排、工作流:看 Spring AI 的衍生项目(比如阿里维护的 Spring AI Alibaba),而不是硬套核心框架。
不适合谁
两个框架都不适合的场景,说清楚能少走弯路:
- 只是想跑一个 demo、不想引 Spring Boot 全家桶:两者都偏重,先用官方 SDK 直接调模型更轻。
- 核心诉求是"确定性、可解释的业务流程编排",而不是"连模型、管向量库":这是另一个层级的问题,Agent 编排类框架解决,别指望在模型接入层里找答案。
- 项目还在 Java 8、且短期不升级:Spring AI 2.0 的 Boot 4.x 基线够不着,LangChain4j 也可能吃紧,先评估升级成本再定。
选型的本质不是选"更强的框架",是选"离你现有工程最近的那个"。两家没有绝对优劣,只有匹配度。