当前位置: 首页 > ds >正文

LangChain4j入门(一)SpringBoot整合并接入Deepseek

前言

        我为什么选择 LangChain4j 框架入门AI实践?作为JAVA仔,我们肯定是希望快速上手,零语言障碍,使用熟悉的语言和框架无缝引入 LLM 能力,LangChain4j 与 Java 生态深度融合的特点正是我们需要的,另外它还有更多的优点。

        附 LangChain4j 官网地址:Introduction | LangChain4j

一、LangChain4j 的主要优点

① 与 Java 生态深度融合

        如图所见,我们可以看到 LangChain4j 官方为我们提供官方 Starter,我们只需要在配置文件中添加指定的open-api的配置,即可快速接入AI能力。

② 高度模块化与可扩展性

        按需引入组件:采用模块化设计,开发者仅需引入自己需要的 chain、memory、agent、vector store 等模块,避免臃肿依赖。

        内存管理:内置多种对话记忆(Memory)管理策略,支持短期/长期记忆持久化,方便构建多轮对话和上下文保持。

③ 企业级项目适配

        支持微服务架构(Spring Cloud等)、消息驱动(Kafka、RabbitMQ)等主流企业技术栈,可快速将 AI 能力嵌入大型系统中。

二、LangChain4j 的核心作用

① 统一模型调用接口

        定义了 LanguageModel、ChatLanguageModel、EmbeddingModel 等接口,将 OpenAI、Vertex AI、DeepSeek 等多家 LLM 提供商的调用细节封装在一致的 API 之下,使得切换或并行使用不同服务变得无缝简单。

② 链式工作流(Chains)

        提供“链”(Chains)机制,可将模型调用、提示词处理、数据转换等步骤串联为可复用的流程,助力构建复杂的多步骤 AI 应用。

③ 检索增强生成(RAG)

        内置向量化、分片、检索和嵌入管理功能,支持与 MongoDB Atlas Vector Search、ChromaDB、Pinecone、Weaviate 等向量数据库集成,实现基于语义匹配的上下文检索,再将检索结果与提示词一并发送给模型,显著提升生成质量。

④ 多种“工具”支持

        集成文档加载器(PDF、HTML、Markdown)、函数调用、流式输出、回调(Callbacks)等能力,使得 AI 系统能够灵活调用外部 API、执行计算或进行自定义逻辑。

三、同类型框架比较

特性LangChain4jSpring AI
设计初衷简化在 Java 应用中集成 LLM,提供统一 API 抽象,灵活切换 OpenAI、Vertex AI、DeepSeek 等多家模型服务。基于 Spring 生态,提供与 Spring Beans、配置、生命周期无缝结合的 AI 抽象,支持 Chat、Embedding、Text-to-Image 等多种模型调用。
核心抽象定义 ChatLanguageModelEmbeddingModelAgentChainMemory 等接口,全方位覆盖提示词、链式调用、对话记忆等场景。提供 AIChatTextToImageEmbedding 等通用接口,模型切换与调用方式保持一致,并暴露底层特性如流式(streaming)与函数调用(function calling)。
多模型支持原生支持 15+ 主流 LLM 提供商(OpenAI、Vertex AI、Anthropic、DeepSeek 等)及 15+ 向量存储(Pinecone、Chroma、Weaviate、Qdrant 等)。支持 OpenAI、Anthropic Claude、Azure OpenAI、Google Vertex AI、Groq、Mistral、Ollama 等;向量数据库通过文档读取器/写入器插件集成。
链式调用(Chains)完整实现 Chain 模式,可将提示词构建、模型调用、数据处理、工具执行串联,适用于复杂多步骤工作流。通过 Spring Bean 和装配机制,将多模型调用与处理逻辑以配置方式组装,支持自定义 Step 及流程;目前尚未提供与 LangChain 同级别的 Chain 库。
检索增强生成(RAG)内置文档分片、向量化、检索模块,可无缝对接常见向量库,构建高效 RAG 流水线。提供 ETL 风格的文档加载器、转换器、写入器,可对接多种向量库存储与检索,但需手动组装 RAG 流程。
多轮对话记忆支持短期/长期 Memory 管理,Memory 可持久化到数据库或内存中,实现对话上下文连续性。提供简单的对话上下文维护能力,更多依赖用户自行管理 Bean 作用域或外部存储,自带 Memory 方案相对轻量。
Spring 集成提供 Spring Boot Starter,一行配置自动装配 OpenAiChatModelEmbeddingStore 等 Bean;也支持 Quarkus、Helidon。与 Spring Boot 深度集成,AI 抽象即 Spring Bean,支持 @AIClient、自动配置、Properties/YAML 注入,以及 Micrometer 指标和 AOP 拦截。
可观测性 & 监控依赖用户自行引入 Micrometer、OpenTelemetry 集成示例;Quarkus 扩展提供内建 Metrics/Tracing/Dev Services。开箱即用 Micrometer 指标、Tracing 与 Auditing 支持,自动收集模型调用耗时、错误率等关键指标。
文档与社区官方文档全面(入门、示例、扩展),GitHub 社区活跃,Discord、Issue 交流及时。官方文档详尽(参考手册、Baeldung 教程、Medium 博文),Spring 社区庞大,Stack Overflow、Reddit 话题众多。

