LangChain4j 完整指南
LangChain4j 是 LangChain 的 Java 版本,提供丰富的 AI 应用开发组件和工具。
什么是 LangChain4j?
LangChain4j 是一个 Java AI 应用开发框架,提供:
- 完整的组件生态 - Prompt、Memory、Chain、Agent 等
- 灵活的架构 - 可以自由组合各种组件
- 丰富的集成 - 支持 20+ 模型提供商
- Java 原生 - 完全用 Java 编写,类型安全
核心概念
1. Models(模型)
java
// 聊天模型
ChatLanguageModel chatModel = OpenAiChatModel.builder()
.apiKey("your-api-key")
.modelName("gpt-4")
.build();
// 流式输出
TokenStream tokenStream = chatModel.generate(
SystemMessage.from("你是一个助手"),
UserMessage.from("介绍一下 Java")
);
tokenStream.onNext(System.out::println)
.onComplete(System.out::println)
.onError(Throwable::printStackTrace)
.start();2. Prompts(提示词)
java
// Prompt 模板
String prompt = PromptTemplate.from("""
将以下文本翻译为 {{language}}:
{{text}}
""").apply(
Map.of(
"language", "英文",
"text", "你好世界"
)
);
String result = chatModel.generate(prompt);3. Memory(记忆)
java
// 对话记忆
ChatMemory chatMemory = MessageWindowChatMemory.builder()
.maxMessages(10)
.build();
// 添加消息
chatMemory.add(UserMessage.from("我叫张三"));
chatMemory.add(AiMessage.from("你好张三!"));
// 使用记忆
AiMessage response = chatModel.generate(
chatMemory.messages(),
UserMessage.from("我叫什么名字?")
);4. Tools(工具)
java
// 定义工具
@Tool("获取当前天气")
public String getWeather(@P("城市名称") String city) {
// 调用天气 API
return WeatherService.getWeather(city);
}
// 让 LLM 使用工具
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(chatModel)
.tools(new WeatherTool())
.build();
String answer = assistant.chat("北京今天天气怎么样?");5. RAG(检索增强生成)
java
// 创建嵌入模型
EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder()
.apiKey("your-api-key")
.build();
// 向量存储
EmbeddingStore<TextSegment> store = InMemoryEmbeddingStore.create();
// 添加文档
TextSegment segment = TextSegment.from("Spring AI 是 Spring 官方的 AI 框架");
Embedding embedding = embeddingModel.embed(segment).content();
store.add(embedding, segment);
// 检索
Embedding queryEmbedding = embeddingModel.embed("什么是 Spring AI?").content();
List<EmbeddingMatch<TextSegment>> matches = store.findRelevant(queryEmbedding, 5);
// 生成回答
String answer = chatModel.generate(
SystemMessage.from("基于以下信息回答问题:" + matches)
);高级功能
1. Agent(智能体)
java
// 定义 Agent
@SystemMessage("""
你是一个有用的助手。
可以使用以下工具:{{tools}}
""")
public interface MyAssistant {
String chat(String userMessage);
}
// 创建 Agent
MyAssistant assistant = AiServices.builder(MyAssistant.class)
.chatLanguageModel(chatModel)
.tools(new WeatherTool(), new CalculatorTool())
.build();
// 使用
String response = assistant.chat("北京今天天气怎么样?");2. Chain(链)
java
// 串行链
Chain chain = Chain.builder()
.first((text) -> summarize(text))
.then((summary) -> translate(summary, "英文"))
.then((translation) -> sentimentAnalysis(translation))
.build();
String result = chain.execute("这是一段长文本...");3. Prompt Template 高级用法
java
// 多段 Prompt
String prompt = PromptTemplate.from("""
你是 {{role}}。
上下文:
{{context}}
用户问题:{{question}}
要求:
1. 回答准确
2. 语气友好
3. 使用 {{language}}
""").apply(
Map.of(
"role", "技术顾问",
"context", "Spring AI 是...",
"question", "如何使用 Spring AI?",
"language", "中文"
)
);支持的模型提供商
| 提供商 | 聊天模型 | 嵌入模型 | 图像生成 |
|---|---|---|---|
| OpenAI | ✅ | ✅ | ✅ |
| Anthropic | ✅ | ❌ | ❌ |
| Azure OpenAI | ✅ | ✅ | ✅ |
| Google Vertex AI | ✅ | ✅ | ❌ |
| Hugging Face | ✅ | ✅ | ✅ |
| Ollama | ✅ | ✅ | ❌ |
| LocalAI | ✅ | ✅ | ❌ |
向量存储
- 内存存储:
InMemoryEmbeddingStore - 文件存储:
InMemoryEmbeddingStore+ 持久化 - 数据库:
- PostgreSQL (PgVector)
- MySQL
- MongoDB
- Redis
- Elasticsearch
- 专用向量库:
- Milvus
- Weaviate
- Qdrant
- Pinecone
最佳实践
1. 错误处理
java
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(apiKey)
.timeout(Duration.ofSeconds(30))
.maxRetries(3)
.build();
try {
String response = model.generate(prompt);
} catch (TokenLimitExceededException e) {
// 处理 token 超限
} catch (RateLimitExceededException e) {
// 处理速率限制
} catch (ModelException e) {
// 处理模型错误
}2. 成本优化
java
// 使用更便宜的模型
ChatLanguageModel cheapModel = OpenAiChatModel.builder()
.modelName("gpt-3.5-turbo") // 而不是 gpt-4
.build();
// 批量处理
List<String> prompts = List.of("问题1", "问题2", "问题3");
List<Response<AiMessage>> responses = model.generate(prompts);3. 性能优化
java
// 流式输出
TokenStream stream = model.generate(prompt);
stream.onNext(System.out::println)
.onComplete(() -> System.out.println("完成"))
.start();
// 并发处理
ExecutorService executor = Executors.newFixedThreadPool(10);
List<Future<String>> futures = prompts.stream()
.map(p -> executor.submit(() -> model.generate(p)))
.collect(Collectors.toList());与 Spring AI 对比
| 特性 | LangChain4j | Spring AI |
|---|---|---|
| 组件丰富度 | 非常丰富 | 基础 |
| 学习曲线 | 中等 | 低 |
| Spring 集成 | 需要手动集成 | 原生集成 |
| 社区活跃度 | 高 | 中等 |
| 文档 | 详细 | 简洁 |
| 灵活性 | 高 | 中等 |
适用场景
LangChain4j 适合以下场景:
- 复杂 AI 应用 - 需要组合多种组件
- 自定义需求 - 需要灵活的架构
- 非 Spring 项目 - 不依赖 Spring 生态
- 快速原型 - 组件丰富,快速开发
相关资源
更新时间: 2026-03-14 分类: Java AI 平台 | LangChain4j