Java开发者の模型召唤术:LangChain4j咏唱指南
langchain4j简介
LangChain4j 是一个专为Java开发者设计的开源库,旨在简化将大型语言模型(LLM)集成到Java应用程序中的过程。它于2023年初开发,灵感来源于Python和JavaScript的LLM库,特别是为了填补Java领域在这一方面的空白。
在langchain4j之前可能是这样调用方式:
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你是谁?"
}
]
}'
那么在使用langchain4j后你的代码可以这么写:
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.addUserMessage("你是谁")
.model("qwen-plus")
.build();
ChatCompletion chatCompletion = client.chat().completions().create(params);
System.out.println(chatCompletion.choices().get(0).message().content().orElse("无返回内容"));
}
LangChain4j 的核心功能
统一API:LangChain4j提供了一个标准化的API,使得开发者可以方便地接入15+个主流的LLM提供商(如OpenAI、Google 、阿里、 智谱)和15+个向量嵌入存储(Qdrant、Pinecone、Milvus)。这意味着开发者无需学习每个API的细节,可以轻松切换不同的模型和存储,而无需重写代码。
Langchain4j和SpringAI对比
LangChain4j 与 Spring AI 的详细对比:
1. 背景与定位
维度 | LangChain4j | Spring AI |
---|---|---|
出身 | LangChain 生态的 Java 移植版 | Spring 官方推出的 AI 集成框架 |
核心目标 | 提供灵活、模块化的 AI 链式调用能力 | 简化 Spring 生态中 AI 模型的集成与调用 |
哲学 | “让 AI 调用像积木一样拼接” | “Spring 化一切,包括 AI” |
2. 核心功能对比
🔧 模型支持
-
LangChain4j
-
支持 OpenAI、HuggingFace、本地模型(如 Ollama)
-
提供 链式调用(Chain)、工具调用(Tools)、记忆(Memory)等高级抽象
-
示例代码:
ChatLanguageModel model = OpenAiChatModel.builder().apiKey("demo").build(); String answer = model.generate("讲个冷笑话"); // 直接调用
-
-
Spring AI
-
通过 统一接口 兼容 OpenAI、Azure、HuggingFace 等
-
深度集成 Spring Boot,用
@Bean
注入模型,支持 自动配置 -
示例代码:
@Autowired private ChatClient chatClient; // 注入即可用 String joke = chatClient.call("讲个程序员笑话");
-
⛓ 链式编排能力
-
LangChain4j ✅
原生支持复杂链式流程(如:检索 -> 推理 -> 格式化输出),适合需要 多步骤AI协作 的场景Chain chain = Chain.builder() .add(new WebSearchTool()) .add(new JsonOutputConverter()) .build(); chain.execute("查北京天气并输出JSON");
-
Spring AI ❌
更侧重 单次模型调用,复杂流程需开发者手动组合,但可通过 Spring Integration 扩展
🛠 扩展性
- LangChain4j:模块化设计,自定义工具(Tools)、记忆存储(Memory)较灵活
- Spring AI:依赖 Spring 生态扩展(如用 Spring Data 持久化对话记录)
3. 开发体验对比
🚀 上手难度
框架 | 优势 | 痛点 |
---|---|---|
LangChain4j | 适合喜欢 “即插即用” 的开发者 | 需手动管理依赖,配置稍显繁琐 |
Spring AI | Spring 全家桶用户无缝上手 | 过度依赖 Spring 生态,非 Spring 项目适配成本高 |
📚 文档与社区
- LangChain4j:文档较精简,社区活跃度依赖 Java 开发者自发贡献
- Spring AI:官方文档完善,背后有 Spring 团队支持,更新频率高
4. 性能与生产适用性
场景 | LangChain4j | Spring AI |
---|---|---|
快速原型开发 | ✅ | ✅ |
复杂AI流水线 | ✅(链式设计优势) | ❌ |
高并发微服务 | ⚠️ 需自行优化 | ✅(Spring 生态加持) |
企业级权限/监控集成 | ❌ | ✅(与 Spring Security/Actuator 天然兼容) |
5. 终极选择指南
选 LangChain4j :
- 需要灵活构建 多步骤AI工作流(如RAG、Agent)
- 项目技术栈 非 Spring 主导
- 喜欢 “代码即配置” 的极客风格
选 Spring AI :
- 已是 Spring Boot 项目,追求最小集成成本
- 需要快速实现 基础模型调用(如Chat、Embeddings)
- 看重 企业级功能(安全、监控、依赖管理)
▍一句话毒舌总结
- LangChain4j:“把AI调用玩成乐高积木的极客工具”
- Spring AI:“Spring生态的AI外挂,官方认证的‘偷懒神器’”
Langchain4j-maven项目集成
maven项目对于java项目开发者来说,并不陌生,首先创建maven项目工程
重要的事情说三遍:
JDK请一定选择 JDK17+!
JDK请一定选择 JDK17+!
JDK请一定选择 JDK17+!
<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>org.jerry</groupId>
<artifactId>langchain4j-mvn-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>langchain4j-mvn-demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>17</jdk.version>
<langchain4j.version>1.0.0-beta2</langchain4j.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--langchain4j-openai-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- langchain4j-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.version}</version>
</dependency>
</dependencies>
</project>
1.免费体验
在引入依赖后呢,基本编写方式如下:
OpenAiChatModel model = OpenAiChatModel.builder()
.apiKey("your api key")
.modelName("model name")
.build();
String hello = model.chat("你是谁?");
System.out.println(hello);
api key 为openAI你自己申请的api key,由于外网充值什么的都不是很方便,所以建议还是使用国内的一些模型,比如deepseek,阿里云百炼等apikey即可。
langchain4j官网给出,如果没有密钥的话可以尝试如下方案:
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.apiKey("demo")
.modelName("gpt-4o-mini")
.build();
String hello = model.chat("你是谁?");
System.out.println(hello);
但是经过本人测试发现,只有<langchain4j.version>1.0.0-beta1</langchain4j.version>
时才会让你去免费体验使用。<langchain4j.version>1.0.0-beta2</langchain4j.version>
中OpenAIChatModel源码中有做判断,如果模型时demo
会抛出运行时异常
1.0.0-beta1版本源码解析及运行截图:
运行结果:
1.0.0-beta2版本源码解析及运行截图:
所以想免费体验的小伙伴,建议还是使用<langchain4j.version>1.0.0-beta1</langchain4j.version>
2.大模型接入
以下的一些模型接入,都会使用到apikey,像一些开源的以及闭源的大模型,小伙伴们自行去申请apikey,在此演示deepseek以及阿里云百炼上的一些模型的接入。
2.1接入deepseeek
apikey自行申请
/***
* 使用条件:需要使用deepseek的apiKey
* @return
*/
public static String deepSeekDemo() {
String apiKey="your deepseekapi key";
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("https://api.deepseek.com/v1")//deepseek官方请求地址
.apiKey(apiKey) //自己申请的可以使用的apikey
.modelName("deepseek-chat") //模型名称,deepseek的话现在支持deepseek-chat/deepseek-reasoner 其中deepseek-reasoner 对应推理大模型R1
.build();
String hello = model.chat("你是谁?");
return hello;
}
运行结果:
2.2接入阿里云百炼平台
引入依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope</artifactId>
<version>${langchain4j.version}</version>
</dependency>
自行注册阿里云百炼平台账号,自行获取apikey,近期新用户对于一些主流的大模型好像直接给送token
2.2.1通过阿里云百炼平台接入阿里千问大模型
/***
* 使用条件:需要使用dashscope的apiKey
* @return
*/
public static String QwqDemo() {
String apiKey="your dashscope key";
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.apiKey(apiKey)
.modelName("qwen-max")
.build();
String hello = model.chat("你是谁?");
return hello;
}
运行结果:
2.2.2通过阿里云百炼平台接入deepseek大模型
在模型广场选择deepseek
代码示例:
/***
* 使用条件:需要使用dashscope的apiKey
* you can also use the following code to use the deepseek model
* @return
*/
public static String Qwq_deepseekDemo() {
String apiKey="your dashscope key";
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.apiKey(apiKey)
.modelName("deepseek-r1")
.build();
String hello = model.chat("你是谁?");
return hello;
}
运行结果:
2.2.3通过阿里云百炼平台接入其他大模型
百炼平台还有一些不同于语言模型的大模型,能够完成一些其他的操作
在此对于文生图这个模型,在做一点演示,有感兴趣的小伙伴们自行去了解,尝试其他的叭
示例代码:
/***
* 使用条件:需要使用dashscope的apiKey
* 文生图
* @return
*/
public static String Qwq_WordToPicDemo() {
String apiKey = "your dashscope key";
WanxImageModel build = WanxImageModel.builder()
.apiKey(apiKey)
.modelName("wanx2.1-t2i-plus")
.build();
Response<Image> response = build.generate("草地");
return response.content().url().toString();
}
运行结果:
返回文件uri,点击跳转下载
发现ai生成的图是真不错啊
2.3 接入本地ollama
还记得在《大模型-本地化部署调用–基于ollama+openWebUI+springBoot》这篇博客中通过ollama安装的本地大模型嘛?
我们尝试接入一下
首先引入ollama依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama</artifactId>
<version>${langchain4j.version}</version>
</dependency>
代码示例:
/***
* 使用条件:自己部署ollama本地大模型
* 文生图
* @return
*/
public static String ollamaDemo() {
OllamaChatModel build = OllamaChatModel.builder()
.baseUrl("http://XXXX:11434")
.modelName("qwen2.5-coder:1.5b")
.build();
String resp = build.chat("你好 你是谁");
return resp;
}
运行结果:
服务器资源有限qwen:1.8b直接跑不起来,各位小伙伴领会精神就行哈。