1. 什么是 LangChain4j?它是干什么的?
定义: LangChain4j (LangChain for Java) 是一个 Java 库,旨在简化将大语言模型(LLM)集成到 Java 应用程序中的过程。
它是干什么的?(核心作用) 想象一下,如果你想在 Java 里连接 MySQL,你不会去手写 TCP 连接和 SQL 解析协议,你会用 JDBC 和 MyBatis/Hibernate 。 LangChain4j 就是 AI 领域的 MyBatis:
-
它帮你连接各种大模型(OpenAI, 阿里云通义千问, Google Gemini, 本地 Ollama 等)。
-
它帮你管理对话上下文(Memory)。
-
它帮你把 PDF/文档 喂给 AI(RAG)。
-
它帮你把 Java 方法变成 AI 的工具(Function Calling)。
2. 有什么好处?
对于 Java 开发者,最大的痛点是 AI 生态被 Python 统治。LangChain4j 的好处在于:
-
统一 API (解耦):
-
今天你用 OpenAI,明天老板想换成阿里云通义千问,后天想换成免费的 DeepSeek。
-
不用 LangChain4j: 你需要重写所有的 HTTP 请求代码。
-
用 LangChain4j: 改一行配置文件 (
application.yml) 即可,业务代码一行不用动。
-
-
Java 原生体验:
-
不需要额外部署 Python 服务。
-
支持 Spring Boot Starter,配置极其简单。
-
强类型支持,可以直接把 AI 的回复转成 Java Bean。
-
-
高层抽象 (AiServices):
- 你只需要写一个 Java 接口 (Interface),框架自动帮你生成实现类,调用 AI 就像调用本地 Service 一样简单。
3.案例搭建
引入依赖
XML
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>0.36.0</version>
</dependency>
编写配置文件(需要提前准备APIKey 需要去自己申请)
XML
aliyun.ai.key=sk-你的apikey
aliyun.ai.apiUrl=https://dashscope.aliyuncs.com/compatible-mode/v1
aliyun.ai.model=qwen-turbo
创建一个测试类进行编写
java
package com.qcby.langchain4jdemo;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class AiTest {
@Value("${aliyun.ai.key}")
private String apiKey;
@Value("${aliyun.ai.apiUrl}")
private String url;
// 建议把变量名改得具体一点,比如 modelName,避免和下面的对象混淆
@Value("${aliyun.ai.model}")
private String modelName;
@Test
public void test() {
// 1. 构建模型客户端
// 为了区分,我们将这里的变量名改为 chatLanguageModel
ChatLanguageModel chatLanguageModel = OpenAiChatModel.builder()
.apiKey(apiKey)
.baseUrl(url)
.modelName(modelName) // 使用成员变量配置的模型名
.build();
// 2. 核心步骤:调用 generate 方法发送请求!
// 如果不写这一行,就永远不会发起网络请求
String response = chatLanguageModel.generate("你好,请讲一个关于程序员的冷笑话。");
// 3. 打印结果
System.out.println("----------------------------------");
System.out.println("AI 回复内容:");
System.out.println(response);
System.out.println("----------------------------------");
}
}
运行查看结果

测试讲解
java
@Value("${aliyun.ai.key}")
private String apiKey;
@Value("${aliyun.ai.apiUrl}")
private String url;
@Value("${aliyun.ai.model}")
private String modelName;
从配置文件中拿去自己配置的值
接下来是重点
构建 AI 客户端 (LangChain4j 部分)
java
// 1. 构建模型客户端
ChatLanguageModel chatLanguageModel = OpenAiChatModel.builder()
.apiKey(apiKey)
.baseUrl(url)
.modelName(modelName)
.build();
OpenAiChatModel.builder():
-
多态性 :虽然我们用的是阿里云通义千问,但因为阿里云支持 OpenAI 的协议标准,所以我们直接复用 LangChain4j 提供的
OpenAiChatModel客户端类。 -
Builder 模式 :这里使用了设计模式中的"建造者模式"。它允许你通过链式调用(
.xxx().xxx())来一步步配置复杂的对象,最后调用.build()生成实例。 -
配置绑定:这里把第一步从 Spring 拿到的配置(Key, URL, ModelName)填入了客户端。
核心调用与输出
java
// 2. 核心步骤:调用 generate 方法发送请求!
String response = chatLanguageModel.generate("你好,请讲一个关于程序员的冷笑话。");
// 3. 打印结果
System.out.println(response);
.generate(...):
-
这是我们在上一节源码分析中看到的 方法 1(最简单的 String 入参)。
-
网络请求发生地:这行代码执行时,Java 程序会组装一个 HTTP POST 请求,发送给阿里云服务器。
-
阻塞等待 :这是一个**同步(Synchronous)**方法。代码运行到这里会"卡住"(阻塞),直到 AI 思考完毕并把完整的笑话通过网络传回来,赋值给
response变量。
整体流程
java
A[application.yml] -->|@Value注入| B(Java变量: apiKey, url, modelName)
B -->|Builder填充| C[OpenAiChatModel 客户端实例]
D[测试方法 test()] -->|调用 .generate()| C
C -->|HTTP POST 请求| E[阿里云服务器 /compatible-mode/v1]
E -->|生成文本| C
C -->|返回 String| F[控制台输出]