一、LangChain4J是什么?
LangChain4J 是一个专为 Java 生态系统设计的开源框架,用于简化与大语言模型(LLM,如 OpenAI 的 GPT 系列、Google 的 Gemini、Anthropic 的 Claude 等)的集成和交互。它借鉴了 Python 生态中 LangChain 的核心思想,但专为 Java 开发者优化,提供了更符合 Java 编程习惯的 API 和功能。
1.1 核心定位与价值
LangChain4J 的核心目标是降低开发基于大语言模型的应用的门槛,帮助开发者快速实现以下功能:
- 与各类大语言模型(LLM)进行交互(发送提示词、处理响应);
- 管理对话记忆(保存上下文,实现多轮对话);
- 集成外部工具(如数据库查询、API 调用、计算器等,让 LLM 具备实际操作能力);
- 处理提示词模板(动态生成结构化提示);
- 构建复杂的 AI 工作流(如链(Chain)、代理(Agent)等)。
1.2 主要特性
- 多模型支持
内置对主流大语言模型的支持,包括 OpenAI、Gemini、Anthropic、LLaMA、通义千问等,开发者无需关注不同模型的 API 差异,通过统一接口调用。 - 对话记忆管理
提供多种记忆组件(如基于窗口的记忆、持久化记忆),自动保存对话上下文,让 LLM 能够 "记住" 历史对话内容,支持多轮交互。 - 工具调用能力
允许 LLM 根据需求需求自动调用外部工具(如查询数据库、调用 REST API、执行代码等),扩展 LLM 的实际应用能力(例如让 AI 查天气、查股票、操作数据)。 - 提示词工程支持
提供提示词模板、格式化工具,帮助开发者构建结构化提示,提升 LLM 响应质量。 - 轻量灵活
可与 Java 原生项目集成,也可通过 Spring Boot Starter 与 Spring 生态无缝结合,支持从小型工具到大型应用的各种场景。 - 扩展性
支持自定义组件(如自定义记忆存储、工具适配器),满足个性化需求。
1.3 典型使用场景
- 构建聊天机器人(带上下文记忆的多轮对话);
- 开发 AI 驱动的问答系统(结合知识库);
- 实现智能助手(自动调用工具完成任务,如生成报告、数据分析);
- 集成 LLM 到现有 Java 应用(如在企业系统中添加 AI 客服、自动文档处理功能)。
1.4 与 Python LangChain 的关系
LangChain4J 受 Python 版 LangChain 启发,目标类似,但专为 Java 生态设计,API 风格更符合 Java 开发者习惯,且与 Spring Boot 等主流 Java 框架有更好的集成性。两者均致力于解决 LLM 应用开发中的共性问题(如记忆、工具调用、流程编排),但分属不同编程语言生态。
1.5 总结
LangChain4J 是 Java 开发者集成大语言模型的得力工具,它抽象了与 LLM 交互的复杂性,提供了标准化的组件和流程,让开发者可以更专注于业务逻辑,而非底层交互细节。无论是简单的提示词调用,还是复杂的 AI 代理系统,都能通过 LangChain4J 快速实现。
二、Hello World
2.1 获取阿里百炼API KEY
1、获取APIKEY

2、把APIKEY配置到环境变量中

3、模型名与BASE_URL
点红色箭头进去看模型名,点绿色箭头进去看BASE_URL
2.2 建项目
新建maven聚合工程,父工程pom如下:
XML
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>com.bbchat.demo</groupId>
<artifactId>langchain4j-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>langchain4j-demo父工程pom配置</name>
<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 -->
<spring-boot.version>3.5.0</spring-boot.version>
<!-- Spring AI -->
<spring-ai.version>1.0.0</spring-ai.version>
<!-- Spring AI Alibaba -->
<spring-ai-alibaba.version>1.0.0-M6.1</spring-ai-alibaba.version>
<!-- langchain4j -->
<langchain4j.version>1.0.1</langchain4j.version>
<!--langchain4j-community 引入阿里云百炼平台依赖管理清单-->
<langchain4j-community.version>1.0.1-beta6</langchain4j-community.version>
<!-- maven plugin -->
<maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version>
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring AI -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring AI Alibaba -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>${spring-ai-alibaba.version}</version>
</dependency>
<!--langchain4j的依赖清单,加载BOM后所有langchain4j版本号可以被统一管理起来
https://docs.langchain4j.dev/get-started
-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bom</artifactId>
<version>${langchain4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--引入阿里云百炼平台依赖管理清单
https://docs.langchain4j.dev/integrations/language-models/dashscope
-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-bom</artifactId>
<version>${langchain4j-community.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-deploy-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<release>${java.version}</release>
<compilerArgs>
<compilerArg>-parameters</compilerArg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<inherited>true</inherited>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>ossrh</flattenMode>
<pomElements>
<distributionManagement>remove</distributionManagement>
<dependencyManagement>remove</dependencyManagement>
<repositories>remove</repositories>
<scm>keep</scm>
<url>keep</url>
<organization>resolve</organization>
</pomElements>
</configuration>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>aliyunmaven</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</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.3 建Module
新建子工程,pom文件内容如下:
XML
<?xml version="1.0" encoding="UTF-8"?>
<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.bbchat.demo</groupId>
<artifactId>langchain4j-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>langchain4j-0101-helloword</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--langchain4j-open-ai 基础-->
<!--所有调用均基于 OpenAI 协议标准,实现一致的接口设计与规范LangChain4j 提供与许多 LLM 提供商的集成
从最简单的开始方式是从 OpenAI 集成开始https://docs.langchain4j.dev/get-started -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<!--langchain4j 高阶-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.4 写properties
为子工程新建application.properties,内容如下:
bash
server.port=9001
spring.application.name=langchain4j-0101-helloword
2.5 写主启动类
java
package com.bbchat.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
System.out.printf("Hello and welcome!");
SpringApplication.run(Main.class,args);
}
}
2.6 写配置类
java
package com.bbchat.demo.config;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LLMConfig {
@Bean
public ChatModel chatModelQwen()
{
return OpenAiChatModel.builder()
.apiKey(System.getenv("aliqwen-apikey"))
.modelName("qwen-plus")
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();
}
}
2.7 写controller
java
package com.bbchat.demo.controller;
import dev.langchain4j.model.chat.ChatModel;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class HelloLangChain4JController {
@Resource
private ChatModel chatModelQwen;
// http://localhost:9001/langchain4j/hello?prompt=如何学习大模型应用开发
@GetMapping(value = "/langchain4j/hello")
public String hello(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)
{
String result = chatModelQwen.chat(prompt);
System.out.println("通过langchain4j调用模型返回结果:\n"+result);
return result;
}
}
2.8 测试