四、Spring工程整合LangChain4j

① 创建maven工程

        此处没有什么特殊的,大家可以从零创建一个新项目,也可以在现有的微服务脚手架里创建一个新的模块,我这里是使用自己的微服务脚手架,框架是开源的,如果大家没有脚手架可以直接使用我的,文末我会把仓库链接贴出来,我的脚手架的SpringBoot版本是3.2.0。

        唯一需要注意的是,我使用的 LangChain4j 版本是最新版本,根据官方文档我们必须使用JDK17,这是最低的要求。

(1)父工程

完整父工程POM如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"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>com.ceair</groupId><artifactId>eal-pm</artifactId><version>1.0.0</version><description>父工程,定义依赖</description><modules><module>pm-common</module><module>pm-doc-common</module><module>pm-authorization</module><module>pm-gateway</module><module>pm-system</module><module>pm-log</module><module>pm-base</module><module>pm-process</module><module>pm-langChain4j</module></modules><!--只定义版本--><packaging>pom</packaging><!--配置项--><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><springboot.version>3.2.0</springboot.version><springcloud.version>2023.0.0</springcloud.version><springcloudalibaba.version>2023.0.0.0-RC1</springcloudalibaba.version><mysql.version>8.0.33</mysql.version><mybatis-plus.version>3.5.9</mybatis-plus.version><hutool.version>5.8.22</hutool.version><lombok.version>1.18.24</lombok.version><redis.version>3.1.5</redis.version><mapstruct.version>1.5.5.Final</mapstruct.version><springdoc.version>2.6.0</springdoc.version><!-- SpringDoc-OpenApi版本号 --><spring-doc.version>2.2.0</spring-doc.version><flowable.version>7.1.0</flowable.version><!-- langchain4j版本号 --><langchain4j.version>1.0.0-beta4</langchain4j.version></properties><!--dependencyManagement不会传递--><dependencyManagement><dependencies><!--springboot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${springboot.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${springcloud.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${springcloudalibaba.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><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>${redis.version}</version></dependency><!--mybatis plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-jsqlparser</artifactId><version>${mybatis-plus.version}</version></dependency><!--hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><!--mapstruct--><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>${mapstruct.version}</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${mapstruct.version}</version></dependency><!-- 适用于webmvc的SpringDoc依赖 --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>${spring-doc.version}</version></dependency><!-- 适用于webflux的SpringDoc依赖 --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webflux-ui</artifactId><version>${spring-doc.version}</version></dependency><!-- flowable --><dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter</artifactId><version>${flowable.version}</version></dependency></dependencies></dependencyManagement><repositories><repository><id>public</id><name>aliyun nexus</name><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases></repository></repositories><pluginRepositories><pluginRepository><id>public</id><name>aliyun nexus</name><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories></project>

(2)子模块

<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><parent><groupId>com.ceair</groupId><artifactId>eal-pm</artifactId><version>1.0.0</version></parent><artifactId>pm-langChain4j</artifactId><packaging>pom</packaging><name>pm-langChain4j</name><modules><module>langChain4j-api</module><module>langChain4j-server</module></modules><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies></dependencies>
</project>

