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,包含 ChatLanguageModel、UserMessage、AiMessage 等
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 项目

相关推荐
小和尚同志2 小时前
54.6k star 的 Multica: 集多 Agent 和看板于一体的 AI 平台
人工智能·aigc·three.js
一枕槐安4873 小时前
少样本提示(Few-shot)在业务场景的落地实践
大数据·人工智能·意图分类·mmr多样性·knn检索·动态示例选择
小徐不徐说3 小时前
序列化与反序列化:把 C++ 对象可靠地保存下来
开发语言·数据库·c++·php
ragnwang4 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
王中阳Go4 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
海宇AI4 小时前
零信任架构实战:基于海宇个人风险报告构建自动化分期商城信用额度初审网关
运维·人工智能·架构·自动化
骑着蜗牛撵大象3274 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
tellmewhoisi4 小时前
深度学习32:卷积神经网络:卷积层(卷积运算,填充,步幅)
人工智能·深度学习·cnn
weixin_307779135 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展