SpringBoot 整合Langchain4j 对接主流大模型实战详解
目录
一、前言
二、Langchain4j 介绍
2.1 Langchain4j 是什么
2.2 Langchain4j 主要特点
2.3 Langchain4j 核心组件
2.4 Langchain4j 核心优势
三、Langchain4j 整合常用大模型案例实践
3.1 前置准备
3.1.1 对接通义千问大模型
3.1.2 对接DeepSeek大模型
3.1.3 创建工程导入核心依赖
3.2 Langchain4j 对接DeepSeek大模型
3.2.1 导入核心依赖
3.2.2 添加配置文件
3.2.3 添加测试接口
3.3 Langchain4j 对接阿里云大模型
3.3.1 导入核心依赖
3.3.2 添加配置文件
3.3.3 添加测试接口
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 工程,并导入下面的核心依赖
<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文件中导入下面的这个依赖
<!-- 基于openai系列整合的springboot-starter -->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>
3.2.2 添加配置文件
在工程的配置文件中添加下面的配置信息
server:port: 8082#直接对接的是deepseek官网的的大模型
langchain4j:open-ai:chat-model:api-key: 你的apikey #这里填写的是官网的api-keymodel-name: deepseek-chatlog-requests: truelog-responses: truebase-url: https://api.deepseek.com
3.2.3 添加测试接口
添加一个测试接口,接口中主要是测试deepseek的对话能力,参考下面的代码:
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 {@Autowiredprivate 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操作各个大模型的纽带功能
<!-- 接入阿里云百炼平台 -->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
</dependency>
3.3.2 添加配置文件
在配置文件中添加下面的配置信息
server:port: 8082#直接对接的是deepseek官网的的大模型
langchain4j:#阿里百炼平台的模型community:dashscope:chat-model:api-key: 你的apikey #这个是白炼平台的apikeymodel-name: qwen-maxlogging:level:root: debug
3.3.3 添加测试接口
在工程中添加一个测试接口,这里提供了一个对话的接口和文生图的接口,参考下面的代码
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 {@Autowiredprivate 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官网的,这里写的是百炼的地址;
server:port: 8082#直接对接的是deepseek官网的的大模型
langchain4j:#改成阿里云百炼平台的deepseek模型open-ai:chat-model:api-key: 你的apikey #百炼平台的apikeymodel-name: deepseek-v3base-url: https://dashscope.aliyuncs.com/compatible-mode/v1temperature: 0.7
仍然使用下面的这个接口
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 {@Autowiredprivate 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对接市场上主流大模型的详细过程,并通过实际案例演示了对接的过程,对于其他的大模型,其对接流程和方式也差不多,有兴趣的同学可以基于此继续深入研究,本篇到此结束,感谢观看。