(3)子模块的API模块

        这里只是初始化一下,以备后续给其他服务提供Fegin接口的能力。

<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><parent><groupId>com.ceair</groupId><artifactId>pm-langChain4j</artifactId><version>1.0.0</version></parent><artifactId>langChain4j-api</artifactId><packaging>jar</packaging><name>langChain4j-api</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies></dependencies></project>

(4)子模块的Server模块

        提供正式的服务模块,这里需要集成 LangChain4j 的 Starter。

        补充说明:pm-common/pm-doc-common基础依赖,是本脚手架的基础模块,提供了mysql;mongodb;Spring Authorization Server资源服务;SpringBoot/cloud/cloudalibaba集成管理;kafka;mybatis-plus;SpringDoc-openAPI接口文档等基础服务和配置。

<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><parent><groupId>com.ceair</groupId><artifactId>pm-langChain4j</artifactId><version>1.0.0</version></parent><artifactId>langChain4j-server</artifactId><packaging>jar</packaging><name>langChain4j-server</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--pm-common--><dependency><groupId>com.ceair</groupId><artifactId>pm-common</artifactId><version>${project.version}</version></dependency><!--pm-doc-common--><dependency><groupId>com.ceair</groupId><artifactId>pm-doc-common</artifactId><version>${project.version}</version></dependency><!-- langchain4j --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

② 创建配置文件

        由于本服务集成了基础工程和 LangChain4j,所以需要配置的东西比较多,大家可以根据我配置文件中的注释替换成自己可用的中间件环境。

server:# 设置资源服务器端口port: 9004
spring:profiles:active: devapplication:name: pm-langchain4j# 本地开发配置
---
spring:config:activate:on-profile: devdatasource:driver-class-name: com.mysql.cj.jdbc.Driver# 这里需要配置你自己的数据库连接信息url: jdbc:mysql://192.168.30.129:3306/pm-langChain4j?serverTimezone=UTC&userUnicode=true&characterEncoding=utf-8username: rootpassword: 123456data:redis:# 这里需要配置你自己的缓存连接信息host: 192.168.30.129port: 6379password: 123456mongodb:# 这里需要配置你自己的数据库连接信息uri: mongodb://root:123456@192.168.30.129:27017/pm-langChain4j?authSource=adminsecurity:oauth2:# 资源服务器配置resourceserver:jwt:# Jwt中claims的iss属性,也就是jwt的签发地址,即认证服务器的根路径# 资源服务器会进一步的配置,通过该地址获取公钥以解析jwtissuer-uri: http://127.0.0.1:8080cloud:nacos:# 这里需要配置你自己的nacos连接信息serverAddr: 192.168.30.129:8848username: nacospassword: nacosdiscovery:namespace: af54b638-b927-4d97-bfc5-e9f127dd92dfkafka:# 这里需要配置你自己的mq连接信息bootstrap-servers: 192.168.30.129:9092producer:key-serializer: org.apache.kafka.common.serialization.StringSerializervalue-serializer: org.apache.kafka.common.serialization.StringSerializer# Mybatis-Plus 配置
mybatis-plus:# 扫描mapper文件mapper-locations:- classpath:mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#kafka消息相关
syslog:kafka:topic: sys-log-topic# ------------以下内容可改为公共配置------------
# SpringDoc自定义配置
custom:info:title: ${spring.application.name}-apiversion: 1.0.0description: 这是一个使用SpringDoc生成的在线文档.terms-of-service: http://127.0.0.1:5173gateway-url: http://127.0.0.1:9999/${spring.application.name}license:name: Apache 2.0security:name: Authenticatetoken-url: http://127.0.0.1:8080/oauth2/tokenauthorization-url: http://127.0.0.1:8080/oauth2/authorize#flowable配置
flowable:# 异步执行器主要用于处理那些耗时的任务,例如发送电子邮件、生成报告、调用外部服务等。这些任务可以在后台线程池中异步执行,而不会阻塞主线程或影响用户的响应时间async-executor-activate: false# 是否开启数据库自动升级database-schema-update: true#open-ai相关配置
langchain4j:open-ai:chat-model:# 这里需要你自己的 api-keyapi-key: **************************model-name: deepseek-chatlog-requests: truelog-responses: truebase-url: https://api.deepseek.com#日志级别
logging:level:root: debug

