SpringBoot 整合Langchain4j 对接主流大模型实战详解

目录

一、前言

[二、Langchain4j 介绍](#二、Langchain4j 介绍)

[2.1 Langchain4j 是什么](#2.1 Langchain4j 是什么)

[2.2 Langchain4j 主要特点](#2.2 Langchain4j 主要特点)

[2.3 Langchain4j 核心组件](#2.3 Langchain4j 核心组件)

[2.4 Langchain4j 核心优势](#2.4 Langchain4j 核心优势)

[三、Langchain4j 整合常用大模型案例实践](#三、Langchain4j 整合常用大模型案例实践)

[3.1 前置准备](#3.1 前置准备)

[3.1.1 对接通义千问大模型](#3.1.1 对接通义千问大模型)

[3.1.2 对接DeepSeek大模型](#3.1.2 对接DeepSeek大模型)

[3.1.3 创建工程导入核心依赖](#3.1.3 创建工程导入核心依赖)

[3.2 Langchain4j 对接DeepSeek大模型](#3.2 Langchain4j 对接DeepSeek大模型)

[3.2.1 导入核心依赖](#3.2.1 导入核心依赖)

[3.2.2 添加配置文件](#3.2.2 添加配置文件)

[3.2.3 添加测试接口](#3.2.3 添加测试接口)

[3.3 Langchain4j 对接阿里云大模型](#3.3 Langchain4j 对接阿里云大模型)

[3.3.1 导入核心依赖](#3.3.1 导入核心依赖)

[3.3.2 添加配置文件](#3.3.2 添加配置文件)

[3.3.3 添加测试接口](#3.3.3 添加测试接口)

[3.4 基于百炼平台使用openai的调用](#3.4 基于百炼平台使用openai的调用)

四、写在文末


一、前言

当下随着各种AI大模型的应用市场深入到各个领域,AI赋能为业务的拓展和商业价值的延伸带来了无限的可能。大厂商陆续推出对市面尚主流AI大模型的接入和支持,方便普通用户或开发者快速体验最新的大模型能力,以DeepSeek为例,像阿里云,硅基流动,智谱等众多厂商,都已经提供了与其对接的方式。与此同时,为了应用开发者能够基于自身的业务快速对接各类AI大模型API能力,更灵活的拓展自身的业务能力。而在java领域,以spring ai为代表的领域界技术框架近期正式宣布发布1.0版本,这也代表了以spring家族接入和应用AI大模型的能力的进一步提升,而另一个大模型的框架Langchain4j,则以其在python领域的强大生态能力,成为自大模型诞生以来占据行业重要地位的技术框架,本文以Langchain4j为例进行说明,详细介绍下如何基于Springboot,快速对接当下行业主流的大模型,打通各个大模型厂商,从而实现微服务自身价值的提升。

二、Langchain4j 介绍

2.1 Langchain4j 是什么

LangChain4j作为一款专注于AI大模型集成的开源库,近年来受到了广泛关注。它旨在为开发者提供一种简单且高效的方式来接入和利用各种AI大模型,从而提升应用程序的智能化水平。LangChain4j的核心优势在于其高度的灵活性和易用性,使得开发者可以在不改变现有架构的前提下,快速实现AI功能的集成。

官网入口:LangChain

开发者文档地址:Introduction | LangChain4j

Github 地址:GitCode - 全球开发者的开源社区,开源代码托管平台

2.2 Langchain4j 主要特点

LangChain4j 是一个基于 Java 的框架,旨在简化与大型语言模型(LLMs)的集成和应用开发。它提供了丰富的工具和组件,帮助开发者快速构建基于 LLM 的应用程序,如聊天机器人、问答系统、文本生成等。其核心特点如下:

  • 模块化设计

    • LangChain4j 采用模块化架构,允许开发者根据需要选择和使用特定功能,如模型集成、数据加载、链式调用等。
  • 多模型支持:

    • 支持多种 LLM 提供商,如 DeepSeek ,Qwen ,OpenAI,Hugging Face 等,方便切换和集成不同模型。
  • 链式调用:

    • 提供链式调用功能,允许将多个任务串联,如文本生成后自动进行情感分析。
  • 数据加载与处理:

    • 内置多种数据加载器和处理器,支持从不同来源加载数据并进行预处理。
  • 扩展性好

    • 提供丰富的 API 和扩展点,开发者可以自定义组件以满足特定需求。
  • 社区活跃

    • 拥有活跃的社区和详细的文档,便于开发者获取支持和学习。

2.3 Langchain4j 核心组件

Langchain4j 的强大之处正是在于其内置了丰富的可以做到开箱即用的组件能力,相比Spring AI,Langchain4j 的组件更加丰富,在使用的时候也更灵活,下面是一张关于Langchain4j 的组件全景图。

2.4 Langchain4j 核心优势

LangChain4j 是一个专为 Java 开发者设计的框架,旨在简化与大型语言模型(LLMs)的集成和应用开发。它的核心优势主要体现在以下几个方面:

1)Java 原生支持

  • LangChain4j 是专为 Java 生态系统设计的,与 Java 开发工具和框架无缝集成。

  • 对于 Java 开发者来说,无需学习其他语言(如 Python)即可使用 LLM 的强大功能。

  • 支持 Spring Boot 等主流 Java 框架,便于快速集成到现有项目中。

2)模块化设计与灵活性

  • 采用模块化设计,开发者可以根据需求选择特定功能,如模型集成、数据加载、链式调用等。

  • 提供丰富的扩展点,支持自定义组件和插件,满足个性化需求。

3)多模型支持

  • 支持多种主流 LLM 提供商,如 DeepSeek,Qwen,OpenAI,Hugging Face等。

  • 提供统一的 API 接口,方便切换不同模型,降低对单一供应商的依赖。

4)链式调用(Chains)

  • 支持将多个任务串联成链,实现复杂的任务流程。

  • 例如,可以将文本生成、情感分析、翻译等任务组合成一个链式调用,简化开发流程。

5)数据加载与处理

  • 内置多种数据加载器,支持从文件、数据库、API 等来源加载数据。

  • 提供数据预处理工具,如文本清洗、分词、格式化等,便于后续分析和处理。

6)高性能与可扩展性

  • 针对 Java 的高性能特性进行优化,适合处理大规模数据和复杂任务。

  • 支持分布式计算和异步调用,适合高并发场景。

7)丰富的工具和实用功能

  • 提供多种实用工具,如日志记录、配置管理、缓存机制等。

  • 内置对 Prompt 工程的支持,帮助开发者更好地设计和优化提示词(Prompts)。

8)活跃的社区与文档支持

  • 拥有活跃的开发者社区,提供及时的技术支持和问题解答。

  • 提供详细的文档和示例代码,帮助开发者快速上手。

三、Langchain4j 整合常用大模型案例实践

接下来,以微服务中主流技术框架springboot为例,通过实战案例演示如何整合Langchain4j 并对接目前市场上主流的AI大模型能力。

3.1 前置准备

在正式开始对接各类大模型之前,需要提前在相关的大模型平台获取对接的apikey,下面分别说明。

3.1.1 对接通义千问大模型

对接通义千问系列的大模型,目前比较快捷的方式是通过阿里云的百炼平台进行使用

百炼大模型:大模型服务平台百炼控制台

帮助文档:如何获取API Key_大模型服务平台百炼(Model Studio)-阿里云帮助中心

1)获取apikey

如下,找到左侧API-Key菜单,然后点击创建API-Key,这里的apikey即为程序中对接的时候要使用的。

3.1.2 对接DeepSeek大模型

需要登录DeepSeek API对接中心获取apikey,操作入口:DeepSeek ,登录到下图的页面后,在左侧API Keys一栏,点击创建API Key ,注意,使用官方的apikey需要为当前账户留有一定的金额

3.1.3 创建工程导入核心依赖

创建一个springboot 工程,并导入下面的核心依赖

bash 复制代码
<properties>
     <maven.compiler.source>17</maven.compiler.source>
     <maven.compiler.target>17</maven.compiler.target>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <spring-boot.version>3.2.6</spring-boot.version>
     <knife4j.version>4.3.0</knife4j.version>
     <langchain4j.version>1.0.0-beta3</langchain4j.version>
     <mybatis-plus.version>3.5.11</mybatis-plus.version>
 </properties>

 <dependencies>

     <!-- web应用程序核心依赖 -->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

     <!-- 编写和运行测试用例 -->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>

     <!-- 基于open-ai的langchain4j接口:ChatGPT、deepseek都是open-ai标准下的大模型 -->
     <!--<dependency>
         <groupId>dev.langchain4j</groupId>
         <artifactId>langchain4j-open-ai</artifactId>
         <version>${langchain4j.version}</version>
     </dependency>-->

     <!-- 基于openai系列整合的springboot-starter -->
     <dependency>
         <groupId>dev.langchain4j</groupId>
         <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
     </dependency>

     <!-- 接入阿里云百炼平台 -->
     <dependency>
         <groupId>dev.langchain4j</groupId>
         <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
     </dependency>

     <!--langchain4j高级功能-->
     <dependency>
         <groupId>dev.langchain4j</groupId>
         <artifactId>langchain4j-spring-boot-starter</artifactId>
     </dependency>

 </dependencies>

 <dependencyManagement>
     <dependencies>
         <!--引入SpringBoot依赖管理清单-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-dependencies</artifactId>
             <version>${spring-boot.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>

         <!--引入langchain4j依赖管理清单-->
         <dependency>
             <groupId>dev.langchain4j</groupId>
             <artifactId>langchain4j-bom</artifactId>
             <version>${langchain4j.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>

         <!--引入百炼依赖管理清单-->
         <dependency>
             <groupId>dev.langchain4j</groupId>
             <artifactId>langchain4j-community-bom</artifactId>
             <version>${langchain4j.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>

     </dependencies>

 </dependencyManagement>

3.2 Langchain4j 对接DeepSeek大模型

使用Langchain4j 在最初对接DeepSeek的时候,走的是openai的标准对接,所以在上述的pom中可以看到langchain4j-open-ai-spring-boot-starter这个依赖组件。

3.2.1 导入核心依赖

pom文件中导入下面的这个依赖

bash 复制代码
<!-- 基于openai系列整合的springboot-starter -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>

3.2.2 添加配置文件

在工程的配置文件中添加下面的配置信息

java 复制代码
server:
  port: 8082

#直接对接的是deepseek官网的的大模型
langchain4j:
  open-ai:
    chat-model:
      api-key: 你的apikey   #这里填写的是官网的api-key
      model-name: deepseek-chat
      log-requests: true
      log-responses: true
      base-url:  https://api.deepseek.com

3.2.3 添加测试接口

添加一个测试接口,接口中主要是测试deepseek的对话能力,参考下面的代码:

java 复制代码
package com.congge.controller;

import dev.langchain4j.model.openai.OpenAiChatModel;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/deepseek")
public class OpenAiDeepController {

    @Autowired
    private OpenAiChatModel openAiChatModel;

    //localhost:8082/deepseek/chat?question=你是谁
    @GetMapping("/chat")
    public Object chat(@RequestParam("question") String question){
        String chat = openAiChatModel.chat(question);
        return chat;
    }

}

启动工程之后,调用一下接口,看到下面的效果

3.3 Langchain4j 对接阿里云大模型

阿里云百炼平台上提供了丰富的各个厂商的大模型可供选择,比如千问系列,deepseek系列等,这样为应用开发者提供了更加丰富的选择,也更为灵活,下面简单介绍下使用方式。

3.3.1 导入核心依赖

使用阿里云百炼平台上的大模型,需要导入下面的这个依赖,这个组件相当是提供了langchain4j操作各个大模型的纽带功能

java 复制代码
<!-- 接入阿里云百炼平台 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
</dependency>

3.3.2 添加配置文件

在配置文件中添加下面的配置信息

java 复制代码
server:
  port: 8082

#直接对接的是deepseek官网的的大模型
langchain4j:

  #阿里百炼平台的模型
  community:
    dashscope:
      chat-model:
        api-key: 你的apikey #这个是白炼平台的apikey
        model-name: qwen-max

logging:
  level:
    root: debug

3.3.3 添加测试接口

在工程中添加一个测试接口,这里提供了一个对话的接口和文生图的接口,参考下面的代码

java 复制代码
package com.congge.controller;

import dev.langchain4j.community.model.dashscope.QwenChatModel;
import dev.langchain4j.community.model.dashscope.WanxImageModel;
import dev.langchain4j.data.image.Image;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.net.URI;

@RestController
@RequestMapping("/qwen")
public class QwenCahtController {

    @Autowired
    private QwenChatModel qwenChatModel;

    //localhost:8082/qwen/chat?question=你是谁
    @GetMapping("/chat")
    public Object chat(@RequestParam("question") String question){
        String chat = qwenChatModel.chat(question);
        return chat;
    }

    //localhost:8082/qwen/image
    @GetMapping("/image")
    public Object image(){
        WanxImageModel wanxImageModel = WanxImageModel.builder()
                .modelName("wanx2.1-t2i-plus")
                .apiKey("你的apikey")
                .build();
        String desc = "奇幻森林精灵:在一片弥漫着轻柔薄雾的\n" +
                "                古老森林深处,阳光透过茂密枝叶洒下金色光斑。一位身材娇小、长着透明薄翼的精灵少女站在一朵硕大的蘑菇上。她\n" +
                "                有着海藻般的绿色长发,发间点缀着蓝色的小花,皮肤泛着珍珠般的微光。身上穿着由翠绿树叶和白色藤蔓编织而成的\n" +
                "                连衣裙,手中捧着一颗散发着柔和光芒的水晶球,周围环绕着五彩斑斓的蝴蝶,脚下是铺满苔藓的地面,蘑菇和蕨类植\n" +
                "                物丛生,营造出神秘而梦幻的氛围。";
        Response<Image> response = wanxImageModel.generate(desc);
                System.out.println(response.content().url());
        URI url = response.content().url();
        return url;
    }

}

启动工程后,分别做一下测试

1)对话接口效果

2)文生图接口效果

打开生成的url链接,最后下载的图片效果图如下,画面的质量还是很不错的

3.4 基于百炼平台使用openai的调用

引入了百炼的SDK依赖之后,如果你仍然想用之前对接openai的方式使用,依赖仍然使用第一个openai的,只需要简单调整下配置参数即可,如下,工程的配置文件中调整成下面这样,核心调整的位置包括:

  • apikey ,上面那种方式写的是deepseek官网的,这里写的是百炼上面的;

  • base-url ,上面写的是deepseek官网的,这里写的是百炼的地址;

java 复制代码
server:
  port: 8082

#直接对接的是deepseek官网的的大模型
langchain4j:
  #改成阿里云百炼平台的deepseek模型
  open-ai:
    chat-model:
      api-key: 你的apikey  #百炼平台的apikey
      model-name: deepseek-v3
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      temperature: 0.7

仍然使用下面的这个接口

java 复制代码
package com.congge.controller;

import dev.langchain4j.model.openai.OpenAiChatModel;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/deepseek")
public class OpenAiDeepController {

    @Autowired
    private OpenAiChatModel openAiChatModel;

    //localhost:8082/deepseek/chat?question=你是谁
    @GetMapping("/chat")
    public Object chat(@RequestParam("question") String question){
        String chat = openAiChatModel.chat(question);
        return chat;
    }

}

启动工程后,调用下接口,效果如下:

四、写在文末

本文详细介绍了springboot整合langchain4j对接市场上主流大模型的详细过程,并通过实际案例演示了对接的过程,对于其他的大模型,其对接流程和方式也差不多,有兴趣的同学可以基于此继续深入研究,本篇到此结束,感谢观看。