LangChain4j入门

简介

LangChain4j的目标,是简化将大语言模型(LLM - Large Language Model)集成到 Java 应用程序中的过程。

历史背景

2022年11月30日OpenAI发布了Chat GPT(GPT-3.5),而在同年10月,Harrison Chase 发布了基于Python的LangChain,随后同时包含了Python版和JavaScript(LangChain.js)版的LangChain 也发布了,直到2023年 11 月,Quarkus 发布了 LangChain4j 的0.1版本,2025年2月发布了1.0 - Beta1 版本,4月发布了1.0 - Beta4 版本,截止到10月18日,最新版本为1.7.1。

主要功能

(1)与大型语言模型和向量数据库的便捷交互。

通过统一的应用程序编程接口(API),可以轻松访问所有主要的商业和开源大型语言模型以及向量数据库,使你能够构建聊天机器人、智能助手等应用。

(2)专为Java打造。

借助SpringBoot集成,能够将大模型集成到java 应用程序中。大型语言模型与Java之间实现了双向集成,即你可以从Java中调用大型语言模型,同时也允许大型语言模型反过来调用你的Java代码。

(3)智能代理(Agent)、工具(Tools)、检索增强生成(RAG)。

应用示例

(1)你想要实现一个自定义的由人工智能驱动的聊天机器人,它可以访问你的数据,并按照你期望的方式运行:

  • 客户支持聊天机器人,它可以礼貌地回答客户问题;
  • 处理 / 更改 / 取消订单;
  • 教育助手,它可以教授各种学科,解释不清楚的部分,评估用户的理解/知识水平。

(2)你想要处理大量的非结构化数据(文件、网页等),并从中提取结构化信息,如:

  • 从客户评价和支持聊天记录中提取有效评价;
  • 从竞争对手的网站上提取有趣的信息;
  • 从求职者的简历中提取有效信息。

(3)你想要生成信息,如:

  • 为你的每个客户量身定制的电子邮件;
  • 为你的应用程序/网站生成内容,如博客文章或者故事、

(4)你想要转换信息,如:

  • 总结;
  • 校对和修改;
  • 翻译。

创建SpringBoot项目

本项目基于JDK17、SpringBoot3.5、LangChain4j1.0.0-beta3搭建,这是主要版本说明。

第一步,创建一个名为yusi-ai-langchain4j的项目:

第二步,在其pom文件的project节点中新增如下依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.version>3.5.6</spring-boot.version>
<knife4j.version>4.3.0</knife4j.version>
</properties>


<dependencies>
<!-- web应用程序核心依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 编写和运行测试用例 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 前后端分离中的后端接口测试工具 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<!--引入SpringBoot依赖管理清单-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

第三步,修改项目配置文件application.properties为如下所示:

1
2
3
spring.application.name=yusi-ai-langchain4j
# web服务访问端口
server.port=8080

第四步,启动项目,访问如下地址:

1
http://localhost:8080/doc.html

页面效果如下所示,则说明项目配置成功:

出现这个页面是因为我们使用了Knife4j ,它是一个 增强版的Swagger UI,用于在 Java 项目(尤其是 Spring Boot)中自动生成 接口文档。

开始使用

点击 这里 阅读对接文档,本部分内容就是对于该文档的学习和记录,注意这里先介绍的是与普通Maven项目的集成,后续会介绍与SpringBoot项目的集成。

LangChain4j的库结构

LangChain4j 具有模块化设计,包括三个模块,分别是langchain4j-core模块、主langchain4j模块以及集成模块:

(1)langchain4j-core模块:定义了核心抽象概念(如聊天语言模型和嵌入存储)及其 API;

(2)主langchain4j模块:包含很多工具,如文档加载器、聊天记忆实现,以及诸如人工智能服务等高层功能;

(3)大量的langchain4j-{集成}模块:每个模块都将各种大语言模型提供商和嵌入存储集成到LangChain4j中。开发者可以独立使用langchain4j-{集成}模块,如需更多功能,只需导入主langchain4j依赖项即可。

添加LangChain4j相关依赖

在项目的pom文件中新增如下依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<properties>
<langchain4j.version>1.0.0-beta3</langchain4j.version>
</properties>

