简介
随着 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 Chroma2. LangChain4j 核心概念
2.1 ChatModel
ChatModel 是最核心的接口。
作用:
封装大模型聊天能力
例如:
用户:
你好经过:
UserMessage ↓ ChatModel ↓ LLM ↓ AiMessage返回:
你好,有什么可以帮助你的?2.2 Message
LangChain4j 中消息分为:
SystemMessage
系统角色:
例如:
你是一个数据治理专家UserMessage
用户输入:
帮我分析这个SQLAiMessage
模型回答:
该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开发一个简单的天气机器人
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); } }