Java开发者の模型召唤术:LangChain4j咏唱指南

langchain4j简介

LangChain4j 是一个专为Java开发者设计的开源库,旨在简化将大型语言模型(LLM)集成到Java应用程序中的过程。它于2023年初开发,灵感来源于Python和JavaScript的LLM库,特别是为了填补Java领域在这一方面的空白。

在langchain4j之前可能是这样调用方式:

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user", 
            "content": "你是谁?"
        }
    ]
}'

那么在使用langchain4j后你的代码可以这么写:

public static void main(String[] args) {
        OpenAIClient client = OpenAIOkHttpClient.builder()
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
        ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
                .addUserMessage("你是谁")
                .model("qwen-plus")
                .build();
        ChatCompletion chatCompletion = client.chat().completions().create(params);
        System.out.println(chatCompletion.choices().get(0).message().content().orElse("无返回内容"));
    }

LangChain4j 的核心功能

统一API:LangChain4j提供了一个标准化的API,使得开发者可以方便地接入15+个主流的LLM提供商(如OpenAI、Google 、阿里、 智谱)和15+个向量嵌入存储(Qdrant、Pinecone、Milvus)。这意味着开发者无需学习每个API的细节,可以轻松切换不同的模型和存储,而无需重写代码。

Langchain4j和SpringAI对比

LangChain4jSpring AI 的详细对比:


1. 背景与定位

维度 LangChain4j Spring AI
出身 LangChain 生态的 Java 移植版 Spring 官方推出的 AI 集成框架
核心目标 提供灵活、模块化的 AI 链式调用能力 简化 Spring 生态中 AI 模型的集成与调用
哲学 “让 AI 调用像积木一样拼接” “Spring 化一切,包括 AI”

2. 核心功能对比

🔧 模型支持
  • LangChain4j

    • 支持 OpenAI、HuggingFace、本地模型(如 Ollama)

    • 提供 链式调用(Chain)、工具调用(Tools)、记忆(Memory)等高级抽象

    • 示例代码:

      ChatLanguageModel model = OpenAiChatModel.builder().apiKey("demo").build();
      String answer = model.generate("讲个冷笑话"); // 直接调用
      
  • Spring AI

    • 通过 统一接口 兼容 OpenAI、Azure、HuggingFace 等

    • 深度集成 Spring Boot,用 @Bean 注入模型,支持 自动配置

    • 示例代码:

      @Autowired
      private ChatClient chatClient; // 注入即可用
      
      String joke = chatClient.call("讲个程序员笑话"); 
      
⛓ 链式编排能力
  • LangChain4j
    原生支持复杂链式流程(如:检索 -> 推理 -> 格式化输出),适合需要 多步骤AI协作 的场景

    Chain chain = Chain.builder()
        .add(new WebSearchTool())
        .add(new JsonOutputConverter())
        .build();
    chain.execute("查北京天气并输出JSON");
    
  • Spring AI
    更侧重 单次模型调用,复杂流程需开发者手动组合,但可通过 Spring Integration 扩展

🛠 扩展性
  • LangChain4j:模块化设计,自定义工具(Tools)、记忆存储(Memory)较灵活
  • Spring AI:依赖 Spring 生态扩展(如用 Spring Data 持久化对话记录)

3. 开发体验对比

🚀 上手难度
框架 优势 痛点
LangChain4j 适合喜欢 “即插即用” 的开发者 需手动管理依赖,配置稍显繁琐
Spring AI Spring 全家桶用户无缝上手 过度依赖 Spring 生态,非 Spring 项目适配成本高
📚 文档与社区
  • LangChain4j:文档较精简,社区活跃度依赖 Java 开发者自发贡献
  • Spring AI:官方文档完善,背后有 Spring 团队支持,更新频率高

4. 性能与生产适用性

场景 LangChain4j Spring AI
快速原型开发
复杂AI流水线 ✅(链式设计优势)
高并发微服务 ⚠️ 需自行优化 ✅(Spring 生态加持)
企业级权限/监控集成 ✅(与 Spring Security/Actuator 天然兼容)

5. 终极选择指南

选 LangChain4j :
  • 需要灵活构建 多步骤AI工作流(如RAG、Agent)
  • 项目技术栈 非 Spring 主导
  • 喜欢 “代码即配置” 的极客风格
选 Spring AI :
  • 已是 Spring Boot 项目,追求最小集成成本
  • 需要快速实现 基础模型调用(如Chat、Embeddings)
  • 看重 企业级功能(安全、监控、依赖管理)

▍一句话毒舌总结

  • LangChain4j“把AI调用玩成乐高积木的极客工具”
  • Spring AI“Spring生态的AI外挂,官方认证的‘偷懒神器’”

Langchain4j-maven项目集成

maven项目对于java项目开发者来说,并不陌生,首先创建maven项目工程

重要的事情说三遍:

JDK请一定选择 JDK17+

JDK请一定选择 JDK17+

JDK请一定选择 JDK17+

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.jerry</groupId>
  <artifactId>langchain4j-mvn-demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>langchain4j-mvn-demo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jdk.version>17</jdk.version>
    <langchain4j.version>1.0.0-beta2</langchain4j.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
<!--langchain4j-openai-->
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-open-ai</artifactId>
      <version>${langchain4j.version}</version>
    </dependency>
<!--    langchain4j-->
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j</artifactId>
      <version>${langchain4j.version}</version>
    </dependency>
  </dependencies>
