LangChain4j 是什么、能解决什么问题,再通过实操案例掌握基础用法,最后了解它的工程化落地能力。下面结合新手易懂的语言和实操代码,帮你全面吃透它:
-
先搞懂 LangChain4j 到底是什么LangChain4j 是专门为 Java 开发者设计的大模型应用开发框架,就像一个 “AI 工具工具箱”。咱们直接调用大模型 API 时,要写很多繁琐代码处理对话记忆、工具调用这些功能,而它把这些功能封装成了现成组件。而且它能对接 OpenAI、千问等主流模型,切换模型时几乎不用改业务代码,还能和 Spring、Spring Boot 这些 Java 常用框架无缝融合,特别适合用来开发企业级的 AI 应用,比如智能客服、知识库问答系统等。它和 Python 版的 LangChain 相比,更适配 Java 后端的微服务、批处理等场景,还支持异步非阻塞调用,有商业版的安全审计等功能,对做 Java 企业项目的开发者很友好。
-
5 分钟上手:写第一个 LangChain4j 程序新手不用先纠结复杂原理,先跑通一个简单程序更易建立认知,步骤如下:
- 准备环境:首先得安装 JDK11 及以上版本,然后用 Maven 管理依赖。在项目的 pom.xml 文件里添加核心依赖和 OpenAI 模型的依赖,这样就能调用对应的模型了。
- 编写代码:核心是初始化模型、定义交互接口、绑定服务并调用。下面的代码能实现让大模型生成 Java 冒泡排序算法,每行都加了注释方便理解:
java
运行
// 导入需要的LangChain4j类
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
public class FirstLangChain4jApp {
public static void main(String[] args) {
// 1. 初始化OpenAI的聊天模型,填入自己的apiKey,指定用gpt - 3.5 - turbo模型
var chatModel = OpenAiChatModel.builder()
.apiKey("你的OpenAI API密钥") // 替换成自己的有效API Key
.modelName("gpt-3.5-turbo")
.build();
// 2. 定义一个助手接口,声明聊天方法,后续会自动生成实现
interface AiAssistant {
String chat(String userMessage);
}
// 3. 把接口和模型绑定,LangChain4j自动生成代理类,不用自己写实现
AiAssistant assistant = AiServices.create(AiAssistant.class, chatModel);
// 4. 调用接口,向大模型发请求,获取响应并打印
String response = assistant.chat("用Java写一个冒泡排序算法");
System.out.println("大模型回复:" + response);
}
}
-
运行结果:运行后控制台会输出大模型生成的冒泡排序代码。这里的关键是
AiServices会自动帮我们实现接口,不用手动处理和模型的通信细节。 -
核心组件拆解:搞懂每个 “零件” 的作用跑通基础程序后,再理解核心组件,就能应对更复杂的需求。这些组件就像积木,组合起来能搭建出复杂的 AI 应用:
- 模型(Models) :这是和大模型沟通的桥梁。LangChain4j 用
ChatModel接口统一了不同模型的调用方式。比如你想换成千问模型,只需换对应的模型构建类,不用改后面的业务代码。甚至本地部署的 Ollama 模型,也能通过对应的适配类接入。 - 记忆(Memory) :解决多轮对话 “健忘” 的问题。比如用户先问 “推荐一本 Java 书”,再问 “它的作者是谁”,模型需要记住上一轮推荐的书。LangChain4j 的
ConversationBufferMemory就是常用的记忆组件,能存储对话历史,下次调用模型时自动传入上下文。 - 工具(Tools) :给模型加 “手脚”,让它能调用外部功能。比如模型不会算复杂数学题、拿不到实时天气,这时可以把 “计算器”“天气查询接口” 封装成工具。模型会根据用户问题,自动决定调用哪个工具。比如下面的简单计算器工具示例:
- 模型(Models) :这是和大模型沟通的桥梁。LangChain4j 用
java
运行
import dev.langchain4j.service.AiService;
import dev.langchain4j.service.Tool;
// 定义工具类,封装计算功能
class CalculatorTool {
// 用@Tool注解标记这是工具方法,描述清楚功能
@Tool("计算两个整数的和")
public int add(int a, int b) {
return a + b;
}
}
// 定义AI服务接口
@AiService(tools = CalculatorTool.class)
interface CalculatorAssistant {
String chat(String message);
}
// 调用时,模型会自动调用add方法计算
public class ToolDemo {
public static void main(String[] args) {
CalculatorAssistant assistant = AiServices.create(CalculatorAssistant.class, OpenAiChatModel.builder()
.apiKey("你的API密钥")
.modelName("gpt-3.5-turbo")
.build());
System.out.println(assistant.chat("35加48等于多少"));
}
}
-
提示词模板:避免每次都写重复提示词。比如做文本总结时,每次都要写 “总结以下文本”,用模板可以写成 “总结以下文本:{text}”,调用时只需传入 {text} 对应的内容,既方便又不易出错。
-
实用进阶功能:从原型到能用的应用掌握基础后,这些进阶功能能让你的应用更贴近生产环境需求:
- 多轮对话记忆:给上面的基础程序加记忆功能,实现连贯对话。比如:
java
运行
import dev.langchain4j.memory.ConversationBufferMemory;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
public class ChatWithMemory {
public static void main(String[] args) {
OpenAiChatModel chatModel = OpenAiChatModel.builder()
.apiKey("你的API密钥")
.modelName("gpt-3.5-turbo")
.build();
// 初始化对话记忆组件
ConversationBufferMemory memory = ConversationBufferMemory.create();
interface ChatBot {
String chat(String message);
}
// 绑定记忆组件
ChatBot chatBot = AiServices.builder(ChatBot.class)
.chatModel(chatModel)
.memory(memory)
.build();
// 多轮对话
System.out.println(chatBot.chat("我叫小明"));
System.out.println(chatBot.chat("记住我的名字了吗")); // 模型会回复记住了小明
}
}
- 流式响应:避免用户长时间等待。比如模型生成大段文本时,流式响应能让内容逐字输出,就像聊天时对方边打字边显示。只需用
StreamingChatModel替代ChatModel,示例如下:
java
运行
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.service.AiServices;
public class StreamingResponseDemo {
public static void main(String[] args) {
// 初始化流式模型
OpenAiStreamingChatModel streamingModel = OpenAiStreamingChatModel.builder()
.apiKey("你的API密钥")
.modelName("gpt-3.5-turbo")
.build();
interface StreamingAssistant {
Response<String> chat(String message);
}
StreamingAssistant assistant = AiServices.create(StreamingAssistant.class, streamingModel);
// 流式接收并打印响应
assistant.chat("讲一个简短的Java编程笑话").onNext(System.out::print);
}
}
-
检索增强生成(RAG) :解决模型 “胡说八道” 的问题。比如做企业知识库问答,模型没学过公司内部文档,这时可以用 RAG 把文档转成向量存储起来。用户提问时,先从向量库检索相关文档片段,再让模型基于这些片段生成答案。这是企业应用中很常用的功能,LangChain4j 支持对接 MongoDB 等向量存储组件。
-
新手落地小建议
- 先从简单场景入手,比如先实现单轮对话,再逐步加记忆、工具功能,不要一开始就挑战复杂的 RAG 或智能 Agent。
- 优先用小模型测试,比如 gpt-3.5-turbo,调用成本低、响应快,等功能稳定了再考虑切换到更强大的模型。
- 注意 API 密钥的安全,不要直接写在代码里,可通过环境变量或配置文件读取。
- 多调试提示词,比如用
@SystemMessage给模型定角色(如 “你是 Java 技术顾问”),能让模型的回复更符合需求。