简介
随着 ChatGPT、DeepSeek、Claude 等大语言模型(LLM)的快速发展,企业应用正在从传统的软件逻辑转向 LLM + 数据 + 工具调用 的智能应用模式。
对于 Java 开发者来说,直接调用大模型 API 通常需要处理:
- HTTP 请求封装
- Prompt 管理
- 上下文管理
- 对话历史
- RAG 检索增强
- Function Calling
- Agent 编排
这些能力如果全部自己实现,成本较高。
因此出现了类似 LangChain 的开发框架。
什么是 LangChain4j?
LangChain4j 是 Java 生态中的 LLM 应用开发框架。
它对应 Python 世界里的:
LangChain
目标:
让 Java 开发者能够快速构建基于大模型的企业级应用。
支持:
- OpenAI
- Azure OpenAI
- DeepSeek
- Claude
- Ollama
- 本地模型
- 向量数据库
- RAG
- Agent
- Memory
- Tools
整体架构:
用户请求
|
v
LangChain4j Application
|
+-----------+------------+
| |
ChatModel Embedding
| |
v v
DeepSeek Vector DB
GPT ES
Claude Milvus
Chroma
2. LangChain4j 核心概念
2.1 ChatModel
ChatModel 是最核心的接口。
作用:
封装大模型聊天能力
例如:
用户:
你好
经过:
java
UserMessage
↓
ChatModel
↓
LLM
↓
AiMessage
返回:
你好,有什么可以帮助你的?
2.2 Message
LangChain4j 中消息分为:
SystemMessage
系统角色:
例如:
你是一个数据治理专家
UserMessage
用户输入:
帮我分析这个SQL
AiMessage
模型回答:
该SQL存在索引问题
代码:
UserMessage user =
UserMessage.from("你好");
2.3 Prompt
Prompt 就是给模型的输入模板。
例如:
普通:
解释一下Flink
高级:
你是一名大数据专家。
请从架构、性能、应用场景分析Flink
问题:
{question}
企业应用基本都会做 Prompt Template。
2.4 Memory(上下文记忆)
大模型默认:
一次请求一次上下文。
例如:
第一次:
我叫张三
第二次:
我叫什么?
模型不知道。
Memory:
保存历史消息:
User:
我叫张三
AI:
你好张三
User:
我叫什么?
AI:
你叫张三
2.5 Embedding
Embedding 是把文本转换成向量。
例如:
文本:
Flink 是实时计算框架
转换:
[
0.231,
0.523,
0.892
]
用于:
- 相似度搜索
- RAG
- 知识库问答
LangChain4j 环境搭建
Maven依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.35.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.16.2</version>
</dependency>
注意:
LangChain4j 0.35 对 Jackson 版本有要求。
如果使用旧版本:
jackson-databind 2.11
可能出现:
PropertyNamingStrategies$SnakeCaseStrategy
ClassNotFoundException
开发一个简单的天气机器人
java
package org.utils;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.ChatMessageType;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.openai.OpenAiChatModel;
import lombok.var;
import static dev.langchain4j.data.message.ChatMessageType.USER;
public class LongChainUtil {
public static void main(String[] args) {
OpenAiChatModel model =
OpenAiChatModel.builder()
.baseUrl("http://xxx-ai.com/v1")
.apiKey("xxxx")
.modelName("deepseek-reasoner")
.build();
ChatRequest request = ChatRequest.builder()
.messages( SystemMessage.from(
"你是一个天气专家,功能如下:" +
"1.回复具体的天气情况" +
"2.根据天气给出穿衣建议"
),
UserMessage.from("北京朝阳区今天天气"))
.build();
var response = model.chat(request);
}
}
