官方资源:
一、什么是 LangChain4j?
LangChain4j 是一个受 Python 版 LangChain 启发而构建的 Java 框架。它的核心目标是简化基于 LLM 的应用程序的开发。它提供了一套优雅的抽象层和丰富的工具,让 Java 开发者能够轻松地将 AI 功能(如聊天、问答、推理等)嵌入到他们的传统应用中,而无需深入了解底层复杂的 API 调用和数据处理细节。
可以把它想象成 Java 界的 LLM 应用开发“瑞士军刀”。
二、核心设计理念与目标
-
开发者友好:提供符合 Java 习惯(fluent-style、builder pattern)的、类型安全的 API。
-
模块化:各个组件(如模型、嵌入、向量库、工具等)都是可插拔的,你可以自由组合和替换。
-
轻量级:项目被分解为多个小模块,你可以只引入项目需要的部分,避免依赖膨胀。
-
与 Java 生态无缝集成:天然支持 Spring Boot、Quarkus 等主流 Java 框架,并且可以轻松与现有的 Java 数据源、服务和方法连接。
三、核心概念与关键组件
要理解 LangChain4j,需要掌握以下几个核心概念:
1、模型抽象
LangChain4j 定义了一套统一的接口来与各种 LLM 交互,屏蔽了不同供应商 API 的差异。
-
聊天模型:用于多轮对话(如
OpenAiChatModel,AzureOpenAiChatModel,LocalAiChatModel)。 -
流式聊天模型:支持以流的方式实时获取模型响应,提升用户体验。
-
语言模型:用于简单的文本补全。
-
嵌入模型:将文本转换为数值向量,这是实现语义搜索和 RAG 的基础。
2、提示词模板
LLM 的输入被称为“提示词”。LangChain4j 提供了 PromptTemplate,允许你动态地将变量注入到预设的文本模板中。
// 示例:创建一个包含变量的提示词模板
PromptTemplate promptTemplate = PromptTemplate.from("请为{{it}}写一首短诗。");
String prompt = promptTemplate.apply("春天"); // 输出:"请为春天写一首短诗。"
3、对话记忆
为了在多次交互中记住上下文,LangChain4j 提供了 ChatMemory 抽象。
-
它可以自动地将历史对话信息包含在发给模型的请求中。
-
支持多种后端存储,如内存、Redis 等。
-
可以控制记忆的窗口大小(例如,只记住最近 10 轮对话)。
4、工具与智能体
这是 LangChain4j 最强大的功能之一。
-
工具:你可以将任何 Java 方法(如查询数据库、调用外部 API、执行计算)暴露为一个“工具”,并描述其功能。
-
智能体:模型可以“思考”并决定是否以及如何调用这些工具来完成任务。这极大地扩展了 LLM 的能力,使其能够获取实时信息、执行具体操作。
示例场景:用户问“我上个月的销售额是多少?”。模型可以自动调用你提供的 getSalesData(month) 工具,获取真实数据,然后组织语言回答用户。
5、检索增强生成(RAG)
这是当前构建企业级 AI 应用最核心的模式。RAG 允许模型根据你提供的私有、最新的知识库来回答问题,而不是仅依赖其训练时的通用知识。
LangChain4j 为 RAG 提供了完整的工具链:
-
文档加载器:从各种来源(PDF、TXT、URL、数据库)加载文档。
-
文本分割器:将长文档切分成更小的、有意义的片段(chunks)。
-
嵌入模型:将文本片段转换为向量。
-
向量数据库:存储这些向量。LangChain4j 支持多种向量库,如 Chroma、Elasticsearch、Milvus、Redis 等。
-
检索器:当用户提问时,将问题也转换为向量,并在向量库中搜索最相关的文本片段。
-
最终问答:将检索到的相关片段和原始问题一起组合成一个详细的提示词,发送给 LLM,让它生成一个基于你私有知识的、准确的答案。
四、一个完整的代码示例(RAG + Spring Boot)
以下是一个简化但完整的例子,展示如何在 Spring Boot 中使用 LangChain4j 构建一个 RAG 应用。
// 1. 添加依赖 (Maven)
// <dependency>
// <groupId>dev.langchain4j</groupId>
// <artifactId>langchain4j-spring-boot-starter</artifactId>
// <version>0.31.0</version> // 请使用最新版本
// </dependency>
// 2. 配置 application.yml
// langchain4j:
// open-ai:
// chat-model:
// api-key: ${OPENAI_API_KEY}
// embedding-model:
// open-ai:
// api-key: ${OPENAI_API_KEY}
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel; // 本地嵌入模型,免费
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreRetriever;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import org.springframework.stereotype.Service;
import java.util.List;
import static dev.langchain4j.model.openai.OpenAiModelName.GPT_3_5_TURBO;
@Service
public class DocumentQaService {
private final OpenAiChatModel chatModel;
private final EmbeddingStoreRetriever retriever;
public DocumentQaService() {
// 初始化聊天模型
this.chatModel = OpenAiChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName(GPT_3_5_TURBO)
.build();
// 初始化嵌入模型和向量存储(这里使用内存存储,仅作演示)
var embeddingModel = new AllMiniLmL6V2EmbeddingModel();
EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
// 文档摄取:加载、分割、嵌入、存储
// 这里我们手动添加一些文档
List<String> documents = List.of(
"LangChain4j 是一个用于构建基于 LLM 应用的 Java 框架。",
"它支持多种大语言模型,如 OpenAI 和 Azure OpenAI。",
"RAG 是检索增强生成的缩写,是一种流行的技术。"
);
var ingestor = EmbeddingStoreIngestor.builder()
.documentSplitter(...) // 配置文本分割器
.embeddingModel(embeddingModel)
.embeddingStore(embeddingStore)
.build();
// 将文档摄入向量库(此处简化了文档转换步骤)
// ingestor.ingest(...);
// 初始化检索器
this.retriever = EmbeddingStoreRetriever.from(embeddingStore, embeddingModel);
}
public String answer(String question) {
// 从向量库中检索与问题相关的内容
var relevantContents = retriever.retrieve(question);
// 构建一个包含检索到内容的提示词
var promptTemplate = PromptTemplate.from(
"请根据以下信息回答问题:\n\n{{information}}\n\n问题:{{question}}"
);
var prompt = promptTemplate.toUserMessage(
Map.of("information", relevantContents, "question", question)
);
// 发送给 LLM 获取答案
return chatModel.generate(prompt);
}
}
// 3. 在 Controller 中使用
@RestController
public class ChatController {
@Autowired
private DocumentQaService qaService;
@GetMapping("/ask")
public String ask(@RequestParam String question) {
return qaService.answer(question);
}
}
五、优势与适用场景
优势:
-
降低门槛:让不熟悉 AI 的 Java 开发者也能快速构建 AI 应用。
-
提高效率:提供了大量“开箱即用”的组件,避免了重复造轮子。
-
生产就绪:良好的设计、文档和社区支持,适合用于企业级项目。
-
灵活性:模块化设计允许你自由选择模型、向量库等组件。
适用场景:
-
智能客服机器人:基于企业知识库的问答。
-
代码助手:分析代码、生成文档、解释错误。
-
内容生成与摘要:自动生成报告、摘要长文档。
-
数据分析与洞察:让模型通过工具查询数据并进行分析。
-
任何需要与文本进行智能交互的传统 Java 应用。
六、总结
LangChain4j 是 Java 开发者进入 AI 应用世界的桥梁和加速器。它通过一系列精心设计的抽象,将复杂的 LLM 交互、上下文管理、工具调用和 RAG 流程封装成简单、易用的 API。如果你是一名 Java 开发者,并希望在你的应用中集成现代 AI 功能,LangChain4j 绝对是你应该首先学习和使用的工具。

被折叠的 条评论
为什么被折叠?



