LangChain4j精讲

一、为什么需要 LangChain4j?

2023 年以来,大语言模型(LLM)爆发式增长,OpenAI、DeepSeek、通义千问、智谱 GLM 等模型层出不穷。Java 开发者面临一个尴尬的问题:

  • 直接调用 HTTP API:代码重复、JSON 解析繁琐、异常处理麻烦

  • 各个模型 SDK 不统一:换一个模型就要重写一套调用逻辑

  • 缺少高级功能:多轮对话、工具调用、RAG 检索等都需要自己实现

LangChain4j 的出现,就是为了解决这些问题。

它借鉴了 Python 生态中著名的 LangChain 框架的设计理念,但完全基于 Java 开发,为 Java 开发者提供了一套统一、简洁、功能完备的大模型应用开发框架。


二、LangChain4j 是什么?

LangChain4j 是一个 Java 框架,旨在简化大语言模型(LLM)应用的开发。

它的核心设计理念是:

  • 统一抽象 :所有大模型都通过统一的 ChatLanguageModel 接口调用

  • 模块化:核心模块 + 各个模型的扩展模块,按需引入

  • Spring Boot 友好:提供 Starter,无缝整合 Spring Boot 生态

核心模块

模块 说明
langchain4j-core 核心 API,包含 ChatLanguageModelUserMessageAiMessage
langchain4j-open-ai OpenAI 及兼容接口(DeepSeek、智谱等)的实现
langchain4j-ollama 本地部署的 Ollama 模型支持
langchain4j-dashscope 阿里云百炼(通义千问)支持
langchain4j-spring-boot-starter Spring Boot 整合,提供 @AiService 等高级功能
langchain4j-open-ai-spring-boot-starter OpenAI 模型的 Spring Boot Starter

三、LangChain4j 解决了什么问题?

问题一:重复的 HTTP + JSON 处理

之前(直接调 API):

复制代码
// 每次调用都要写 10+ 行代码
String json = "{\"model\":\"deepseek-chat\",\"messages\":[{\"role\":\"user\",\"content\":\"" + msg + "\"}]}";
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.deepseek.com/v1/chat/completions"))
    .header("Authorization", "Bearer sk-xxx")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(json))
    .build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
String answer = mapper.readTree(response.body()).path("choices").get(0).path("message").path("content").asText();

现在(用 LangChain4j):

复制代码
// 一行搞定
String answer = model.generate("你好");

问题二:各模型 API 不统一

模型 API 地址 请求格式 响应格式
OpenAI api.openai.com OpenAI 格式 OpenAI 格式
DeepSeek api.deepseek.com OpenAI 兼容 OpenAI 兼容
通义千问 dashscope.aliyuncs.com 自有格式 自有格式
智谱 GLM open.bigmodel.cn 自有格式 自有格式

LangChain4j 的统一抽象:

复制代码
// 不管底层是什么模型,调用方式完全一样
ChatLanguageModel model = ...;  // 可以是任何模型
String answer = model.generate("你好");

切换模型只需要改配置,代码零改动。

问题三:缺少高级功能

功能 直接调 API LangChain4j
多轮对话记忆 手动维护 List<Message> ChatMemory 自动管理
系统提示词 手动拼接到消息列表 @SystemMessage 注解
流式输出 手动处理 SSE/NDJSON StreamingChatModel 内置
工具调用 手动解析 JSON Schema @Tool 注解
RAG 检索 自行实现向量检索 EmbeddingStore + Retriever

四、LangChain4j 的核心 API

1. ChatLanguageModel ------ 最核心的接口

复制代码
public interface ChatLanguageModel {
    // 同步调用
    String generate(String userMessage);
    ChatResponse chat(ChatRequest request);
    
    // 流式调用
    void chat(ChatRequest request, StreamingChatResponseHandler handler);
}

2. 模型构建 ------ Builder 模式

复制代码
// 构建 OpenAI 模型
OpenAiChatModel model = OpenAiChatModel.builder()
    .apiKey("sk-xxx")
    .baseUrl("https://api.deepseek.com")
    .modelName("deepseek-chat")
    .temperature(0.7)
    .logRequests(true)
    .build();

// 构建 Ollama 本地模型
OllamaChatModel model = OllamaChatModel.builder()
    .baseUrl("http://localhost:11434")
    .modelName("qwen2.5:7b")
    .build();

3. Spring Boot Starter ------ 零配置启动

application.properties:

复制代码
langchain4j.open-ai.chat-model.api-key=sk-xxx
langchain4j.open-ai.chat-model.base-url=https://api.deepseek.com
langchain4j.open-ai.chat-model.model-name=deepseek-chat

Java 代码:

复制代码
@Service
public class ChatService {
    @Autowired
    private ChatLanguageModel model;  // Spring 自动注入
    
    public String chat(String msg) {
        return model.generate(msg);
    }
}

五、LangChain4j 的架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    应用层(你的业务代码)                     │
│          @AiService 接口 / ChatService / Controller         │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│              langchain4j-spring-boot-starter                │
│         自动配置、@AiService 代理、ChatMemory 管理           │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│                  langchain4j-core                           │
│    ChatLanguageModel / ChatRequest / ChatResponse / 工具类   │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────┬───────────────┼───────────────┬──────────────────┐
│          │               │               │                  │
▼          ▼               ▼               ▼                  ▼
┌──────┐ ┌──────┐    ┌──────────┐   ┌──────────┐    ┌──────────┐
│OpenAI│ │Ollama│    │ DashScope │   │   Azure  │    │  ...     │
│      │ │      │    │ (通义千问) │   │  OpenAI  │    │          │
└──────┘ └──────┘    └──────────┘   └──────────┘    └──────────┘

六、实战:5 分钟快速接入

Step 1:添加依赖(Spring Boot 2.7.x)

复制代码
<properties>
    <langchain4j.version>0.33.0</langchain4j.version>
</properties>

<dependencies>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
        <version>${langchain4j.version}</version>
    </dependency>
</dependencies>

Step 2:配置 application.properties

复制代码
langchain4j.open-ai.chat-model.base-url=https://api.deepseek.com
langchain4j.open-ai.chat-model.api-key=sk-xxx
langchain4j.open-ai.chat-model.model-name=deepseek-chat

Step 3:写代码

复制代码
@RestController
public class ChatController {
    
    @Autowired
    private ChatLanguageModel model;
    
    @GetMapping("/chat")
    public String chat(@RequestParam String msg) {
        return model.generate(msg);
    }
}

完成! 一个 AI 聊天接口就写好了。


七、版本兼容性说明

LangChain4j 版本 Spring Boot JDK 说明
0.33.0 2.7.x 8/11/17 ✅ 稳定推荐
1.0.0-beta3 2.7.x 8/11/17 较旧,API 有变化
1.15.0-beta25+ 3.x 17+ 新版本,需要 Spring Boot 3.x

⚠️ 注意 :1.15.0+ 版本需要 Spring Boot 3.x(要求 Java 17),且包名从 javax 改为 jakarta


八、总结

LangChain4j 的核心价值

价值 说明
统一抽象 一套 API 对接所有主流大模型
代码简洁 从 10+ 行 HTTP 调用变成 1 行 generate()
功能丰富 多轮对话、工具调用、RAG、流式输出等开箱即用
Spring Boot 整合 Starter 自动配置,完美融入 Spring 生态
生产级特性 重试、超时、日志、异常处理等企业级功能

适用场景

  • ✅ 需要对接多个大模型(OpenAI、DeepSeek、通义千问等)

  • ✅ 需要多轮对话记忆

  • ✅ 需要工具调用(Function Calling)

  • ✅ 需要 RAG 检索增强

  • ✅ 需要流式输出

  • ✅ Spring Boot 项目

相关推荐
Mr数据杨1 小时前
医学影像分类实战复盘 从 Kaggle 竞赛到可落地建模流程
人工智能·数据分析·kaggle竞赛
AI情绪识别开源2 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
ZGIAI2 小时前
ZGI 迭代节点:批量资料的逐项处理
人工智能·架构
ZGIAI3 小时前
ZGI 知识检索:让业务回答有据可查
人工智能·架构
Asize3 小时前
框架的说明书是写给 AI 看的:我用 Next.js 搭了个博客
人工智能·代码规范·next.js
2601_955662463 小时前
AI 配音工具 7 款实测:短视频、影视解说、小说推文音质横向对比
人工智能·音视频·语音识别·视频
AI创界者3 小时前
PinkCherry-MiniMax-H3 全能AI视频整合包:8G显存开箱即用,支持首尾帧/超分补帧/自动提示词
人工智能·aigc
罗西的思考3 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
Mr数据杨3 小时前
GNSS伪距误差预测实战案例 从Kaggle回归任务到城市定位误差补偿
人工智能·数据分析·kaggle竞赛