一直都在572头像
关注

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-aiOpenAI 及兼容接口(DeepSeek、智谱等)的实现
langchain4j-ollama本地部署的 Ollama 模型支持
langchain4j-dashscope阿里云百炼(通义千问)支持
langchain4j-spring-boot-starterSpring Boot 整合,提供 @AiService 等高级功能
langchain4j-open-ai-spring-boot-starterOpenAI 模型的 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 地址请求格式响应格式
OpenAIapi.openai.comOpenAI 格式OpenAI 格式
DeepSeekapi.deepseek.comOpenAI 兼容OpenAI 兼容
通义千问dashscope.aliyuncs.com自有格式自有格式
智谱 GLMopen.bigmodel.cn自有格式自有格式

LangChain4j 的统一抽象:

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

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

问题三:缺少高级功能

功能直接调 APILangChain4j
多轮对话记忆手动维护 List<Message>ChatMemory 自动管理
系统提示词手动拼接到消息列表@SystemMessage 注解
流式输出手动处理 SSE/NDJSONStreamingChatModel 内置
工具调用手动解析 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 BootJDK说明
0.33.02.7.x8/11/17✅ 稳定推荐
1.0.0-beta32.7.x8/11/17较旧,API 有变化
1.15.0-beta25+3.x17+新版本,需要 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 项目

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2403_89732016/article/details/163640554

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--