③ 申请deepseek的 api-key

        申请地址:DeepSeek 开放平台

        创建完api-key之后,需要先充值1块钱才能使用,不过也有说可以免费试用的,我是没有找到入口,有大佬知道的话麻烦在评论区分享一下。

④ 创建主启动类

package com.ceair;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** @author wangbaohai* @ClassName LangChain4jResourceApplication* @description: LangChain4j主启动类* @date 2025年05月13日* @version: 1.0.0*/
@SpringBootApplication
@EnableDiscoveryClient()
public class LangChain4jResourceApplication {public static void main(String[] args) {SpringApplication.run(LangChain4jResourceApplication.class, args);}}

⑤ 创建测试接口

package com.ceair.controller;import com.ceair.entity.result.Result;
import dev.langchain4j.model.openai.OpenAiChatModel;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author wangbaohai* @ClassName TestController* @description: 测试接口* @date 2025年05月13日* @version: 1.0.0*/
@RestController
@RequestMapping("/api/v1/test")
@RequiredArgsConstructor
@Slf4j
@Tag(name = "测试接口", description = "测试LangChain4j功能相关接口")
public class TestController {private final OpenAiChatModel openAiChatModel;/*** 测试LangChain4j的deepseek功能* 向OpenAI模型发送预设问题并获取回答** @return Result<String> 包含成功状态和模型回答结果的封装对象* 当调用成功时返回模型回答文本,失败时返回错误信息*/@Operation(summary = "测试LangChain4j功能-deepseek")@PostMapping("/deepseek")public Result<String> deepseek() {// 向 模型 提问String answer = openAiChatModel.chat("请回答我你有什么用");return Result.success(answer);}}

五、测试接口

① 启动后端服务

        这里注意,使用我的脚手架的话,需要先启动pm-authorization,再启动pm-gateway,之后服务没有顺序要求了。

② 启动前端工程

        使用yarn包管理器,需要nodejs版本号:v22.1.0

③ 验证接口

认证一下,获取权限信息,这里资源服务器没有放行测试接口白名单,所以需要认证

认证成功

获取接口结果

deepseek控制台查看扣费信息

后记

        调用Deepseek是比较好,但是如果大量使用,还是有费用压力的,LangChain4j支持接入本地 olloma部署的大模型,下一篇文章我们来探讨一下如何实现,如果生产有实力的话本地部署还是比较有性价比的。

        我们还是以往的,一篇文章一个代码分支,本文的前后端工程的分支都是 LangChain4j-1。

后端工程仓库:后端工程

前端工程仓库:前端工程

http://www.xdnf.cn/news/6319.html

相关文章:

  • 前端~三维地图(cesium)动态材质飞线
  • nacos:服务无法注册到nacos服务中心
  • Linux 动静态库详解
  • JS 中 Object.keys() 和 Object.values() 的深度解析与应用
  • 蓝桥杯 17. 修改数组
  • 【Linux高级IO】多路转接之epoll
  • Linux——mysql主从复制与读写分离
  • 人工智能+ERP:政策新规下企业智能化转型路径
  • 【vue】axios网络请求介绍
  • 【2025版】Spring Boot面试题
  • C语言_自定义类型:结构体
  • (4)python开发经验
  • (十七)Java日期时间API全面解析:从传统Date到现代时间处理
  • Ros2 - Moveit2 - DeepGrasp(深度抓握)
  • golang -- 如何让main goroutine等一等
  • 数智驱动——AI:企业数字化转型的“超级引擎”
  • FreeRTOS学习笔记
  • 【Java学习笔记】finalize方法
  • 前后端分离博客 Weblog 项目实战
  • 【AI大模型】赋能【传统业务】
  • Java基础语法之数组
  • Windows下Docker安装portainer
  • 64. 最小路径和
  • Shell 脚本中的通道号(文件描述符)
  • maven项目, idea右上角一直显示gradle的同步标识, 如何去掉
  • 计算机网络:什么是计算机网络?它的定义和组成是什么?
  • 开源Heygem本地跑AI数字人视频教程
  • python使用matplotlib画图
  • IDEA编辑器设置的导出导入
  • why FPGA喜欢FMC子卡?