LangChain4j Java AI 应用开发实战(一):LangChain4j 快速入门指南
系列篇章💥
| No. | 文章 |
|---|---|
| 1 | LangChain4j Java AI 应用开发实战(一):LangChain4j 快速入门指南 |
目录
一、为什么 Java 开发者需要关注 LangChain4j?
(一)AI 应用开发的现状
过去两年,大语言模型(LLM)彻底改变了软件开发的方式。从智能客服到代码助手,从文档分析到数据提取,AI 能力正在成为现代应用的标配。
然而,当你搜索"LLM 应用开发教程"时,90% 的结果都是 Python + LangChain。这让广大 Java 开发者感到困惑:
"难道 Java 生态在 AI 时代落后了吗?""我们是否需要重新学习 Python 才能开发 AI 应用?"
答案是否定的!
(二)LangChain4j:Java 开发者的 AI 利器
LangChain4j 是 LangChain 的 Java 实现,它提供了与 Python 版本相同的核心能力,但完全遵循 Java 的设计哲学:
| 维度 | Python LangChain | Java LangChain4j |
|---|---|---|
| 类型安全 | 动态类型,运行时错误 | 静态类型,编译期检查 |
| IDE 支持 | 基础补全 | 智能提示、重构、调试 |
| 生态系统 | PyPI | Maven/Gradle + Spring Boot |
| 企业集成 | 需要额外适配 | 天然兼容 Java EE/Spring |
| 性能 | 解释执行 | JVM 优化 + JIT 编译 |
| 学习成本 | Python 开发者友好 | Java 开发者零门槛 |
(三)真实场景:Java 企业的 AI 转型
想象一下这些场景:
- 银行系统:现有的核心系统是 Java 编写的,如何在不重构的前提下接入 AI 客服?
- 电商平台:Spring Boot 后端需要智能商品推荐,难道要额外部署 Python 微服务?
- 企业内部工具:基于 Java 的 OA 系统想加入文档问答功能,如何快速实现?
LangChain4j 的答案是:直接在现有 Java 项目中引入依赖,像调用普通方法一样使用 AI 能力。
二、环境准备:5 分钟搭建开发环境
(一)前置要求
确保你的开发环境满足以下条件:
# 检查 JDK 版本(需要 17 或更高)
java -version
# 输出示例:openjdk version "17.0.8" 2023-07-18
# 检查 Maven 版本(需要 3.6+)
mvn -version
# 输出示例:Apache Maven 3.9.6
提示:
如果你还在使用 JDK 8,建议升级到 JDK 17。LangChain4j 充分利用了 Java 17 的新特性(如 Record、Pattern Matching),能提供更简洁的 API。
(二)创建 Maven 项目
# 创建项目目录
mkdir langchain4j-hello-world
cd langchain4j-hello-world
# 初始化 Maven 项目结构
mkdir -p src/main/java/com/example
创建 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>langchain4j-hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- LangChain4j BOM:统一管理版本 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bom</artifactId>
<version>1.14.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- OpenAI 集成模块 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<!-- LangChain4j 核心模块 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
(三) API Key 配置
LangChain4j 支持多种大模型提供商,本文以 OpenAI 为例。
演示模式(无需 API Key)
为了让你快速上手,LangChain4j 官方提供了一个免费演示端点:
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.apiKey("demo")
.modelName("gpt-4o-mini")
⚠️ 重要提醒:
演示端点仅用于学习和测试,有速率限制且不稳定。生产环境必须使用真实的 API Key。
配置环境变量:
# Windows PowerShell
$env:OPENAI_API_KEY="sk-your-actual-api-key"
# Linux/Mac
export OPENAI_API_KEY="sk-your-actual-api-key"
在代码中读取:
.apiKey(System.getenv("OPENAI_API_KEY"))
安全最佳实践:永远不要将 API Key 硬编码在代码中或提交到 Git 仓库!
三、Hello World:第一个 AI 对话程序
(一)完整代码
创建文件 src/main/java/com/example/T01_ChatModelExamples.java:
package com.example;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
public class T01_ChatModelExamples {
public static void main(String[] args) {
// 简单示例 默认参数
ChatModel chatModel = OpenAiChatModel.builder()
.apiKey("demo")
.modelName("gpt-4o-mini")
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.build();
String answer = chatModel.chat("你是谁");
System.out.println(answer);
//输出:我是一个人工智能助手,旨在回答问题和提供信息。如果你有什么需要了解的,随时可以问我!
}
}
(二)运行程序
- 右键点击
T01_ChatModelExamples.java - 选择 “Run ‘T01_ChatModelExamples.main()’”
- 查看控制台输出
预期输出
我是一个人工智能助手,旨在回答问题和提供信息。如果你有什么需要了解的,随时可以问我!
🎉 恭喜!你已经成功运行了第一个 Java AI 程序!
(三)代码解析
让我们拆解这 25 行代码,理解每一部分的作用:
第 1-4 行:导入依赖
package com.example;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
ChatModel:LangChain4j 的核心接口,定义了与大模型交互的标准方法OpenAiChatModel:OpenAI 的具体实现类,负责处理 HTTP 请求、响应解析等细节
设计模式:这是典型的策略模式。你可以轻松切换到其他模型(如 DeepSeek、阿里百炼),只需替换实现类,业务代码无需修改。
第 12-16 行:构建 ChatModel 实例
ChatModel chatModel = OpenAiChatModel.builder()
.apiKey("demo")
.modelName("gpt-4o-mini")
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.build();
这里使用了 Builder 模式,逐步配置模型参数:
| 参数 | 说明 | 示例值 |
|---|---|---|
apiKey |
API 密钥,用于身份验证 | "demo" 或 "sk-xxx" |
modelName |
模型名称,决定能力和成本 | "gpt-4o-mini" |
baseUrl |
API 端点地址 | 演示端点或官方端点 |
扩展阅读:除了这三个基本参数,还可以配置
temperature(创造性)、maxTokens(最大输出长度)等高级参数,我们将在下一篇文章详细讲解。
第 18 行:发送对话请求
String answer = chatModel.chat("你是谁");
这是整个程序的核心:
- 输入:字符串
"你是谁"(用户消息) - 输出:字符串
answer(模型回复) - 底层过程:
- 将文本封装为 HTTP 请求
- 发送到 OpenAI API
- 等待响应(同步阻塞)
- 解析 JSON 响应,提取回复文本
注意:
chat()方法是同步调用,会阻塞当前线程直到收到完整回复。如果需要流式输出(逐字显示),可以使用chatStream()方法,后续文章会详细介绍。
第 20 行:输出结果
System.out.println(answer);
将模型的回复打印到控制台。
四、深入理解:ChatModel 的工作原理
(一)架构概览
┌─────────────┐
│ Java 应用 │
│ (你的代码) │
└──────┬──────┘
│ chat("你是谁")
▼
┌─────────────────┐
│ ChatModel │ ← LangChain4j 抽象层
│ (统一接口) │
└──────┬──────────┘
│
▼
┌─────────────────┐
│ OpenAiChatModel │ ← OpenAI 具体实现
│ (HTTP 客户端) │
└──────┬──────────┘
│ HTTPS Request
▼
┌─────────────────┐
│ OpenAI API │ ← 云端大模型服务
│ (gpt-4o-mini) │
└──────┬──────────┘
│ JSON Response
▼
┌─────────────────┐
│ 解析并返回 String │
└─────────────────┘
(二)关键概念解析
(1)ChatModel 接口
ChatModel 是 LangChain4j 的核心抽象,定义了与大模型交互的标准方法:
public interface ChatModel {
String chat(String userMessage);
// 更多方法...
ChatResponse chat(ChatRequest request);
TokenStream chatStream(String userMessage);
}
优势:
- 解耦:业务代码不依赖具体的模型提供商
- 可替换:轻松切换 OpenAI、DeepSeek、Ollama 等
- 可测试:可以使用 Mock 实现进行单元测试
(2)Builder 模式
LangChain4j 大量使用 Builder 模式来配置复杂对象:
OpenAiChatModel.builder()
.apiKey("xxx")
.modelName("gpt-4o-mini")
.baseUrl("https://api.openai.com/v1")
.temperature(0.7)
.maxTokens(1000)
.timeout(Duration.ofSeconds(30))
.build();
为什么不用构造函数?
- 参数太多(10+ 个),构造函数难以维护
- 大部分参数有默认值,Builder 允许只设置需要的参数
- 代码可读性更好
(3)同步 vs 异步
当前的 chat() 方法是同步阻塞的:
// 同步:等待完整回复
String answer = chatModel.chat("你是谁");
System.out.println(answer); // 一次性输出全部内容
后续我们会学习流式输出:
// 异步流式:逐字接收
chatModel.chatStream("你是谁")
.onNext(token -> System.out.print(token)) // 逐字打印
.start();
五、进阶探索:尝试不同的模型提供商
LangChain4j 的最大优势是多模型支持。只需更换实现类,就能切换到不同的模型提供商。
(一)DeepSeek(国产大模型)
import dev.langchain4j.model.deepseek.DeepSeekChatModel;
ChatModel chatModel = DeepSeekChatModel.builder()
.apiKey(System.getenv("DEEPSEEK_API_KEY"))
.modelName("deepseek-chat")
.build();
String answer = chatModel.chat("请用一句话介绍你自己");
System.out.println(answer);
(二)阿里百炼(通义千问)
import dev.langchain4j.community.model.dashscope.QwenChatModel;
ChatModel chatModel = QwenChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen-plus")
.build();
String answer = chatModel.chat("杭州有哪些著名景点?");
System.out.println(answer);
(三)Ollama(本地模型)
import dev.langchain4j.model.ollama.OllamaChatModel;
ChatModel chatModel = OllamaChatModel.builder()
.baseUrl("http://localhost:11434")
.modelName("llama3")
.build();
String answer = chatModel.chat("什么是机器学习?");
System.out.println(answer);
优势:完全离线运行,数据隐私有保障
六、总结
本文我们完成了以下目标:
✅ 了解了 LangChain4j 的价值和优势
✅ 搭建了开发环境(JDK 17 + Maven)
✅ 运行了第一个 AI 对话程序(25 行代码)
✅ 理解了 ChatModel 的工作原理
✅ 尝试了多种模型提供商的切换
核心要点回顾:
- LangChain4j 让 Java 开发者无需学习 Python 即可开发现代 AI 应用
- ChatModel 是统一抽象,屏蔽了不同模型提供商的差异
- Builder 模式简化了复杂对象的配置
- 演示端点适合学习,生产环境必须使用真实 API Key

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型Spring AI开发实战🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!
更多推荐


所有评论(0)