前言
最近几个月,我的技术交流群里被问得最多的问题就是:“苏三哥,我想在Java项目里接入大模型,LangChain4j和Spring AI,到底选哪个?”
有些小伙伴可能已经发现,2025年是Java AI框架爆发的关键节点。
Spring AI在2025年5月正式发布1.0 GA版本,LangChain4j持续迭代到1.11.0并新增混合检索功能,阿里云也推出了AgentScope-Java和Spring AI Alibaba。
面对这些选择,不少Java开发者陷入了选择困难症。
今天这篇文章专门跟大家一起聊聊LangChain4j和Spring AI如何选择的话题,希望的对你会有所帮助。
更多项目实战在项目实战网:java突击队
1 设计哲学
任何技术选型,首先要理解的是设计者的初衷。
1.1 Spring AI
让AI开发像写Spring Boot一样自然。
Spring AI是Spring官方团队推出的AI应用开发框架,它的核心设计目标非常明确:将Spring生态系统的设计原则(可移植性、模块化、依赖注入)应用到AI领域。
框架的核心理念是推广使用POJO作为AI应用的构建块,让开发者能用熟悉的方式开发AI应用。
Spring AI在2025年5月20日正式发布1.0 GA版本,标志着Spring生态在AI领域的重要布局。它借鉴了Python的LangChain和LlamaIndex的设计思想,同时保持了Spring特有的编程风格。
1.2 LangChain4j
把Python LangChain的威力带到Java。
LangChain4j则是LangChain在Java生态中的官方实现,始于2023年初,旨在填补Java生态缺乏与Python、JavaScript同等水平LLM库的空白。
它的设计理念是:为Java和Kotlin开发者提供完整的LLM应用开发工具链,无需Python桥接,原生支持Java。
从设计哲学的差异可以看出:Spring AI追求的是“Spring式”的开发体验,LangChain4j追求的是“LangChain式”的功能完整。
2 核心特性
理论说再多,不如直接看代码。
我们用一个实际需求来对比:构建一个智能客服助手,需要能调用外部工具查询订单状态。
2.1 Spring AI的实现方式
首先,Spring AI的依赖配置非常Spring风格:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter</artifactId>
<version>2.0.0-M2</version>
</dependency>
配置文件也很简洁:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4
然后定义工具类:
@Component
public class OrderTools {
@Autowired
private OrderService orderService;
@Tool(description = "根据订单号查询订单状态")
public String getOrderStatus(String orderId) {
Order order = orderService.findByOrderId(orderId);
if (order == null) {
return "未找到订单";
}
return String.format("订单状态:%s,下单时间:%s",
order.getStatus(), order.getCreateTime());
}
}
@Service
public class CustomerService {
@Autowired
private ChatClient chatClient;
public String handleQuery(String userMessage) {
return chatClient.prompt()
.user(userMessage)
.tools(new OrderTools()) // 注册工具
.call()
.content();
}
}
Spring AI 2.0.0-M2版本还加强了空安全API,整个代码库迁移到JSpecify规范,编译时就能检测空指针问题。
这种体验确实很"Spring"——声明式、配置驱动、与Spring Boot无缝集成。
2.2 LangChain4j的实现方式
再看LangChain4j,依赖配置稍显复杂但也很清晰:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-core</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.11.0</version>
</dependency>
代码实现:
public class CustomerServiceAgent {
public static class OrderTools {
@Tool("根据订单号查询订单状态")
public String getOrderStatus(@Tool("订单号") String orderId) {
// 查询订单逻辑
return "订单状态:已发货";
}
}
public static void main(String[] args) {
ChatModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-4")
.build();
// 使用AiServices构建智能体
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(model)
.tools(new OrderTools())
.build();
String answer = assistant.chat("帮我查一下订单123456的状态");
System.out.println(answer);
}
interface Assistant {
String chat(String userMessage);
}
}
LangChain4j的AiServices是它的核心抽象,从官方文档可以看到,它支持非常丰富的功能:系统消息模板、用户消息模板、会话记忆、RAG、工具调用、多种返回类型(String、POJO、枚举、TokenStream)等。
2.3 代码风格差异分析
从这两个例子能看出本质区别:
- Spring AI:充分利用Spring的依赖注入和自动配置,代码量更少,对Spring开发者极其友好
- LangChain4j:更注重功能的完整性,
AiServices提供了丰富的配置选项,但需要手动装配
3 功能丰富度
在功能覆盖面上,LangChain4j目前有明显优势。
3.1 模型与向量存储支持
LangChain4j支持30多个主流LLM模型(OpenAI、Claude、Gemini、Qwen等)和20多个嵌入存储(Elasticsearch、Pinecone、Weaviate、Qdrant等)。
Spring AI也在快速追赶,但支持的模型和存储数量相对较少。
3.2 RAG(检索增强生成)能力
LangChain4j 1.11.0版本刚刚发布了PgVector混合检索功能,支持向量检索和关键词检索的融合,大幅提升RAG准确率。
从源码看,它通过一个CTE查询同时执行向量检索和全文检索,再用RRF算法融合结果:
WITH vector_search AS (
-- 向量检索,按余弦距离排序
SELECT embedding_id, text,
RANK() OVER (ORDER BY embedding <=> :referenceVector) AS rnk
FROM embeddings
ORDER BY embedding <=> :referenceVector
LIMIT :candidateCount
),
keyword_search AS (
-- 关键词检索,PostgreSQL原生全文检索
SELECT embedding_id, text,
RANK() OVER (ORDER BY ts_rank(
to_tsvector(:config, coalesce(text, '')),
plainto_tsquery(:config, :query)
) DESC) AS rnk
FROM embeddings
WHERE to_tsvector(:config, coalesce(text, ''))
@@ plainto_tsquery(:config, :query)
ORDER BY ts_rank(...) DESC
LIMIT :candidateCount
)
-- FULL OUTER JOIN合并,RRF公式算最终分数
SELECT COALESCE(v.embedding_id, k.embedding_id) AS embedding_id,
COALESCE(1.0 / (:rrfK + v.rnk), 0.0)
+ COALESCE(1.0 / (:rrfK + k.rnk), 0.0) AS score
FROM vector_search v
FULL OUTER JOIN keyword_search k ON v.embedding_id = k.embedding_id
...
这种深度集成的能力,体现了LangChain4j在功能细节上的用心。
3.3 智能体(Agent)能力
在Agent领域,LangChain4j提供了更丰富的模式。
Devoxx的workshop专门讨论了从LLM编排到自主Agent的演进,涵盖动态决策、记忆、工具使用、MCP和A2A集成等高级主题。
Spring AI虽然也支持工具调用,但在多智能体协作、自主决策等复杂场景上,功能相对基础。
功能对比表格:
| 维度 | Spring AI | LangChain4j |
|---|---|---|
| 模型支持 | 主流模型 | 30+模型,更丰富 |
| 向量存储 | 部分支持 | 20+存储,更全面 |
| RAG能力 | 基础功能 | 混合检索、高级RAG |
| Agent能力 | 工具调用 | 链、智能体、多智能体协作 |
| 记忆管理 | 基础 | 多种内存策略 |
| 流式处理 | 支持 | 支持 |
| 函数调用 | 支持(@Tool) | 支持(@Tool) |
4 生态集成
虽然功能上LangChain4j领先,但生态集成是Spring AI的绝对主场。
4.1 Spring生态深度集成
Spring AI与Spring Boot、Spring Cloud无缝集成,提供自动配置、Actuator监控、依赖注入等特性。
对于已有Spring技术栈的企业,引入Spring AI几乎零成本。
4.2 阿里云的增强版本
阿里巴巴基于Spring AI推出了Spring AI Alibaba,进一步增强了多智能体编排能力(SupervisorAgent、SequentialAgent、LoopAgent),并与阿里云的模型、工具、Nacos、Higress AI网关等深度集成。
对于国内企业,这意味着更完善的技术支持和企业级特性。
4.3 LangChain4j的多框架支持
LangChain4j虽然也支持Spring Boot(社区提供Starter),但它更注重框架中立性,同样可以无缝集成到Quarkus、Micronaut等其他Java框架中。
如果你的项目不是Spring技术栈,LangChain4j会是更灵活的选择。
5 社区成熟度与学习曲线
5.1 社区成熟度
LangChain4j基于Python LangChain的设计理念,在AI应用开发模式上积累了丰富的实践经验。它的社区更早起步,功能迭代更激进。
Spring AI虽然相对较新,但有Spring官方团队背书,社区活跃度增长迅速。Spring AI 2.0.0-M2版本包含94项变更,包括36项改进和16个bug修复,展现出稳健的迭代节奏。
5.2 学习曲线
Spring AI的学习曲线更平缓:如果你熟悉Spring Boot,上手Spring AI可能只需要半天。它的设计理念就是让开发者用熟悉的方式开发AI应用。
LangChain4j的学习曲线相对陡峭:需要理解Chain、Tool、Memory、Agent等一系列新概念。但一旦掌握,能驾驭更复杂的AI应用场景。
6 选型指南
根据上面的分析,我给出以下选型建议:
6.1 选Spring AI的场景
- 项目基于Spring Boot/Cloud:希望以最低成本引入AI能力
- 快速原型开发:需要快速搭建智能客服、内容生成等相对标准的AI应用
- 企业级需求:需要Spring的监控、安全、配置管理等企业特性
- 团队对Spring生态熟悉:希望复用现有技术积累
// Spring AI快速实现RAG示例
@Service
public class RagService {
@Autowired
private VectorStore vectorStore;
@Autowired
private ChatClient chatClient;
public String query(String question) {
// 1. 向量检索
List<Document> documents = vectorStore.similaritySearch(question);
// 2. 增强提示
String prompt = """
基于以下资料回答问题:
%s
问题:%s
""".formatted(documents, question);
// 3. 生成答案
return chatClient.prompt(prompt).call().content();
}
}
6.2 选LangChain4j的场景
- 需要复杂AI工作流:构建自主决策、多工具协作的智能体
- 项目非Spring技术栈:使用Quarkus、Micronaut等框架
- 深度定制需求:需要更底层控制或扩展性
- 熟悉Python LangChain:希望保持类似设计模式
// LangChain4j多工具Agent示例
public class ResearchAgent {
interface Researcher {
@SystemMessage("你是一个研究助手,可以联网搜索、查阅文档、总结信息")
String research(@UserMessage String query);
}
public static void main(String[] args) {
Researcher researcher = AiServices.builder(Researcher.class)
.chatLanguageModel(model)
.tools(new WebSearchTool(), new DocumentReaderTool(), new SummaryTool())
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();
// 智能体会自主决定调用哪些工具
String result = researcher.research("Spring AI和LangChain4j的优缺点对比");
}
}
6.3 混合使用方案
还有一种折中方案:用Spring AI管理模型调用和基础设施,用LangChain4j实现复杂链和智能体。
两者可以共存于同一个项目中,发挥各自优势。
更多项目实战在项目实战网:java突击队
7 未来展望
从最近的发展看,两个框架都在快速进化:
- Spring AI:2.0版本加强空安全API、MCP协议支持、更多向量存储集成
- LangChain4j:1.11.0版本强化混合检索、Agentic模式支持流式和多模态
- Spring AI Alibaba:提供Graph工作流编排、AgentScope集成、企业级解决方案
- AgentScope-Java:以Agentic为核心设计,提供ReActAgent、ReMe记忆管理等
未来12个月,两者在功能上的差距会逐渐缩小,但设计哲学的根本差异会持续存在。
总结
回到最初的问题:LangChain4j和Spring AI,哪个更好?
我的答案是:没有绝对的好坏,只有适合与否。
- Spring AI像“官方配餐”——如果你在Spring生态中、需要快速落地标准AI应用,它能让开发效率最大化
- LangChain4j像“自助餐”——如果你需要构建复杂AI智能体、深度定制、跨框架支持,它提供更丰富的选择
有些小伙伴可能会纠结:我们团队用Spring Boot,但未来可能需要复杂AI能力。
我的建议是:先用Spring AI快速验证业务价值,遇到复杂工作流时引入LangChain4j作为补充。
两者不是非此即彼的关系,而是可以共存的工具。