LangChain4j 和 Spring AI 是 Java 生态中实现大模型应用开发的两个最重要的框架,但二者的区别是啥?生产级别又该使用哪种框架?令很多人犯了难,所以本文就来浅聊一下,希望给大家在技术选型时有一个简单的参考。

1.功能对比

LangChain4j 和 Spring AI 的功能是比较类似的,甚至两者可以配合使用,例如使用 Spring AI 实现 MCP 服务器端,再使用 LangChain4j 实现 MCP 客户端调用 Spring AI,二者可以无缝对接。那二者的区别是啥呢?

总体来说,LangChain4j 提供的功能更多,例如实现 RAG 功能时,LangChain4j 提供了三种模式:

  1. 简单模式
  2. 原生模式
  3. 高级模式

在后两种模式实现时提供了:

  1. 文本加载器。
  2. 文档解析器,可以实现多种文本格式的自动解析,例如PDF、DOC、TXT、MD、HTML 等格式的自动解析。
  3. 文本转换器
  4. 文本分割器

每个细节和模块的职责都定义的很清楚,所以实现复杂功能和生产级别业务时更推荐使用 LangChain4j

2.使用和学习成本

LangChain4j 的使用和学习成本比 Spring AI 高很多,举个例子,例如 Spring AI 要实现流式对话,只需要一行代码就搞定了:

@RequestMapping(value = "/streamChat", produces = "text/event-stream")
public Flux<String> streamChat(@RequestParam(value = "msg") String msg) {
return chatModel.stream(msg);
}

而 LangChain4j 实现步骤如下:

  1. 添加 langchain4j-reactor 依赖。
  2. 设置配置文件,配置 streaming-chat-model api-key 和 model-name。
  3. 创建 AI Service 并返回 Flux 对象。
  4. 调用 Ai Service 才能实现流式输出。

具体实现这里就不列举了,大家可以看出来 LangChain4j 的实现复杂度了吧?

类似的场景还有很多,例如 Spring AI 实现 MCP Client 只需要添加依赖,设置配置信息,然后一行 defaultTools 或 tools 设置就可以实现了,如下代码:

ChatClient.builder(chatModel)
.defaultTools(tools.getToolCallbacks())
.build();

但 LangChain4j 的实现就非常复杂了,除了添加依赖之后,你还需要:

  1. 创建传输协议 McpTransport。
  2. 创建 MCP 客户端 McpClient。
  3. 创建 Tools(提供者)对象 ToolProvider。
  4. 构建 AiService。
  5. 执行 MCP Server 调用。

具体实现代码如下:

@RequestMapping("/chat")
public String chat(@RequestParam String question) {
// 1.创建传输协议
McpTransport transport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:8686/sse")
.logRequests(true) // if you want to see the traffic in the log
.logResponses(true)
.build();
// 2.创建 MCP 客户端
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(transport)
.build();
// 3.创建 Tools(提供者)对象
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
// 4.构建 AiService
ToolsAiService aiService = AiServices.builder(ToolsAiService.class)
.chatLanguageModel(chatModel)
.toolProvider(toolProvider)
.build();
// 5.调用 MCP Server
return aiService.chat(question);
}

小结

除了 LangChain4j 的使用复杂之外,LangChain4j 的文档也不全,要么是没有关键实现代码案例、要么是干脆文档写的都是错的,LangChain4j 的坑比较多,最后只能通过看最新的源码才能解决和使用相关功能,所以 LangChain4j 学习和使用成本是非常高的。

3.Spring 生态支持性

Spring AI 是由 Spring 官方提供的,所以它对于整个 Spring 生态的支持是更好的,而且稳定性更好;而 LangChain4j 除了支持 Spring 之外还支持 Java 原生写法,以及 Quarkus 框架,但 LangChain4j 整体对于 Spring 生态的支持就要差一些了,例如它里面的 ImageModel 都没有提供 Spring Boot 自动装配的实现,还有一些大模型例如智普 AI 根本没有提供 Spring Boot 的支持等。

