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 项目

相关推荐
做萤石二次开发的哈哈3 小时前
连锁门店、园区、交通枢纽的视频如何统一汇集?应用模板的接入与分权管理详解
人工智能·物联网·音视频·二次开发·视频监控·蓝海aiot一站式工作台·萤石云开放平台
老金带你玩AI4 小时前
全程拿着手机,我让dot准备了一场AI分享
人工智能
nvd114 小时前
Flink 批处理驱动的湖仓 AI 财务研报流水线:从双流广播汇聚到 Agent 智能决策与原生 Iceberg 落盘全景实战
大数据·人工智能·flink
kimnoic4 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna4 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏4 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
点云-激光雷达-Slam-三维牙齿4 小时前
100,000 Records CSV File - India Traffic Accident Analysis Dataset.7z
人工智能·数据集
TechWayfarer4 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer
七十二时9565 小时前
视频掉帧怎么用AI补帧
人工智能
可达智灵5 小时前
信创适配|织灵 Coda Loom 2.0 完成银河麒麟服务器操作系统 V10、V11 适配认证
人工智能·可达智灵