一、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 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 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,内容如下:
server.port=9001 spring.application.name=langchain4j-0101-helloword
2.5 写主启动类
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 写配置类
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 {@Beanpublic 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
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 {@Resourceprivate 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 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环境变量是本文第二章节中配置的
server.port=9002spring.application.name=langchain4j-0102-bootlangchain4j.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、写主启动类
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,代码如下:
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 {@Resourceprivate 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接口类,代码如下:
package com.bbchat.demo.service;import dev.langchain4j.service.spring.AiService;@AiService
public interface ChatAssistant {String chat(String prompt);
}
新建DeclarativeAIServiceController,代码如下:
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 {@Resourceprivate 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端口,大家玩的时候以代码里面的端口为准。

