Spring AI 和 LangChain4j ,哪个更好?

0 阅读9分钟

前言

最近几个月,我的技术交流群里被问得最多的问题就是:“苏三哥,我想在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领域

开源地址:github.com/spring-proj…

框架的核心理念是推广使用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库的空白。

开源地址:github.com/langchain4j…

它的设计理念是:为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 AILangChain4j
模型支持主流模型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的场景

  1. 项目基于Spring Boot/Cloud:希望以最低成本引入AI能力
  2. 快速原型开发:需要快速搭建智能客服、内容生成等相对标准的AI应用
  3. 企业级需求:需要Spring的监控、安全、配置管理等企业特性
  4. 团队对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的场景

  1. 需要复杂AI工作流:构建自主决策、多工具协作的智能体
  2. 项目非Spring技术栈:使用Quarkus、Micronaut等框架
  3. 深度定制需求:需要更底层控制或扩展性
  4. 熟悉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作为补充

两者不是非此即彼的关系,而是可以共存的工具。