Springboot整合LangChain4j 全流程

 更新时间:2026年05月06日 09:10:03   作者:Try, Again  
LangChain4j是一个专为Java生态打造的大语言模型应用开发框架,支持多种模型提供商,具备丰富的功能模块,如对话记忆、RAG管道支持、结构化输出等,这篇文章给大家介绍Springboot整合LangChain4j的全流程,感兴趣的朋友跟随小编一起看看吧

一 LangChain4j简介

    LangChain4j(LangChain for Java)是一个专为 Java 生态打造的大语言模型(LLM)应用开发框架。
Python 领域大语言模型(LLM)应用开发框架是LangChain,LangChain4j 可以理解为它的 “Java 版兄弟”。但它并非简单的 API 翻译,而是充分结合了 Java 语言特性(强类型、注解驱动、Spring 生态集成等)进行了重新设计。

    LangChain4j 提供了丰富的功能模块,覆盖 LLM 应用开发的各个环节:

核心能力说明
统一模型 API一套接口适配 OpenAI、通义千问、Ollama、Azure OpenAI、Anthropic 等 15+ 模型提供商
AI Service 抽象通过 Java 接口 + 注解定义 AI 服务,像写 MyBatis Mapper 一样简单
对话记忆(Memory)内置多轮对话记忆管理,支持内存、持久化等多种策略
RAG(检索增强生成)完整的 RAG Pipeline 支持:文档加载 → 分割 → 向量化 → 检索 → 生成
function Calling一套接口适配 OpenAI、通义千问、Ollama、Azure OpenAI、Anthropic 等 15+ 模型提供商
结构化输出将 LLM 的自然语言输出自动解析为 Java 对象(POJO)
流式响应(Streaming)支持 SSE 流式输出,提升用户交互体验
Embedding & 向量存储集成 Pinecone、Milvus、Redis、PGVector 等主流向量数据库

二 项目示例

1 开发环境

  • IntelliJ IDEA
  • JDK 21
  • DeepSeek API,这里需要提前注册申请。在DeepSeek开放平台创建API keys:DeepSeek开发平台
  • Langchain4j 1.0.1

2 代码集成

2.1 添加版本依赖

    创建父模块,添加Spring Ai相关依赖:

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--         springcloud alibaba 版本-->
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-starter</artifactId>
                <version>${spring-ai-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.24</version>
                <optional>true</optional>
            </dependency>
            <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-community.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    创建子模块,添加相关依赖:

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
        </dependency>
    </dependencies>

2.2 配置环境变量

    将大模型API Key 配置到环境变量。

2.3 配置多模型

@Configuration
public class LLMConfig {
    @Bean(name = "qwen")
    public ChatModel chatModelQwen(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("aliQwen-api"))
                .modelName("qwen-plus")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .logRequests(true)// 日志设置
                .logResponses(true)
                .maxRetries(2)// 重试次数
                .timeout(Duration.ofSeconds(5))//请求超时
                .build();
    }
    @Bean(name = "deepseek")
    public ChatModel chatModelDeepSeek(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("deepseek-api"))
                .modelName("deepseek-chat")
                .baseUrl("https://api.deepseek.com/v1")
                .build();
    }
}

2.3 基础API调用

    在Controller层,注入模型Bean对象,调用接口。基础API可以获得消耗token等数量。

    @Resource(name = "qwen")
    private ChatModel chatModel;
    @Resource(name = "deepseek")
    private ChatModel chatModelDeepseek;
    @GetMapping("/langchain4j/qwen/hello")
    public String hello(@RequestParam(value = "msg",defaultValue = "你是谁") String msg){
        String result = chatModel.chat(msg);
        System.out.println("调用大模型回复:"+result);
        return result;
    }
    @GetMapping("/langchain4j/dp/hello")
    public String dpHello(@RequestParam(value = "msg",defaultValue = "你是谁") String msg){
        ChatResponse result = chatModelDeepseek.chat(UserMessage.from(msg));
        System.out.println("调用大模型回复:"+result.aiMessage().text());
        TokenUsage tokenUsage = result.tokenUsage();
        System.out.println("消耗的token数量:"+tokenUsage.toString());
        return result.aiMessage().text();
    }

接口调用响应如下:

2.4 高级API调用

    定义一个chat接口,并在LLMConfig 类配置对应Bean对象。

public interface ChatAssitant {
    String chat(String prompt);
}
@Configuration
public class LLMConfig {
    @Bean(name = "qwen")
    public ChatModel chatModelQwen(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("aliQwen-api"))
                .modelName("qwen-plus")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .logRequests(true)// 开发时,可打印请求request
                .logResponses(true)
                .maxRetries(2)// 重试次数
                .build();
    }
    @Bean(name = "deepseek")
    public ChatModel chatModelDeepSeek(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("deepseek-api"))
                .modelName("deepseek-chat")
                .baseUrl("https://api.deepseek.com/v1")
                .build();
    }
   @Bean
    public ChatAssitant chatAssitant(@Qualifier("qwen") ChatModel chatModelQwen){
        return AiServices.create(ChatAssitant.class,chatModelQwen);
    }
}

    在Controller层,使用高级API调用接口。

   @GetMapping("/highApi/hello")
    public String highApi(@RequestParam(value = "msg",defaultValue = "你是谁") String msg){
       return chatAssitant.chat(msg);
    }

接口调用响应如下:

2.5 流式输出对话

    在子模块,添加相关依赖:

  <dependencies>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-reactor</artifactId>
        </dependency>
  </dependencies>

    配置对应StreamingChatModel :

