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

相关推荐
八号当铺2 小时前
使用 Figma Agent Kit:插件 + MCP + 还原 Skill,打通本地设计协作
前端·人工智能·ai编程
今天AI了吗2 小时前
时序大模型 TimechoAI 实战:从数据接入到智能时序分析全链路指南
人工智能
AI服务老曹2 小时前
多路摄像头AI分析完整流程:硬件选型与GPU/NPU算力估算指南
人工智能
触底反弹2 小时前
🚀 浏览器里跑 1.5B 参数大模型?我用 WebGPU + DeepSeek 做到了
人工智能·面试·typescript
吹什么轩2 小时前
c++复习:c++11:lambda表达式
开发语言·c++
pearbing2 小时前
AI搜索流量密码:8个核心GEO优化打法,拉高品牌曝光优先级
人工智能·geo
品牌测评3 小时前
Token Plan平台分享|七条算力订阅路径拆解
大数据·人工智能·架构
不会代码的小猴3 小时前
标准模板库(STL)
开发语言·c++·笔记·算法