LangChain4j 新手入门实战教程(Java版)

今天介绍一下LangChain怎么玩。本人学AI Agent不超过一个月,如有错误,欢迎批评指正。了解我的人都知道,最近三年,本人都在打磨产品,没有涉足AI领域。最近才开始杀入AI领域的开发。除了Java后端有些基础外,我基础不比新人强多少。

LangChain是一个开源的大语言模型(LLM)应用开发框架,作用是把大模型、文档、向量库、各类工具API组装起来,快速搭建AI应用。

由于本人不会Python,所以只介绍Java的开发。老规矩,在pom.xml中配置依赖。

先创建OpenAiChatModel对象,我这里举三个例子。

在完成基础使用后,我们对Demo进行加强,使用到RAG。

RAG,Retrieval-Augmented Generation,检索增强生成。给大模型外接一个知识库,提问时先检索相关资料,再把资料连同问题一起交给大模型,让模型基于查到的材料来回答,而不是只靠模型自身预训练记忆。

使用RAG的目的是为了避免大模型出现幻觉,免得豆包等大模型一本正经的胡说八道。有人要问了,那我为什么不把知识库直接训练给大模型?好问题。原因如下:

使用RAG就相当于外接一本书,回答可以附带引用原文片段,便于溯源与合规

创建一个Embedding模型,这里以阿里的千问为例。

回忆 RAG 流程:文档切分成 chunk → Embedding → 存入向量库。 用户提问时:问题文本 → Embedding → 在向量库计算向量距离,召回最相似的文档片段。

先将文档拆分成很多Chunk,这里使用的是DocumentSplitters拆分器,按300个字一组拆分,实际项目不会这么用。先使用InMemoryEmbeddingStore存到内存中,用Map保存,实际项目一般会存到Redis或Database。

前面的Demo有什么问题?记忆是所有会话共享的。这样,无论什么信息你都写入长期记忆了,那会话多了是不是会爆炸💥。人的大脑还要睡眠处理信息,然后选择性遗忘呢!

多个String参数,需要使用@UserMessage手动标注哪个是UserMessage。

本文面向Java后端开发新手,从零完成了LangChain4j框架的入门学习与实操开发,完整讲解了Java体系下大模型应用的基础搭建与RAG核心能力落地。首先介绍了LangChain4j的核心定位,作为轻量化开源LLM开发框架,它可快速整合各类大模型、知识库与工具接口,适配Java技术栈的AI应用开发场景。

在基础开发部分,详细演示了核心依赖引入方式,并适配阿里云百炼、DeepSeek、火山方舟三大主流兼容OpenAI协议的大模型,提供了可直接复用的模型初始化代码,极简实现了大模型基础对话能力,降低了新手接入大模型的开发门槛。

同时,文章重点拆解了RAG检索增强生成技术的核心原理与应用价值,明确了RAG解决大模型幻觉、知识滞后、无法私有化部署等核心痛点的优势,并完整落地了RAG入门Demo,涵盖Embedding模型创建、文档切片、文本向量化、向量内存存储、检索增强器配置、对话记忆绑定等全流程核心步骤,清晰阐释了Embedding在语义检索中的关键作用。

最后针对基础RAG Demo的缺陷,优化实现了会话记忆隔离能力,通过MemoryId、ChatMemoryProvider实现多用户、多会话的记忆独立隔离,解决了全局记忆共享导致的信息混乱、内存溢出等线上问题,让RAG应用具备了初步生产可用能力。

整体教程从理论到实操、从基础功能到生产优化,循序渐进,无需深厚AI基础即可上手,完整覆盖了LangChain4j+RAG的核心入门知识点,为后续开发复杂AI Agent、私有化知识库问答、智能对话系统等高阶应用打下了扎实的基础。后续可基于本文案例,进一步替换Redis、数据库等持久化向量存储,优化文档切片规则与检索权重,适配正式项目开发场景。

来源:稀土掘金 原文