LangChain4J开源开发框架简介
目录
- 1.1、前言
- 1.2、集成方式简单
- 1.3、核心功能与优势
- 1.4、两种调用方式
- 1.5、链式调用示例代码
- 1.6、AI服务调用示例代码
- 1.7、典型使用场景
- 1.8、总结
1.1、前言
LangChain4J 是一个专为 Java 开发者设计的开源框架,旨在简化大型语言模型(LLMs)在应用中的集成。它借鉴了 Python 版 LangChain 的核心思想,但针对 Java 生态进行了优化,帮助开发者快速构建基于 LLM 的智能应用,例如聊天机器人、自动化流程和知识库系统等。
LangChain4J 降低了 Java 开发者集成 LLM 的门槛,尤其适合需要与企业现有系统(如数据库、API)深度结合的场景。其模块化设计和链式编排能力,使得构建复杂 AI 应用变得更加高效。如果你熟悉 Java 生态并希望快速接入大模型,LangChain4J 是一个值得尝试的工具。
1.2、集成方式简单
LangChain4j的目标是简化将LLM集成到Java应用程序中的过程。具体如下:
- 统一接口调用
LLM提供商(如OpenAI或Google Vertex AI)和嵌入(矢量)存储(如Pinecone或Milvus)都有专用的API。这使得开发者在使用不同的LLM模型和嵌入存储时需要编写不同的代码,比较繁琐。LangChain4j提供了一个统一的API,便捷开发者在使用不同的LLM或嵌入存储时,只需修改参数配置,而无需重写代码。从而简化了LLM集成。 - 丰富的工具箱
自2023年初以来,社区一直在构建许多基于LLM的应用程序,确定常见的抽象、模式和技术。LangChain4j已经将这些改进为现成的包。我们的工具箱包括从低级提示模板、聊天内存管理和函数调用到代理和RAG等高级模式的工具。对于每种抽象,我们都提供了一个接口以及基于常见技术的多个即用型实现。无论您是在构建聊天机器人,还是在开发从数据摄取到检索的完整管道的RAG,LangChain4j都提供了多种选择。这是使得LangChain4j具备很强的扩展模型能力,不仅可以集成外部 API、数据库、搜索引擎(如 Google 搜索)还可以使用自定义 Java 工具。 - 众多的示例代码
这些示例展示了如何开始创建各种 LLM 驱动的应用程序。 提供灵感并使您能够快速开始构建。示例代码
1.3、核心功能与优势
- 与超过15家LLM 提供商集成
- 与超过20家嵌入(向量)存储集成
- 与超过15个嵌入模型集成
- 与5个图像生成模型集成
- 与2个评分(重新排名)模型集成
- 与一个审核模型(OpenAI)集成
- 支持将文本和图像作为输入(多模态)
- 提供高级的API调用方式
- 支持提示词模板
- 实现持久和内存中聊天内存算法:消息窗口和令牌窗口
- 支持大模型的流式响应
- 提供常见的Java类型和自定义POJO的输出解析器
- 提供丰富的工具库与自定义工具开发
- 支持动态工具(执行动态生成的 LLM 代码)
- 支持RAG(检索增强生成):
- 嵌入
(1)从多个来源(文件系统、URL、GitHub、Azure Blob 存储、Amazon S3 等)导入各种类型的文档(TXT、PDF、DOC、PPT、XLS 等)
(2)使用多种拆分算法将文档拆分为更小的段
(3)文件和分段预处理
(4)使用嵌入模型嵌入预处理后的文件和分段
(5)将嵌入存储在嵌入(向量)存储中 - 检索(简单和高级)
(1)查询转换(扩展、压缩)
(2)查询路由
(3)从向量存储、任何自定义源中进行检索
(4)重新排名
(5)倒数排名融合
(6)自定义RAG流程中的每个步骤
- 嵌入
- 文本分类
- 用于令牌化和估计令牌计数的工具
- Kotlin 扩展:使用 Kotlin 的协程功能对聊天交互进行异步非阻塞处理。
- 支持链式编排:通过组合模型调用、工具使用和数据处理步骤,构建复杂任务流程(例如问答、文本生成+数据库查询)
- 支持记忆管理:自动管理对话历史,支持短期/长期记忆存储,维持多轮对话的上下文
- 支持多模型:支持 OpenAI、HuggingFace、Azure OpenAI 等云端模型,以及本地部署的模型(如 Ollama)
1.4、两种调用方式
LangChain4j 提供两种层次上的调用方式,一种是低层次的链式调用,另一种是高层次的AI服务调用。
- 低层次的链式调用
在这个层次上,可以最自由地访问所有低级组件,例如ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding等等。这些是LLM驱动的应用程序的“基本单元”。你可以完全控制如何组合它们,但你需要编写更多的组合代码。 - 高层次的AI服务调用
在这个层次上,将使用 AI 服务等高级 API 与 LLM 进行交互。 这种方式隐藏了所有的复杂性和细节。 但热可以灵活地进行调整和微调行为,但这是以声明方式完成的。