@Configuration
public class LLMConfig {
 @Bean(name = "qwen-plus")
    public StreamingChatModel streamingChatModelQwen(){
        return OpenAiStreamingChatModel.builder()
                .apiKey(System.getenv("aliQwen-api"))
                .modelName("qwen-plus")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }
  //流式输出
    @Bean("chat2")
    public ChatAssitant2 chatAssitant2(StreamingChatModel streamingChatModel){
        return AiServices.create(ChatAssitant2.class,streamingChatModel);
    }
}

    定义一个chat接口,并在LLMConfig 类配置对应Bean对象。

public interface ChatAssitant2 {
    String chat(String prompt);
    Flux<String> chatFlux(String prompt);
}

    在Controller层,调用API接口。

    @Autowired
    private StreamingChatModel streamingChatModel;
    @Autowired
    private ChatAssitant2 chatAssitant;
    @GetMapping(value = "/chatstream")
    public Flux<String> chat(@RequestParam(value = "prompt",defaultValue = "你是谁") String prompt){
       return Flux.create(emitter->{
            streamingChatModel.chat(prompt, new StreamingChatResponseHandler() {
                @Override
                public void onPartialResponse(String s) {
                    emitter.next(s);
                }
                @Override
                public void onCompleteResponse(ChatResponse chatResponse) {
                     emitter.complete();
                    // 可以获取花费的token
                }
                @Override
                public void onError(Throwable throwable) {
                    emitter.error(throwable);
                }
            });
        });
    }
		//高级API调用方式
    @GetMapping(value = "/chatstream2")
    public Flux<String> chat2(@RequestParam(value = "prompt",defaultValue = "南京有什么好吃的") String prompt){
        return chatAssitant.chatFlux(prompt);
    }

接口调用响应如下:

2.5 集成Springboot

    创建子模块,添加相关依赖:

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
        </dependency>
<!--        高级API-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

    配置文件中配置模型参数

server.port=9003
spring.application.name=langchain4j-springboot
langchain4j.open-ai.chat-model.api-key=${aliQwen-api}
langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
langchain4j.open-ai.chat-model.model-name=qwen-plus

    定义一个chat接口,加上@AiService注解。

@AiService
public interface ChatAssitant {
    //定义系统提示词
    @SystemMessage("你是一个友好的AI助手,名叫小智。你的回答简洁、专业、有条理。请使用中文回答。")
     String chat( String prompt);
}

    在Controller层,调用chat接口。

@RestController
public class AiServiceController {
   @Resource
    private ChatAssitant chatAssitantQwen;
    @GetMapping(value = "/boot/chat")
    public String chat(@RequestParam(value = "msg",defaultValue = "你是谁") String prompt){
        return chatAssitantQwen.chat(prompt);
    }
}

三 总结

    本文详述了Spring,Springboot与LangChain4j集成构建智能对话系统的全流程。了解了 LangChain4j 的定位、核心能力与发展趋势,了解了 Deepseek / 通义千问 模型的接入方式,掌握了LangChain4j API 基础用法和高级用法。

到此这篇关于Springboot整合LangChain4j 全流程的文章就介绍到这了,更多相关Springboot整合LangChain4j内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在VSCode里使用Jupyter Notebook调试Java代码的详细过程

    在VSCode里使用Jupyter Notebook调试Java代码的详细过程

    Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示的程序,这篇文章主要介绍了在VSCode里使用Jupyter Notebook,调试Java代码,需要的朋友可以参考下
    2022-07-07
  • Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁

    Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁

    这篇文章主要介绍了Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁,本文讲解了ReentrantLock概况、Lock接口、Lock使用、轮询锁的和定时锁、公平性、可中断获锁获取操作等内容,需要的朋友可以参考下
    2015-04-04
  • Mybatis各种查询接口使用详解

    Mybatis各种查询接口使用详解

    这篇文章主要介绍了Mybatis各种查询接口使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • MyBatis-Plus Page 分页不生效的问题解决

    MyBatis-Plus Page 分页不生效的问题解决

    分页是常见的一种功能,本文主要介绍了MyBatis-Plus Page分页不生效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Delegate IDE build/run actions to maven 配置会影响程序运行吗?

    Delegate IDE build/run actions to maven 配置会影响程序运行吗?

    这篇文章主要介绍了Delegate IDE build/run actions to maven 配置会影响程序运行吗,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • RocketMQ 源码分析Broker消息刷盘服务

    RocketMQ 源码分析Broker消息刷盘服务

    这篇文章主要为大家介绍了RocketMQ 源码分析Broker消息刷盘服务示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • IntelliJ IDEA优化配置的实现

    IntelliJ IDEA优化配置的实现

    这篇文章主要介绍了IntelliJ IDEA优化配置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • springboot多节点应用里的雪花算法唯一性详解

    springboot多节点应用里的雪花算法唯一性详解

    雪花算法在单节点下唯一,但在多副本Kubernetes环境中可能重复,通过修改Pod名称生成workId,解决了这个问题,同时避免了第三方组件和网络请求,本文给大家介绍springboot多节点应用里的雪花算法唯一性,感兴趣的朋友一起看看吧
    2024-12-12
  • Graphics2D 写图片中文乱码问题及解决

    Graphics2D 写图片中文乱码问题及解决

    这篇文章主要介绍了Graphics2D 写图片中文乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java两个List<T> 求交集,差集,并集,去重后的并集

    Java两个List<T> 求交集,差集,并集,去重后的并集

    本文主要介绍了Java两个List<T> 求交集,差集,并集,去重后的并集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论