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)的接入方式类似,只需引入对应依赖即可。

Logo

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

更多推荐