1.5、链式调用示例代码
以下是一个 LangChain4J 链式调用的示例代码,展示了如何将多个步骤(模型调用、工具使用、数据处理)组合成一个完整的流程:用户输入一个自然语言问题 → 模型生成 SQL → 执行 SQL 查询 → 模型将结果转换为自然语言回答。
import dev.langchain4j.chain.Chain;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.structured.Description;
import dev.langchain4j.tools.DatabaseTool;public class LangChain4JChainExample {// 步骤1: 定义数据结构(用于解析模型输出)public static class SqlQuery {@Description("生成的SQL查询语句")private String sql;// Getter/Setter}public static void main(String[] args) {// 步骤2: 初始化模型和工具OpenAiChatModel model = OpenAiChatModel.builder().apiKey("your-openai-key").modelName("gpt-4").temperature(0.3) // 降低随机性,适合生成SQL.build();// 模拟数据库工具(实际项目需替换为真实连接)DatabaseTool dbTool = new DatabaseTool() {@Overridepublic String executeQuery(String sql) {// 执行SQL并返回结果(示例数据)return "[{\"name\": \"Alice\", \"age\": 30}, {\"name\": \"Bob\", \"age\": 25}]";}};// 步骤3: 构建链式流程Chain<String, String> chain = Chain.builder()// 子链1: 用户问题 → 生成SQL.addStep(input -> model.generate("用户问题: {{input}}\n请生成对应的SELECT SQL语句,只输出SQL不要解释。",input))// 解析SQL为结构化对象.addStep(sql -> new SqlQueryParser().parse(sql, SqlQuery.class))// 子链2: 执行SQL查询.addStep(sqlQuery -> dbTool.executeQuery(sqlQuery.getSql()))// 子链3: 结果 → 自然语言总结.addStep(data -> model.generate("将以下JSON数据转换为自然语言回答:\n{{data}}\n用户原问题:{{input}}",data, args[0] // 原始输入)).build();// 步骤4: 执行链String userQuestion = "查询年龄大于28岁的用户,返回姓名和年龄";String answer = chain.execute(userQuestion);System.out.println("最终回答: \n" + answer);}
}
示例输出结果
最终回答:
共有1位用户年龄大于28岁:
姓名:Alice,年龄:30岁。
1.6、AI服务调用示例代码
以下是 LangChain4J 调用 AI 服务的示例代码,涵盖常见的场景(如 OpenAI、本地模型、工具集成等),可直接用于 Java 应用开发:
- 简单文本生成(OpenAI)
import dev.langchain4j.model.openai.OpenAiChatModel;public class BasicTextGeneration {public static void main(String[] args) {// 1. 初始化 OpenAI 模型OpenAiChatModel model = OpenAiChatModel.builder().apiKey("your-api-key").modelName("gpt-3.5-turbo").temperature(0.7).build();// 2. 发送请求并获取回复String response = model.generate("用一句诗形容春天");System.out.println(response); // 输出示例:春风又绿江南岸,明月何时照我还。}
}
- 结构化输出(如 JSON)
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.structured.Description;public class StructuredOutputExample {// 定义数据结构(用注解描述字段)static class Product {@Description("商品名称,需吸引人且长度不超过20字")String name;@Description("价格,单位为人民币,保留两位小数")double price;@Description("适用人群,用逗号分隔的标签,如'学生,程序员'")String tags;}public static void main(String[] args) {OpenAiChatModel model = OpenAiChatModel.builder().apiKey("your-key").modelName("gpt-4").build();// 生成并解析结构化数据Product product = model.generate("生成一个数码产品的信息,类型为{{type}}",Product.class, // 指定输出类型"无线蓝牙耳机" // 替换模板变量);System.out.println("商品名称: " + product.name);System.out.println("价格: ¥" + product.price);System.out.println("适用人群: " + product.tags);}
}
1.7、典型使用场景
- 智能客服
多轮对话管理,结合知识库提供精准回答。 - 数据分析助手
用户用自然语言提问,模型生成数据分析代码(如 SQL/Python),自动执行并返回结果。 - 文档问答系统
集成 RAG(检索增强生成),从企业内部文档中提取信息生成答案。 - 自动化流程
自动分类工单、生成报告摘要或执行预定义操作(如发送邮件)。
1.8、总结
LangChain4J 降低了 Java 开发者集成 LLM 的门槛,尤其适合需要与企业现有系统(如数据库、API)深度结合的场景。其模块化设计和链式编排能力,使得构建复杂 AI 应用变得更加高效。如果你熟悉 Java 生态并希望快速接入大模型,LangChain4J 是一个值得尝试的工具。
相关文章:
LangChain4J开源开发框架简介
目录 1.1、前言1.2、集成方式简单1.3、核心功能与优势1.4、两种调用方式1.5、链式调用示例代码1.6、AI服务调用示例代码1.7、典型使用场景1.8、总结 1.1、前言 LangChain4J 是一个专为 Java 开发者设计的开源框架,旨在简化大型语言模型(LLMs)…...
Qt图形视图框架在项目中的应用
一、基本概念 Qt 的图形视图框架(Graphics View Framework)提供了一套用于显示和管理2D图形对象的框架。它提供了一组类,这些类可以组合使用来构建用户界面、处理图形对象、实现缩放、平移、旋转等操作。以下是Qt GraphicsView框架的主要组件…...
SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式
SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式 前言添加maven依赖配置application.properties测试实体类 方式一:继承 ElasticsearchRepository(适合简单查询) 直接使用想自定义自己的Repository接口 方式…...
STM32蜂鸣器播放音乐
STM32蜂鸣器播放音乐 STM32蜂鸣器播放音乐 Do, Re, Mi, Fa, 1. 功能概述 本系统基于STM32F7系列微控制器,实现了以下功能: 通过7个按键控制蜂鸣器发声,按键对应不同的音符。每个按键对应一个音符(Do, Re, Mi, Fa, Sol, La, Si&a…...
GitLab 中文版17.10正式发布,27项重点功能解读【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革
前言: DeepSeek 兑现了自己的诺言,开源了一款用于 Hopper GPU 的高效型 MLA 解码核:FlashMLA。 项目地址:https://github.com/deepseek-ai/FlashMLA 1:FlashMLA 是什么呀? MLA是DeepSeek大模型的重要技术创新点&…...
leetcode:136. 只出现一次的数字(python3解法)
难度:简单 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 …...
Isaac Sim与Isaac Lab初使用
目录 基于Omiverse下载Isaacsim安装Isaac Lab配置isaacsim环境测试克隆仓库配置python环境强化学习训练的测试 IsaacLab模板配置vscode环境ros接口安装 作为nvidia出品的仿真软件,很多机器人、机器狗【具身智能】都可以有很不错的效果,所以会使用isaac s…...
Spring AI Alibaba 工具(Function Calling)使用
一、工具(Function Calling)简介 Spring AI Alibaba工具(Function Calling):https://java2ai.com/docs/1.0.0-M6.1/tutorials/function-calling/ 1、工具(Function Calling) “工具(Tool)”或“功能调用(Function Calling…...
Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套
在虚拟现实(VR)和扩展现实(XR)领域,触觉反馈技术正逐渐成为提升沉浸感和交互体验的重要因素。Weart作为这一领域的创新者,凭借其TouchDIVER Pro和TouchDIVER G1触觉手套,为用户带来了高度逼真的…...
[深度学习]图片分类任务
图片分类任务 文章目录 图片分类任务分类任务回归和分类如何做分类的输出 图片分类卷积神经网络保持特征图大小不变更大的卷积核和更多的卷积核层数特征图怎么变小卷积神经网络中特征图改变卷积到全连接分类任务的LOSS一个基本的分类神经网络 经典神经网络AlexNetVggNetResNet …...
关系图:赋能数据可视化的动态扩展
关系图 关系图是一种用于展示节点之间关系和连接的图表类型。具有高度的可定制性、丰富的交互功能和动画效果,能够展示节点之间的和连接,以及随着数据的变化而呈现的动态效果。 【组件概述】 1.节点和边的可定制性: 关系图提供了丰富的配置…...
k8s存储介绍(三)valume概述与emptydir
目录 一、Kubernetes 中的 Volume 详解 基本概念 Volume 的主要类型(这里简单介绍,后续章节会详细介绍) 1. 本地存储类型 2. 网络存储类型 3. 云提供商存储 4. 特殊用途类型 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) S…...
Nodejs 项目打包部署方式
方式一:PM2 一、准备工作 确保服务器上已安装 Node.js 环境建议使用 PM2 进行进程管理(需要额外安装) 二、部署步骤 1.首先在服务器上安装 PM2(推荐): npm install -g pm22.将项目代码上传到服务器&…...
uv - Getting Started 开始使用 [官方文档翻译]
文章目录 uv亮点安装项目脚本工具Python 版本pip 接口了解更多 入门安装 uv安装方法独立安装程序PyPICargoHomebrewWinGetScoopDockerGitHub 发布 升级 uvShell 自动补全卸载 第一次使用 uv特性Python 版本脚本项目工具pip 接口实用工具 获取帮助帮助菜单查看版本故障排除问题在…...
C++类与对象的的第三个简单的实战练习-3.25笔记
哔哩哔哩C面向对象高级语言程序设计教程(118集全) 简单实战三 创建项目 打开VS,点击创建一个新项目 创建一个空项目 点击下一步 点击工程名称,选择添加 选择新建项 选择C类 取名 点击确定,这时候还需要一个main.cpp …...
CentOS安装sshpass工具-自动化SSH密码认证
sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录:sshpass允许用户在命令行中直接传递密码,从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用,因为它可以在非交互式环境下完成…...
k8s中service概述(一)ClusterIP
ClusterIP 是 Kubernetes 中最基础且常用的 Service 类型,主要用于在集群内部提供稳定的网络访问端点。以下是关于 ClusterIP Service 的详细说明: 1. ClusterIP 的核心功能 集群内部访问:ClusterIP 提供一个集群内部的虚拟 IP(VI…...
详解接口的常见请求方式
详解接口的常见请求方式 一、 常见接口请求方式1. GET2. POST3. PUT4. DELETE5. PATCH6. HEAD7. OPTIONS 二、 实现方法1. 前端实现2. 后端实现 三、 作用与主要区别四、 举例讲解1. 创建 Spring Boot 工程2. 添加依赖3. 编写 Controller 实现接口关键点说明 4. 启动与测试5. 总…...
HarmonyOS-ArkUI Grip组件
我们在学习List的时候,已经捎带引入了Grid。讲解如下图所示: 也就是,如果一个表,长宽基本都是一致的,那么此时可以完全不用Grid也可以实现,并且,优先考虑的就是List。 如果List实现不了的情况下…...
2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip
一、资料列表 第一课:Deepseek基础入门 第二课:DeepSeek赋能职场 第三课:普通人如何抓住DeepSeek红利 第四课:让科研像聊天一样简单 第五课:DeepSeek与AI幻觉 第六课:基于DeepSeek的AI音乐词曲的创造法 第…...
jupyter使用过程中遇到的问题
1、No module named ‘notebook.extensions’ 报错内容为: No module named notebook.extensions解决办法 出现这个错误代表你尝试给 Jupyter notebook 安装自动补全的插件,但是 notebook 没安装成功; 解决办法:不用 pip 安装 n…...
mac vim命令快捷键
目录 移动光标插入模式复制/粘贴删除搜索/替换退出 移动光标 快捷键说明0 / ^跳到行首,移动到光标所在行的"行首"$跳到行末,移动到光标所在行的"行尾"gg跳到文件第一行G移动到文章的最后[n]G跳到第n行w光标跳到下个字的开头e光标跳…...
【Golang】defer与recover的组合使用
在Go语言中,defer和recover是两个关键特性,通常结合使用以处理资源管理和异常恢复。以下是它们的核心应用场景及使用示例: 1. defer 的应用场景 defer用于延迟执行函数调用,确保在函数退出前执行特定操作。主要用途包括ÿ…...
低代码配置式Web组态解析
低代码配置式Web组态技术通过可视化操作和预置组件库,大幅降低开发门槛,适用于工业控制、物联网监控、数据可视化等场景。以下是综合行业实践和产品特性的分析: 一、核心功能与优势 可视化编辑与拖拽布局 提供图形化编辑器࿰…...
KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来
第一部分:KiLog2MaximumIncrement的由来 i 1; j KeMaximumIncrement; while ((1UI64<<i) < KeMaximumIncrement) { i; } KiLog2MaximumIncrement i; 2^17131072 2^18262144 i18KiLog2MaximumIncrement 中…...
基于web的家政服务网站
内容摘要 由于互联网的使用,人们在管理、应用、服务等领域使用数据更加简洁、方便,大大提高了工作效率。互联网正逐渐融入我们的生活,影响和改变我们的生活。 家政服务管理系统是典型的信息管理系统(MIS)。其开发主要…...
mac命令行快捷键
光标移动 Ctrl A: 将光标移动到行首。Ctrl E: 将光标移动到行尾。Option 左箭头: 向左移动一个单词。Option 右箭头: 向右移动一个单词。 删除和修改 Ctrl K: 删除从光标到行尾的所有内容。Ctrl U: 删除从光标到行首的所有内容。Ctrl W: 删除光标前的一个单词。Ctrl …...
聚水潭数据集成到MySQL的最佳实践分享
聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中,我们将探讨如何通过轻易云数据集成平台,将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体的集成方案为“聚水潭-商品信息查询-->BI初本-商品信息表_copy”。该方案旨在实现从聚水潭获取商…...
线性代数核心概念与NumPy科学计算实战全解析
前言 学习方法: 思维导图,梳理 多记忆,函数名和功能,参数 学会应用,不要钻牛角尖 一、浅解线性代数 1.1标量 标量是一个只有大小没有方向的量。在数学上,标量通常表示为一个普通的数字,如质量…...
