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代码的详细过程
Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示的程序,这篇文章主要介绍了在VSCode里使用Jupyter Notebook,调试Java代码,需要的朋友可以参考下2022-07-07
Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁
这篇文章主要介绍了Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁,本文讲解了ReentrantLock概况、Lock接口、Lock使用、轮询锁的和定时锁、公平性、可中断获锁获取操作等内容,需要的朋友可以参考下2015-04-04
Delegate IDE build/run actions to maven 配置会影响程序运行吗?
这篇文章主要介绍了Delegate IDE build/run actions to maven 配置会影响程序运行吗,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
Java两个List<T> 求交集,差集,并集,去重后的并集
本文主要介绍了Java两个List<T> 求交集,差集,并集,去重后的并集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-04-04


最新评论