小结

如果是简单功能、开发周期又紧可以使用 Spring AI;如果功能复杂,且定制型要求比较多,可以使用功能和灵活度更高的 LangChain4j。但使用 LangChain4j 这就意味着你需要忍受 LangChain4j 不够简洁的写法,以及学习和使用成本比较高的问题。

本文已收录到我的技术小站 www.javacn.site,其中包含的内容有:Spring AI、LangChain4j、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。

LangChain4j比SpringAI强在哪?一文读懂的更多相关文章

  1. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  2. 一文读懂对抗生成学习(Generative Adversarial Nets)[GAN]

    一文读懂对抗生成学习(Generative Adversarial Nets)[GAN] 0x00 推荐论文 https://arxiv.org/pdf/1406.2661.pdf 0x01什么是ga ...

  3. 一文读懂Java动态代理

    作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...

  4. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  5. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  6. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

  7. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...

  8. [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图

    MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...

  9. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

  10. [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路   http://www.52im.net/thread-1709-1-2.html     本文原作者阮一峰,作者博客:r ...

随机推荐

  1. 最新demo版|如何0-1开发支付宝小程序之前期准备篇(一)

    小程序作为目前一种轻量.便捷的应用.目前应用越来越广泛了. 很多没有开发经验的开发同学可能初次接触就是小程序开发,为了详细讲解下小程序开发的步骤,我会按照小程序的开发流程一步一步从零开始给大家介绍下如 ...

  2. DexExpress Wpf BackstageItemWithImage

    参考链接: https://docs.devexpress.com/WPF/DevExpress.Xpf.Ribbon.BackstageItemWithImage.GlyphStyle 设置 Bac ...

  3. 通过 fork 为项目做出贡献

    本文旨在帮助新手小伙伴了解学习如何参与 GitHub 项目,为其献上自己的一份力,留下属于自己的足迹. 普遍流程 通过 fork 为项目做出贡献一个普遍的流程如下图: sequenceDiagram ...

  4. kalibr标定单相机,自用指南,防忘记

    1. 标定环境 1.1 从源码编译(linux环境,建议ubuntu 18或20) 步骤见 kalibr wiki 1.2 Docker 如果实体机为Ubuntu,则见official docker ...

  5. php-fpm自动重启 解决方案

    环境:Mac.php7.1.nginx 现象:killall php-fpm,php-fpm自动重启 共有如下几种解决方案: 1.检查php-fpm.conf的deamonize模式是否开启 2.查找 ...

  6. 解决bootstrapvalidator配合select2插件不能正常校验的问题

    我在使用bootstrapvalidator对select2插件进行校验时,出现了不能校验的问题,于是求助度娘,发现大多的解决方法是这样的: 1.添加一个隐藏域,将bootstrapvalidator ...

  7. Grafana导入 json 文件的 dashboard 错误 Templating Failed to upgrade legacy queries Datasource xxx not found

    前言 编辑或者修改后的 dashboard 保存为 json 文件,在其他环境导入使用,报错 Failed to upgrade legacy queries Datasource xxxxxxx w ...

  8. gin解决CORS跨域问题

    直接设置跨域参数 新建 cors 文件 package cors import ( "time" "github.com/gin-contrib/cors" & ...

  9. deepseek内网离线部署手册

    前言 在当下 AI 浪潮汹涌的时代,DeepSeek 以其卓越的性能和出色的表现,迅速成为了众多专业人士和科技爱好者热议的焦点工具.在众多AI大模型的比拼中,DeepSeek 展现出了优越的实力.然而 ...

  10. 视觉SLAM十四讲——有关相机运动的汇报

    视觉SLAM十四讲--有关相机运动的汇报 大概用了一个月的时间看完slam十四讲,里面很多内容算是填坑了很多以前遇到的不懂的点,并且脑海里也大致有了一个关于SLAM的框架,现在就这篇文章将其中相机运动 ...