三、Sprngboot整合LangChain4J
LangChain4J官方文档: Spring Boot Integration | LangChain4j
按照官网上的说法是:
LangChain4J 作为 Java 生态中集成大语言模型(LLM)的框架,其 "原生整合" 和 "Boot 整合" 是两种主流使用方式,核心差异在于是否依赖 Spring Boot 生态,适用于不同场景。
3.1 原生整合的特点
- 优点
:轻量(无额外框架依赖)、灵活度高(可完全控制组件生命周期)、适合嵌入非 Spring 项目(如传统 Java 桌面应用)。 - 缺点
:配置分散在代码中、需手动管理依赖和组件(如记忆、工具调用)、缺乏自动配置和依赖注入能力。
3.2 Boot整合的特点
- 优点
:配置集中化(通过 application.yml)、依赖注入简化组件管理、与 Spring 生态无缝集成(如结合 Spring MVC 暴露 API、Spring Security 处理权限)、自动支持高级功能(如记忆、工具调用)。 - 缺点
:引入 Spring Boot 依赖,增加项目体积,不适合纯轻量 Java 项目。
3.3 手敲两种整合
1、POM文件
在maven聚合工程中新建一个module,我们在子工程的pom文件中把两种集成方式所需要的依赖都写上,其中红框是原生整合、绿框是boot整合。
附完整Module的POM文件
XML
<?xml version="1.0" encoding="UTF-8"?>
<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.bbchat.demo</groupId>
<artifactId>langchain4j-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>langchain4j-0102-boot</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--langchain4j-open-ai 基础-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<!--langchain4j 高阶-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
<!--1 LangChain4j 整合boot底层支持-->
<!-- https://docs.langchain4j.dev/tutorials/spring-boot-integration -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>
<!--2 LangChain4j 整合boot高阶支持-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-core</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、application.properties
其中的apiqwen-apikey环境变量是本文第二章节中配置的
XML
server.port=9002
spring.application.name=langchain4j-0102-boot
langchain4j.open-ai.chat-model.api-key=${aliqwen-apikey}
langchain4j.open-ai.chat-model.model-name=qwen-plus
langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
3、写主启动类
java
package com.bbchat.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
System.out.printf("welcome langchain4j-0102-boot!");
SpringApplication.run(Main.class,args);
}
}
4、编写原生整合
新建PopularIntegrationController,代码如下:
java
package com.bbchat.demo.controller;
import dev.langchain4j.model.chat.ChatModel;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PopularIntegrationController {
@Resource
private ChatModel chatModel;
// http://localhost:9002/lc4j/boot/chat
@GetMapping(value = "/lc4j/boot/chat")
public String chat(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)
{
return chatModel.chat(prompt);
}
}
5、编写boot整合
新建service接口类,代码如下:
java
package com.bbchat.demo.service;
import dev.langchain4j.service.spring.AiService;
@AiService
public interface ChatAssistant {
String chat(String prompt);
}
新建DeclarativeAIServiceController,代码如下:
java
package com.bbchat.demo.controller;
import com.bbchat.demo.service.ChatAssistant;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DeclarativeAIServiceController {
@Resource
private ChatAssistant chatAssistantQwen;
// http://localhost:9002/lc4j/boot/declarative
@GetMapping(value = "/lc4j/boot/declarative")
public String declarative(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)
{
return chatAssistantQwen.chat(prompt);
}
}
6、验证
作者验证时用的9003端口,大家玩的时候以代码里面的端口为准。