<dependencies>
<!-- 基于open-ai的langchain4j接口:ChatGPT、deepseek都是open-ai标准下的大模型 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<!--引入langchain4j依赖管理清单-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bom</artifactId>
<version>${langchain4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

创建测试用例

请注意,接入任何一个大模型都需要先去申请apiKey,如果你暂时没有密钥,也可以使用LangChain4j 提供的演示密钥,这个密钥是免费的,有使用配额限制,且仅限于gpt-4o-mini模型。

回到项目中,在其测试类的contextLoads方法中接入gpt-4o-mini模型进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@SpringBootTest
class YusiAiLangchain4jApplicationTests {
/**
* gpt-4o-mini语言模型接入测试
*/
@Test
void contextLoads() {
//初始化模型
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.apiKey("demo") //设置模型apiKey
.modelName("gpt-4o-mini") //设置模型名称
.build();
//向模型提问
String answer = model.chat("你好,你是谁?");
//输出结果
System.out.println(answer);
}
}

运行上述测试类,结果如下所示:

1
你好!我是一个人工智能助手,旨在回答问题和提供信息。有什么我可以帮助你的吗?

上面我们使用的是LangChain4j提供的代理服务器,该代理服务器会将演示密钥替换成真实密钥,再将请求转发给OpenAI API,所以需要设置baseUrl,实际上如果你的apiKey为demo,则可省略baseUrl的配置:

1
2
3
4
OpenAiChatModel model = OpenAiChatModel.builder()
.apiKey("demo")
.modelName("gpt-4o-mini")
.build();

与SpringBoot整合

点击 这里 阅读相关文档,学习任何新技术,必须得阅读对应的文档,不然学的不够系统和全面。

替换依赖

将langchain4j-open-ai 替换成 langchain4j-open-ai-spring-boot-starter,更新依赖信息:

1
2
3
4
5
<!-- 基于open-ai的langchain4j接口:ChatGPT、deepseek都是open-ai标准下的大模型 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>

配置模型参数

在项目的application.properties配置文件中,新增如下配置信息:

1
2
3
4
5
6
7
8
9
10
#langchain4j测试模型
langchain4j.open-ai.chat-model.base-url=http://langchain4j.dev/demo/openai/v1
langchain4j.open-ai.chat-model.api-key=demo
langchain4j.open-ai.chat-model.model-name=gpt-4o-mini

#请求和响应日志
langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true
#启用日志debug级别
logging.level.root=debug

创建测试用例

在这种情况下,将自动创建一个实例OpenAiChatModel,开发者可以在需要的地方注入该实例,示例代码如下:

1
2
3
4
5
6
7
8
9
10
@Autowired
private OpenAiChatModel openAiChatModel;

@Test
public void testSpringBoot() {
//向模型提问
String answer = openAiChatModel.chat("你好,你是谁?");
//输出结果
System.out.println(answer);
}

我们可以在测试类的contextChatModel方法中接入gpt-4o-mini模型进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@SpringBootTest
class YusiAiLangchain4jApplicationTests {

@Autowired
private OpenAiChatModel openAiChatModel;


/**
* gpt-4o-mini语言模型接入测试
*/
@Test
void contextChatModel() {
//向模型提问
String answer = openAiChatModel.chat("你好,你是谁?");
//输出结果
System.out.println(answer);
}
}

运行上述测试类,结果如下所示:

1
你好!我是一个人工智能助手,旨在回答你的问题和提供帮助。你有什么需要了解的呢?

大模型评测基准

SuperCLUE 是由国内 CLUE 学术社区于 2023 年 5 月推出的中文通用大模型综合性评测基准:

(1)评测目的。全面评估中文大模型在语义理解、逻辑推理、代码生成等 10 项基础能力,以及涵盖数学、物理、社科等 50 多学科的专业能力,旨在回答在通用大模型发展背景下,中文大模型的效果情况,包括不同任务效果、与国际代表性模型的差距、与人类的效果对比等问题。

(2)特色优势。针对中文特性任务,如成语、诗歌、字形等设立专项评测,使评测更符合中文语言特点。通过 3700 多道客观题和匿名对战机制,动态追踪国内外主流模型,如 GPT-4、文心一言、通义千问等的表现差异,保证评测的客观性和时效性。

(3)行业影响。作为中文领域权威测评社区,其评测结果被学界和产业界广泛引用,例如商汤 “日日新 5.0” 和百度文心大模型均通过 SuperCLUE 验证技术突破,推动了中文 NLP 技术生态的迭代,为中文大模型的发展和优化提供了重要的参考依据,促进了中文大模型技术的不断进步和应用。

如果开发者想知道LangChain4j所支持接入的大模型,则可以点击 这里 进行查阅: