LangChain4j -- LangChain4j入门大全

简介

随着 ChatGPT、DeepSeek、Claude 等大语言模型(LLM)的快速发展,企业应用正在从传统的软件逻辑转向 LLM + 数据 + 工具调用 的智能应用模式。

对于 Java 开发者来说,直接调用大模型 API 通常需要处理:

  • HTTP 请求封装
  • Prompt 管理
  • 上下文管理
  • 对话历史
  • RAG 检索增强
  • Function Calling
  • Agent 编排

这些能力如果全部自己实现,成本较高。

因此出现了类似 LangChain 的开发框架。


什么是 LangChain4j?

LangChain4j 是 Java 生态中的 LLM 应用开发框架。

它对应 Python 世界里的:

LangChain

目标:

让 Java 开发者能够快速构建基于大模型的企业级应用。

支持:

  • OpenAI
  • Azure OpenAI
  • DeepSeek
  • Claude
  • Ollama
  • 本地模型
  • 向量数据库
  • RAG
  • Agent
  • Memory
  • Tools

整体架构:

复制代码
             用户请求
                |
                v

        LangChain4j Application

                |
    +-----------+------------+
    |                        |
 ChatModel                Embedding

    |                        |
    v                        v

  DeepSeek              Vector DB
  GPT                   ES
  Claude                Milvus
                         Chroma

2. LangChain4j 核心概念

2.1 ChatModel

ChatModel 是最核心的接口。

作用:

封装大模型聊天能力

例如:

用户:

复制代码
你好

经过:

java 复制代码
UserMessage
↓
ChatModel
↓
LLM
↓
AiMessage

返回:

复制代码
你好,有什么可以帮助你的?

2.2 Message

LangChain4j 中消息分为:

SystemMessage

系统角色:

例如:

复制代码
你是一个数据治理专家

UserMessage

用户输入:

复制代码
帮我分析这个SQL

AiMessage

模型回答:

复制代码
该SQL存在索引问题

代码:

复制代码
UserMessage user =
        UserMessage.from("你好");

2.3 Prompt

Prompt 就是给模型的输入模板。

例如:

普通:

复制代码
解释一下Flink

高级:

复制代码
你是一名大数据专家。

请从架构、性能、应用场景分析Flink

问题:
{question}

企业应用基本都会做 Prompt Template。


2.4 Memory(上下文记忆)

大模型默认:

一次请求一次上下文。

例如:

第一次:

复制代码
我叫张三

第二次:

复制代码
我叫什么?

模型不知道。

Memory:

保存历史消息:

复制代码
User:
我叫张三

AI:
你好张三


User:
我叫什么?

AI:
你叫张三

2.5 Embedding

Embedding 是把文本转换成向量。

例如:

文本:

复制代码
Flink 是实时计算框架

转换:

复制代码
[
0.231,
0.523,
0.892
]

用于:

  • 相似度搜索
  • RAG
  • 知识库问答

LangChain4j 环境搭建

Maven依赖

复制代码
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.35.0</version>
</dependency>


<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.16.2</version>
</dependency>

注意:

LangChain4j 0.35 对 Jackson 版本有要求。

如果使用旧版本:

复制代码
jackson-databind 2.11

可能出现:

复制代码
PropertyNamingStrategies$SnakeCaseStrategy
ClassNotFoundException

开发一个简单的天气机器人

java 复制代码
package org.utils;

import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.ChatMessageType;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.openai.OpenAiChatModel;
import lombok.var;

import static dev.langchain4j.data.message.ChatMessageType.USER;

public class LongChainUtil {


    public static void main(String[] args) {

        OpenAiChatModel model =
                OpenAiChatModel.builder()
                        .baseUrl("http://xxx-ai.com/v1")
                        .apiKey("xxxx")
                        .modelName("deepseek-reasoner")
                        .build();

        ChatRequest request = ChatRequest.builder()
                .messages( SystemMessage.from(
                                "你是一个天气专家,功能如下:" +
                                        "1.回复具体的天气情况" +
                                        "2.根据天气给出穿衣建议"
                        ),
                        UserMessage.from("北京朝阳区今天天气"))
                .build();

        var response = model.chat(request);
    }


}