系列篇章💥

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);
        //输出:我是一个人工智能助手,旨在回答问题和提供信息。如果你有什么需要了解的,随时可以问我!
    }

}

(二)运行程序

  1. 右键点击 T01_ChatModelExamples.java
  2. 选择 “Run ‘T01_ChatModelExamples.main()’”
  3. 查看控制台输出

预期输出

我是一个人工智能助手,旨在回答问题和提供信息。如果你有什么需要了解的,随时可以问我!

🎉 恭喜!你已经成功运行了第一个 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(模型回复)
  • 底层过程
    1. 将文本封装为 HTTP 请求
    2. 发送到 OpenAI API
    3. 等待响应(同步阻塞)
    4. 解析 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 的工作原理
✅ 尝试了多种模型提供商的切换

核心要点回顾

  1. LangChain4j 让 Java 开发者无需学习 Python 即可开发现代 AI 应用
  2. ChatModel 是统一抽象,屏蔽了不同模型提供商的差异
  3. Builder 模式简化了复杂对象的配置
  4. 演示端点适合学习,生产环境必须使用真实 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的探索之旅,开启智能时代的大门!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