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

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. 背景与定位

维度LangChain4jSpring 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 AISpring 全家桶用户无缝上手过度依赖 Spring 生态,非 Spring 项目适配成本高
📚 文档与社区
  • LangChain4j:文档较精简,社区活跃度依赖 Java 开发者自发贡献
  • Spring AI:官方文档完善,背后有 Spring 团队支持,更新频率高

4. 性能与生产适用性

场景LangChain4jSpring 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直接跑不起来,各位小伙伴领会精神就行哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值