</project>

1.免费体验

在引入依赖后呢,基本编写方式如下:

  OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey("your api key")
                .modelName("model name")
                .build();
        String hello = model.chat("你是谁?");
        System.out.println(hello);

api key 为openAI你自己申请的api key,由于外网充值什么的都不是很方便,所以建议还是使用国内的一些模型,比如deepseek,阿里云百炼等apikey即可。

langchain4j官网给出,如果没有密钥的话可以尝试如下方案:

OpenAiChatModel model = OpenAiChatModel.builder()
    .baseUrl("http://langchain4j.dev/demo/openai/v1")
    .apiKey("demo")
    .modelName("gpt-4o-mini")
    .build();
String hello = model.chat("你是谁?");
        System.out.println(hello);

但是经过本人测试发现,只有<langchain4j.version>1.0.0-beta1</langchain4j.version>

时才会让你去免费体验使用。<langchain4j.version>1.0.0-beta2</langchain4j.version>中OpenAIChatModel源码中有做判断,如果模型时demo会抛出运行时异常

1.0.0-beta1版本源码解析及运行截图:

请添加图片描述

运行结果:

请添加图片描述

1.0.0-beta2版本源码解析及运行截图:

请添加图片描述

所以想免费体验的小伙伴,建议还是使用<langchain4j.version>1.0.0-beta1</langchain4j.version>

2.大模型接入

以下的一些模型接入,都会使用到apikey,像一些开源的以及闭源的大模型,小伙伴们自行去申请apikey,在此演示deepseek以及阿里云百炼上的一些模型的接入。

2.1接入deepseeek

apikey自行申请

请添加图片描述

/***
     * 使用条件:需要使用deepseek的apiKey
     * @return
     */
    public static String deepSeekDemo() {
        String apiKey="your deepseekapi key";
        OpenAiChatModel model = OpenAiChatModel.builder()
                .baseUrl("https://api.deepseek.com/v1")//deepseek官方请求地址
                .apiKey(apiKey) //自己申请的可以使用的apikey
                .modelName("deepseek-chat") //模型名称,deepseek的话现在支持deepseek-chat/deepseek-reasoner 其中deepseek-reasoner 对应推理大模型R1
                .build();

        String hello = model.chat("你是谁?");
        return hello;
    }

运行结果:

请添加图片描述

2.2接入阿里云百炼平台

引入依赖

    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-community-dashscope</artifactId>
      <version>${langchain4j.version}</version>
    </dependency>

自行注册阿里云百炼平台账号,自行获取apikey,近期新用户对于一些主流的大模型好像直接给送token

请添加图片描述

2.2.1通过阿里云百炼平台接入阿里千问大模型
/***
     * 使用条件:需要使用dashscope的apiKey
     * @return
     */
    public static String QwqDemo() {
         String apiKey="your dashscope key";
        OpenAiChatModel model = OpenAiChatModel.builder()
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .apiKey(apiKey)
                .modelName("qwen-max")
                .build();

        String hello = model.chat("你是谁?");
        return hello;
    }

运行结果:

请添加图片描述

2.2.2通过阿里云百炼平台接入deepseek大模型

在模型广场选择deepseek

请添加图片描述

代码示例:

/***
     * 使用条件:需要使用dashscope的apiKey
     * you can also use the following code to use the deepseek model
     * @return
     */
    public static String Qwq_deepseekDemo() {
      String apiKey="your dashscope key";
        OpenAiChatModel model = OpenAiChatModel.builder()
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .apiKey(apiKey)
                .modelName("deepseek-r1")
                .build();

        String hello = model.chat("你是谁?");
        return hello;
    }

运行结果:

请添加图片描述

2.2.3通过阿里云百炼平台接入其他大模型

百炼平台还有一些不同于语言模型的大模型,能够完成一些其他的操作

请添加图片描述

在此对于文生图这个模型,在做一点演示,有感兴趣的小伙伴们自行去了解,尝试其他的叭

示例代码:

/***
     * 使用条件:需要使用dashscope的apiKey
     * 文生图
     * @return
     */
    public static String Qwq_WordToPicDemo() {
        String apiKey = "your dashscope key";
        WanxImageModel build = WanxImageModel.builder()
                .apiKey(apiKey)
                .modelName("wanx2.1-t2i-plus")
                .build();

        Response<Image> response = build.generate("草地");
        return response.content().url().toString();
    }

运行结果:

请添加图片描述

返回文件uri,点击跳转下载

发现ai生成的图是真不错啊

在这里插入图片描述

2.3 接入本地ollama

还记得在《大模型-本地化部署调用–基于ollama+openWebUI+springBoot》这篇博客中通过ollama安装的本地大模型嘛?

请添加图片描述

我们尝试接入一下

首先引入ollama依赖

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-ollama</artifactId>
    <version>${langchain4j.version}</version>
</dependency>

代码示例:

/***
     * 使用条件:自己部署ollama本地大模型
     * 文生图
     * @return
     */
    public static String ollamaDemo() {

        OllamaChatModel build = OllamaChatModel.builder()
                .baseUrl("http://XXXX:11434")
                .modelName("qwen2.5-coder:1.5b")
                .build();

        String resp = build.chat("你好 你是谁");
        return resp;
    }

运行结果:

请添加图片描述

服务器资源有限qwen:1.8b直接跑不起来,各位小伙伴领会精神就行哈。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