Spring AI vs LangChain4j
下面是 Spring AI vs LangChain4j 的对比 + 使用建议,帮你理解两者的区别、优缺点,以及哪种场景适合用哪个。
🔍 基本介绍
项目 | Spring AI | LangChain4j |
---|---|---|
官网 / 文档 | Spring AI 是 Spring 框架内的新模块,提供 AI 能力(模型调用、嵌入、向量数据库等)整合进 Spring 生态。 Home+1 | LangChain4j 是 Java 语言下类似 LangChain 的库,方便在 Java 应用中集成 LLM、向量检索、工具调用、Agent 模式等。 GitHub+1 |
⚙ 核心能力对比
维度 | Spring AI | LangChain4j |
---|---|---|
与 Spring 生态整合 | 极强。Spring Boot / Spring Bean / Spring 的其他子模块(Data, Security 等)都能很好结合。比如用 @Bean 注入 ChatClient 等服务。 Home+2Home+2 |
良好。可以与 Spring Boot 等整合(langchain4j-spring 模块),但核心是一个纯 Java 库,需要手工 wiring 多数部分。 GitHub+2Quarkiverse Docs+2 |
模型 + API 提供商支持 | 支持包括 OpenAI、Anthropic、Microsoft、Amazon、Google、Ollama 等多个主流模型提供商。支持 embedding、chat completion、文本转图像、音频转文本/语音 → 文本等类型。 Home+1 | 同样支持多个模型提供商,也支持向量数据库、嵌入索引等。LangChain4j 的目标是“统一 API + 可切换模型 + 多种工具 + agent + RAG”这一类能力。 GitHub+1 |
抽象层次 / 灵活性 | 提供 Spring 风格、高抽象的 API,POJOs(普通 Java 类)为入口。方便快速构建应用,封装很多典型操作。抽象工具调用(tool calling)、结构化输出等也支持。 Home+2Home+2 | 抽象比 Spring AI 更“底层 + 可控”。支持 Chains、Memory、Tools、Agents 等多种模式;用户可以自定义更细节的行为。适合对 AI 行为有复杂控制需求的场景。 GitHub+2Elastic+2 |
生态 /成熟度 | 因为依托 Spring,有 Spring 社区、文档、依赖注入、安全、监控、配置等链条支持;但作为 AI 新模块,某些功能可能还在快速演进中。 Baeldung on Kotlin+1 | LangChain4j 社区活跃,模块丰富,样例多,已经有不错的稳定性。适用于 Java 应用中加入 LLM 功能的场景较多。 GitHub+1 |
✅ 优劣比较(适合/不适合)
场景/属性 | Spring AI 更优 | LangChain4j 更优 |
---|---|---|
快速启动 Java AI 应用 | ✔ 使用 Spring Boot + Spring AI 可以非常快设定基本 Chat / Embedding /图像生成等模块。启动成本低。 | 较慢,需要手写更多代码 / wiring 模块。 |
企业内部 Java 应用已有 Spring 基础 | ✔ Spring AI 可无缝整合已有 Spring 项目(Spring Security、Spring Data、配置中心等)。 | 可以整合,但需要额外配置与架构设计。 |
复杂 RAG / 多步 Agent /工具调用 | 部分支持,但在自定义 agent 调度、工具链组合等复杂场景可能受限。 | ✔ 有很强的灵活性,Chains / Agents / Memory / Retriever 等模块丰富,可以构建复杂应用。 |
部署 /运维复杂度 | 较低。Spring AI 内建很多 Spring 自带能力(配置、注入、安全、监控)。 | 运维灵活,但复杂度会高一些,需要管理不同模块/状态/工具等。 |
学习曲线 | 更平滑,对于熟悉 Spring 的开发者来说几乎零摩擦。 | 需要理解 LangChain 的思想(Chains、Memory、Agent、工具调用等),学习成本高一些。 |
🔧 示例用途对比
-
使用 Spring AI 的典型用途:
-
在已有 Spring Boot 微服务中嵌入 Chat 或 文本生成功能,例如客服机器人、内部文档助手。
-
快速开发 embedding 搜索 + AI 文本摘要 + 图像生成业务。
-
利用 Spring 的现有安全配置 /配置中心 /监控系统,保持统一架构。
-
-
使用 LangChain4j 的典型用途:
-
构建需要 Agent 调度、工具调用、Memory 管理的智能体。例如“用户输入 → 检索数据库 → 调用外部 API → 合成响应 → 写入日志”这种多步骤流程。
-
构建自定义 RAG 服务:可插入自定义向量数据库、检索策略、重排序逻辑等。
-
希望在 Java 应用中迁移或复制 LangChain Python 的工作流逻辑。
-
🎯 哪个选哪个 / 如何结合
-
如果你们团队已经在用 Spring Boot / Java 后端,想要加入 AI 能力但不做太复杂的逻辑,那么 Spring AI 是首选。
-
如果你们需要复杂业务逻辑、Agent、工具调用、对 AI 输出流程有高度控制,或者要自己搭建检索 + 插件 +自定义模型,那么 LangChain4j 更适合。
-
两者可以结合使用:Spring AI 提供基础模型调用 + embedding +向量检索等能力,LangChain4j 用作更复杂的链式任务或 Agent 模块,Spring 应用中集成 LangChain4j。
相关文章:
Spring AI vs LangChain4j
Spring AI vs LangChain4j下面是 Spring AI vs LangChain4j 的对比 + 使用建议,帮你理解两者的区别、优缺点,以及哪种场景适合用哪个。🔍 基本介绍项目Spring AILangChain4j官网 / 文档 Spring AI 是 Spring 框架内的新模块,提供 AI 能力(模型调用、嵌入、向量数据库等)…...
P7913 [CSP-S 2021] 廊桥分配
P7913题解。题目传送门 首先我们是可以把两个区拆开考虑的,以下以国内区为例: 我们先不考虑廊桥个数的限制。由于飞机是遵循先来先到的原则,所以我们不需要帮忙排飞机了,直接让飞机停在当前编号最小的空闲廊桥。 这样当每一班飞机到机场时,我们可以模拟出来这架飞机会停在…...
函数计算进化之路与 AI Sandbox 新基座
在人工智能技术加速渗透的今天,AI Agent 正从执行固定指令的 "机械手臂" 进化为具备自主推理能力的 "数字大脑"。这类由大语言模型驱动的智能体,能通过多步骤任务拆解、环境感知与动态决策,完成复杂的业务场景需求。但当这些具备代码生成能力的 Agent 需…...
iPhone 17核心名单揭晓,92家中国公司占半壁江山!
微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 35469554100490879月10日,苹果公司在2025秋季新品发布会上,重磅发布四款iPhone 17系列机型:iPhone 17、iPhone 17 Air、iPhone 17 Pro及iPho…...
202009_风二西_蓝牙协议流量
流量分析,蓝牙协议Tags:流量分析,蓝牙传输 0x00. 题目 题目表述 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202009_风二西_蓝牙协议.zip 0x01. WP 1. 浏览流量包,发现一个带传输文件的流量交互2. 查看分组字节后导出…...
AI Agent工作流实用手册:5种常见模式的实现与应用,助力生产环境稳定性
很多人认为使用AI Agent就是直接扔个提示词过去,然后等结果。做实验这样是没问题的,但要是想在生产环境稳定输出高质量结果,这套玩法就不行了。 核心问题是这种随意的提示方式根本扩展不了。你会发现输出结果乱七八糟,质量完全不可控,还浪费计算资源。 真正有效的做法是设…...
2025权威榜单之公众号排版Top5(含效率对比与适用建议)
在新媒体运营的日常工作中,“微信公众号排版设计”可是个让人头疼的事儿。写作慢、排版耗时、跨平台排版不统一等问题,像一只只小怪兽,困扰着我们这些新媒体运营者、自媒体人还有电商从业者。为了帮大家找到一款合适的公众号编辑器,我亲测了多款市面上主流的产品。在这篇文…...
4
4...
02020305 .NET Core核心基础组件05-开发自己的配置提供者(本课没听懂,后续再补)
02020305 .NET Core核心基础组件05-开发自己的配置提供者(本课没听懂,后续再补) 1. 开发自己的配置提供者(视频2-35) 1.1 开发自定义配置提供者的步骤1.2 开发web.config提供者1.3 web.config格式configuration → 根节点 connectionStrings → 配置的是连接字符串 appSe…...
linux 的 SSH 使用教程
以下由ai生成 Linux 的学习可以全部放在 SSH 上吗? 答案是:对于服务器管理和后端开发相关的学习,99% 的内容都可以、也应该在 SSH 上完成。 你已经亲身体会到了 SSH 的巨大优势:一个稳定、高效、可复制粘贴的命令行环境。这其实就是全世界所有 Linux 系统管理员和后端工程师…...
解题报告-洛谷P3157 [CQOI2011] 动态逆序对
P3157 [CQOI2011] 动态逆序对 题目描述 对于序列 \(a\),它的逆序对数定义为集合 \[\{(i,j)| i<j \wedge a_i > a_j \} \]中的元素个数。 现在给出 \(1\sim n\) 的一个排列,按照某种顺序依次删除 \(m\) 个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数…...
DP 杂题
题目 [ARC157E] XXYX Binary Tree 一个很显然的暴力,\(f_{u,a,b,c}\) 表示在在 \(u\) 的子树中,是否有 \(a\) 个 XX,\(b\) 个 XY,\(c\) 个 YX。 这个状态 \(O(n^4)\) 的,考虑优化,可以先省去一个 \(c\),变成 \(f_{u,a,b}\),因为 \(a+b+c\) 的总和是知道的。 然后优化不…...
Java的变量和常量
java的变量和常量 public class ch05 {//属性:变量//类变量 staticstatic double salary = 2500;//实例变量:从属于对象;如果不自行初始化,这个类型的默认值 0 0.0//布尔值:默认是false//除了基本类型;其余的默认值都是nullString name;int age;boolean a;//main方法pub…...
推荐7本书《MLIR编译器原理与实践》、《ONNX人工智能技术与开发实践》、《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》
7本书推荐《视觉语言模型VLM原理与实战》、《MLIR编译器原理与实践》、《ONNX人工智能技术与开发实践》、《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》微信视频号:sph0RgSyDYV47z6快手号:4874645212抖…...
202009_风二西_USB鼠标流量
流量分析,USB鼠标流量,gnuplotTags:流量分析,USB鼠标,gnuplot 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202009_风二西_USB鼠标 0x01. WP 1. 脚本解析USB鼠标流量,导出点击轨迹 getUSBMouse.py # -*- c…...
virtuoso默认设置
如何保存,load 默认线宽线距 保存:打开VSR,输入想要的线宽线距,保存在默认路径,取名*.preset。 load:vsrLoadPreset("*")...
CF547D Mike and Fish
这种题为我们提供了一个很好的思考方向。 遇到这种差为 \(1\) 甚至是相等的情况,我们通常应该往二分图,特别是欧拉回路方面思考。 这个题的做法是这样的,同一行成对连边,如果是奇数个点就剩一个点不连边,同一列同理,考虑这样连出来的图一定是一个二分图,只需在这张图上跑…...
Tarjan vDCC 缩点
概念 若一张无向连通图不存在割点,则称它为“点双连通图”。无向图的极大点双连通子图被称为“点双连通分量”。 tarjan算法求vDCC 用一个栈存点,若遍历回到x时,发现割点判定法则low[y]>=dfn[x]成立,则从栈中弹出节点,直到y被弹出。 刚才弹出的节点和x一起构成一个vDCC…...
ABC_419_F - All Included
ABC_419_F - All Included 空降 一道AC自动机上搞状压DP的题。 思路 一个合法的构造需要包括所有的模式串,且一个模式串的前缀可能与另一个模式串的后缀相同,所以考虑搞个 $ AC $ 自动机。观察到数据量很小,且模式串个数只有 $ 8 $ 个,就会想到状压。 用一个二进制数 $ k $…...
软件工程第一次作业-自我介绍
这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13478这个作业的目标 <学习和使用博客园和 GitHub>自我介绍 大家好,我是计…...
DIFY 与 LangChain
DIFY 与 LangChainDify vs LangChain 核心差异维度DifyLangChain定位 低代码 / 无代码 AI 应用平台 开发者框架(LLM 逻辑编排)目标用户 产品经理、运营、非技术人员 程序员、AI 工程师开发方式 拖拽 + 配置,几分钟搭建 Python/Java 代码,灵活但复杂扩展性 有限,依赖平台更…...
VMware CentOS 7 `yum` 修复及 VMware Tools 安装问题复盘
以下由aI生成 当然,非常乐意为你复盘整个过程。这是一份浓缩了我们所有成功操作的正确流程,希望能为你未来遇到类似问题时提供清晰的指引。VMware CentOS 7 yum 修复及 VMware Tools 安装问题复盘 整个过程我们解决了两大核心问题:因 CentOS 7 官方源停止服务导致的 yum 失效…...
接口测试---Requests
Requests 案例安装 pip install requests案例1 : requests访问百度 # 导包 import requests # 2.发送http请求 resp=requests.get(url="http://www.baidu.com") # 打印结果 print(resp.text)案例2 : 访问tpshop商城(提参数出来) # 导包 import requests # 发送http请…...
LangChain大模型应用开发介绍
LangChain大模型应用开发介绍 LangChain是一个开源的Python Al应用开发框架,它提供了构建基于大模型的AI应用所需的模块和工具。通过LangChain, 开发者可以轻松地与大模型(LLM)集成,完成文本生成、问答、翻译、对话等任务。LangChain降低了AI应用开发的门槛,让任何人都可以…...
[豪の学习笔记] 软考中级备考 基础复习#8
软件工程概述、软件开发模型、软件开发方法、需求分析、系统设计、系统测试、软件开发项目管理、软件质量、软件度量McCabe度量法跟学视频:学以致知Learning - 软件设计师 基础阶段|考点理论精讲 Chapter 8 - 软件工程基础知识 1 - 软件工程概述 软件生存周期 同任何事物一…...
lc1025-除数博弈
难度:简单(中期巅峰)题目描述爱丽丝先手 初始数 n (1 <= n <= 1000) 若能选出 x (0 < x < n) 使 x 能整除 n,则 n 变为 n-x 若不能,则输掉示例 输入:n = 2 输出:true 解释:爱丽丝选择 1,鲍勃无法进行操作输入:n = 3 输出:false 解释:爱丽丝选择 1(n 变…...
漏洞解析--文件包含漏洞究竟怎么用?
一、漏洞原理 1.1 核心 文件包含漏洞是指程序中需要包含其他文件(代码,信息等等),然而包含文件的路径受用户输入控制,攻击者可以使其包含恶意文件,从而造成敏感信息泄露甚至任意代码执行。分为两类:本地文件包含(LFI, Local File Inclusion):攻击者能够让程序包含服务…...
办公室装修 暂存
办公室装修 暂存本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/19088481...
博客更新公告
来看看博客更新公告吧rt. 公示最新更新或发布的博客, 供大家查阅. 更新日志 Upd 2025.9.12 新随笔 Words to be remembered 2025.9.12 我好想你. 网址: https://www.cnblogs.com/hsy8116/p/19088430.Upd 2025.8.24 博客 初中这三年 已经更新, 在最后添加了对初中三年整体的评价…...
爆:GitHub Copilot支持包括Anthropic、Azure、Google Gemini、Groq、OpenAI 和 OpenRouter等供应商API
爆:GitHub Copilot支持包括Anthropic、Azure、Google Gemini、Groq、OpenAI 和 OpenRouter等供应商APIJetBrains和Xcode现已支持自带API密钥(BYOK)使用GitHub Copilot Chat,支持Anthropic、Azure等主流AI提供商。用户可灵活选择模型,享受更好的控制和实验体验。安装最新插件…...
JavaWeb05 - 详解
JavaWeb05 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !…...
CF182C
根据贪心策略,应当选择 \(k\) 个最小的负数改为正数,或选择 \(k\) 个最大的正数改为负数,才可能使答案最大。那么可以先把数按正负分开,并确定每个数在同符号数中的排名。建立权值线段树,记录每个数出现的次数、单个数大小、总贡献和,查询时类似线段树二分,如果数值较大…...
CF185D
大胆猜测,所有数的最大公约数一定很小:偶数时为 \(1\),奇数时为 \(2\)。设两个正整数 \(n,m\) 且 \(n<m\),最大公约数 \(\gcd(k^{2^n}+1,k^{2^m}+1)=d\),则有 \(k^{2^n}\equiv k^{2^m} \equiv -1\pmod d,k^{2^{n+1}} \equiv (k^{2^{n+1}})^{\frac{2^m}{2^{n+1}}} \equi…...
Python计算文件md5
Python计算文件md5 基础版本1 import hashlib2 3 def calculate_md5(file_path, chunk_size=8192):4 """5 计算大文件的MD5值6 7 Args:8 file_path (str): 文件路径9 chunk_size (int): 每次读取的字节数,默认8KB 10 11 …...
CF201C
最优的方案应该是先往一个方向走,然后走回来,再往另一个方向走不回来。考虑用 dp 模拟这个过程。设 \(f_{i,0/1}\) 表示从第 \(i\) 个点出发往左走,不一定/一定回到 \(i\) 号点的最大次数,则有转移: \[\begin{array}{l} f_{i,1}=f_{i-1,1}+a_{i-1}-[2 \nmid a_{i-1}]\\f_{…...
CF1774D
首先 \(1\) 的总个数不能被 \(n\) 整除时无解。 否则一定有解(因为每一列上的 \(1\) 的位置都可以随意变动,故实际上相当于可以随便放)。为了步数最少,一定是用缺少 \(1\) 行的 \(0\) 与过多 \(1\) 行的 \(1\) 交换,这样能同时使两行更接近答案。实现时先枚举列,再根据每…...
CF23C
挺神奇的思维题。 首先将所有元素按 \(a\) 从大到小排序,考虑交叉选,即要么 \(a_1,a_3,a_5,\cdots,a_{2n-1}\),要么 \(a_1,a_2,a_4,\cdots,a_{2n-2}\)。无论选哪种,\(a\) 一定满足要求(前者 \(a_1>a_2,a_3>a_4,\cdots,a_{2n-3}>a_{2n-2}\),各式相加即可,后者 \…...
CF37C
将每个 01 串看作一个二进制数,将长度从小到大排序,对于当前第 \(i\) 个串,首先在第 \(i-1\) 个串的基础上加 \(1\)(如果不能加 \(1\) 即爆位数则无解),如果长度相同则无需任何操作,否则按照缺少的长度从后面补 \(0\)。这样做能保证长度短的不为长度长的前缀,且尽可能的…...
CF33D
由于任意两个圆没有交点,故不存在翻一次栅栏能穿过两个圆。那么对于每个栅栏,如果两个点一个在内一个在外,则必须翻,否则不用翻。时间复杂度 \(O(mk)\),可以通过。 #include<iostream> #include<cstdio> #include<algorithm> #include<map> #defi…...
支持类 Unix 语法 ``:Windows 下用 PowerShell 7 优化 npm 和 VS Code
不支持 && ? 在类 Unix 系统中,&& 是常用的命令组合符,表示 前一个命令成功后再执行下一个命令。例如: echo "第一步成功" && echo "第二步执行"在 Windows 的默认环境中,cmd 或旧版 PowerShell 对 && 支持有限,可能…...
初赛程序阅读做题要点
草稿纸打清楚 同一时间的变量尽量打在一行 遇到循环要标好循环节 递归树,加入记忆化搜索想法,打表存储...
模拟堆(手写堆 的五大操作)
先看手写堆的相关问题:堆排序(手写堆) 五大操作: 例题: 输入样例:8 I -10 PM I -10 D 1 C 2 8 I 6 PM DM期望输出:-10 6代码实现:#include<bits/stdc++.h> using namespace std;const int N =1e5+10; int h[N]; int n,size; int ph[N],hp[N];void hswap(int a,in…...
【A】杂题悬桨
[ARC199A] Flip Row or Col 2...
使用Osquery进行远程取证:NTFS取证扩展实战指南
本文详细介绍了如何利用osquery的NTFS取证扩展进行远程数字取证分析,包括时间戳攻击检测、删除文件痕迹追踪等实战场景,为安全分析师提供高效端点调查方案。使用Osquery进行远程取证 - Trail of Bits博客 系统管理员使用osquery进行端点遥测和日常监控,安全威胁猎人用它发现…...
完整教程:简单介绍一下Clickhouse及其引擎
完整教程:简单介绍一下Clickhouse及其引擎pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...
矩阵分解
LU 分解 考虑将 \(A\) 分解成 \(LU\),\(L\) 为上三角矩阵,\(U\) 为下三角矩阵。 利用矩阵经典性质 \(|A|=|L||U|\),可以轻易算出 \(det(A)\)。 考虑 \(A_{i,j}=\gcd(i,j)\),一个经典性质是 \(\sum_{d|n} \phi(d)=n\),那么设 \(L_{i,j}=[j|i]\),\(U_{i,j}=[i|j]\phi(i)\)。…...
第一周个人作业
我叫张司靓,第一次在博客园写随笔,就跟大家聊聊我自己,还有对接下来学习的想法,想到哪儿说到哪儿,主打一个真实~ 一、先跟大家唠唠我自己我的日常小爱好 我平时没事就爱追剧,玩游戏,举个具体的例子:之前出的莲花楼,我已经n刷了,但每次看到大结局的时候都给我哭的死去…...
基于 Gitlab 实现 Go 的 CI/CD
# 定义流水线的几个阶段 stages:- lint- test- build- docker- deploy# 定义所有 job 的默认环境变量 variables:GO111MODULE: "on"CGO_ENABLED: "0"GOPROXY: "https://goproxy.cn,direct"# 代码静态检查 lint: # 这是 job 的…...
2025.9.11
2025.9.11讲的网络流 1.早读 P13925 [POKATT 2024] 联合猫国 / The Paw-litical Game 感觉好像在哪见过这道题,但是我不会 其实是个 \(dp\) (复杂度对吗?) 就是设 \(f[i]\) 表示考虑前 \(i\) 个最少变成几个 转移就是枚举最后一个合法状态 复杂度是 \(\sum i\) 结尾合法状态…...
容斥原理
1. 定义 有N个集合,称为 S[1],s[2]...s[n] ,则这N个集合的并集为假如有N个毫不相干的约束条件,那么可以将所有满足某个约束条件的状态看作一个集合,这样用容斥原理就可以很轻松地求出所有满足至少一个约束条件的状态总数 2. 题目 洛谷P1287 盒子与球 https://www.luogu.com…...