一、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端口,大家玩的時候以代碼里面的端口為準。

