Java程序员的大模型入门:LangChain4j 核心笔记
LangChain:大模型开发框架,可以理解为大模型领域的 Spring,帮助程序员高效利用大模型能力。:LangChain 的 Java 版本,将大模型能力与 Java 编程语言结合,是目前 Java 生态中与大模型结合最成熟的框架之一。注意:大模型和其使用方式都在快速发展中,学习 LangChain4j 不仅要会用框架,更要理解如何用好大模型。接口用途聊天模型(同步)流式聊天模型(异步逐 to
·
1. 什么是 LangChain 和 LangChain4j
- LangChain:大模型开发框架,可以理解为大模型领域的 Spring,帮助程序员高效利用大模型能力。
- LangChain4j:LangChain 的 Java 版本,将大模型能力与 Java 编程语言结合,是目前 Java 生态中与大模型结合最成熟的框架之一。
注意:大模型和其使用方式都在快速发展中,学习 LangChain4j 不仅要会用框架,更要理解如何用好大模型。
2. 快速上手:与 OpenAI 对话
2.1 Maven 依赖
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<langchain4j.version>0.35.0</langchain4j.version>
</properties>
<dependencies>
<!-- 核心依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- OpenAI 集成 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- 日志(可选) -->
<dependency>
<groupId>org.tinylog</groupId>
<artifactId>tinylog-impl</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
2.2 第一个对话程序
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
public class HelloWorld {
public static void main(String[] args) {
// apiKey="demo" 是 LangChain4j 提供的测试 key,会走代理地址
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey("demo")
.modelName("gpt-4o-mini") // 免费调试模型
.build();
String answer = model.generate("你是谁?");
System.out.println(answer);
}
}
关键参数说明:
modelName:大模型名称,如gpt-4o-mini(免费调试用),不指定默认gpt-3.5-turbo。apiKey:身份凭证。"demo"是测试 key,框架会自动将请求地址改为http://langchain4j.dev/demo/openai/v1。生产环境需使用自己的 OpenAI API Key。
3. 理解对话上下文
大模型默认无状态,每次 generate() 都是新会话,不会记住之前的对话。
解决方案: 使用 ChatMessage 传递历史消息。
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.Response;
public class ContextDemo {
public static void main(String[] args) {
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey("demo")
.modelName("gpt-4o-mini")
.build();
// 第一轮对话
UserMessage userMessage1 = UserMessage.userMessage("你好,你是谁?");
Response<AiMessage> response1 = model.generate(userMessage1);
AiMessage aiMessage1 = response1.content();
System.out.println(aiMessage1.text());
// 第二轮:传入历史消息
UserMessage userMessage2 = UserMessage.userMessage("请再重复一次");
Response<AiMessage> response2 = model.generate(userMessage1, aiMessage1, userMessage2);
System.out.println(response2.content().text());
}
}
ChatMessage 的四种实现类:
| 类型 | 说明 |
|---|---|
UserMessage |
用户发送给大模型的消息 |
AiMessage |
大模型生成的消息 |
SystemMessage |
开发者包装后的提示词(如“你是一个Java架构师”),通常对用户不可见 |
ToolExecutionResultMessage |
工具执行结果 |
长对话建议使用
ChatMemory机制自动管理历史记录(后续章节介绍)。
4. 流式响应
流式响应让大模型按 token 逐个输出,提升实时性(类似 ChatGPT 逐字输出效果)。
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.output.StreamingResponseHandler;
import dev.langchain4j.data.message.AiMessage;
public class StreamingDemo {
public static void main(String[] args) {
StreamingChatLanguageModel model = OpenAiStreamingChatModel.builder()
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.modelName("gpt-4o-mini")
.apiKey("demo")
.build();
model.generate("你好,你是谁?", new StreamingResponseHandler<AiMessage>() {
@Override
public void onNext(String token) {
System.out.print(token); // 逐个 token 输出
}
@Override
public void onError(Throwable error) {
System.err.println(error);
}
});
}
}
注意:测试接口可能不稳定,生产环境建议直接使用 OpenAI 真实 API。
5. 其他常用模型接口
5.1 ModerationModel(内容审核)
校验输入中是否存在敏感内容。
import dev.langchain4j.model.moderation.ModerationModel;
import dev.langchain4j.model.openai.OpenAiModerationModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.data.message.Moderation;
public class ModerationDemo {
public static void main(String[] args) {
ModerationModel model = OpenAiModerationModel.builder()
.apiKey("demo")
.build();
Response<Moderation> response = model.moderate("杀人偿命,欠债还钱");
System.out.println(response.content().flaggedText());
}
}
5.2 ImageModel(文生图)
import dev.langchain4j.model.image.ImageModel;
import dev.langchain4j.model.openai.OpenAiImageModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.data.message.Image;
public class ImageDemo {
public static void main(String[] args) {
ImageModel model = OpenAiImageModel.builder()
.baseUrl("https://api.openai.com/v1")
.apiKey("sk-xxxxxxx") // 需使用真实 API Key
.build();
Response<Image> response = model.generate("赛博朋克风格的汽车");
System.out.println(response.content().url()); // 返回图片 URL
}
}
文生图功能需要自己的 API Key,测试 key “demo” 不适用。
6. 整合 Spring Boot
6.1 Maven 依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.1</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>0.35.0</version>
</dependency>
</dependencies>
6.2 配置文件(application.properties)
langchain4j.open-ai.chat-model.api-key=demo
langchain4j.open-ai.chat-model.model-name=gpt-4o-mini
6.3 在 Controller 中使用
import dev.langchain4j.model.chat.ChatLanguageModel;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OpenAIController {
@Resource
private ChatLanguageModel chatLanguageModel;
@GetMapping("/openai/hello")
public String hello() {
return chatLanguageModel.generate("hello");
}
}
7. 核心接口总结
| 接口 | 用途 |
|---|---|
ChatLanguageModel |
聊天模型(同步) |
StreamingChatLanguageModel |
流式聊天模型(异步逐 token 输出) |
ChatMessage |
消息接口(UserMessage / AiMessage / SystemMessage / ToolExecutionResultMessage) |
ModerationModel |
内容审核 |
ImageModel |
文生图 |
LangChain4j 以这些接口为核心,逐步抽象与各大模型的交互方式。其他大模型(如百度千帆、智谱AI)的接入方式类似,只需引入对应依赖即可。
更多推荐



所有评论(0)