如果说 Spring AI 是 Spring 官方的正规军,那么 LangChain4j 就是社区里的游击队——灵活、迭代快、兼容性极强。
它的名字致敬了 Python 界的霸主 LangChain,但绝不是简单的翻译。它针对 Java 强类型特点做了大量优化。
为什么选择 LangChain4j?
- 统一 API:今天用 OpenAI,明天老板说要换成 Google Gemini 或者本地的 Llama2?如果是原生接入,你得重写代码。但在 LangChain4j 里,只需要改一行配置。
- Java 友好:它不像 Python 那样随意,它提供了非常优雅的 Builder 模式和强类型支持。
- 双层抽象:
- Low-level: 直接操作
ChatModel,UserMessage,适合喜欢掌控细节的开发者。 - High-level: 使用
@AiService注解,声明接口,让 AI 自动实现它。这才是它的杀手锏!
- Low-level: 直接操作
快速开始
引入依赖(以 Maven 为例):
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.30.0</version> <!-- 检查最新版本 -->
</dependency>
1. Low-level API 示例
这种方式跟 Spring AI 的 ChatClient 很像。
import dev.langchain4j.model.openai.OpenAiChatModel;
public class HelloWorld {
public static void main(String[] args) {
// 创建模型实例
OpenAiChatModel model = OpenAiChatModel.builder()
.apiKey("demo") // 这里用你的 Key
.modelName("gpt-3.5-turbo")
.build();
// 直接提问
String answer = model.generate("你好,介绍一下你自己");
System.out.println(answer);
}
}
2. High-level API (AI Services) 示例
这是 LangChain4j 最迷人的地方。你只需要定义一个接口,不需要写实现类!
interface Assistant {
String chat(String message);
}
public class AiServiceDemo {
public static void main(String[] args) {
OpenAiChatModel model = OpenAiChatModel.builder()
.apiKey("demo")
.build();
// 让 LangChain4j 帮你动态代理生成实例
Assistant assistant = AiServices.create(Assistant.class, model);
String answer = assistant.chat("帮我起个好听的英文名");
System.out.println(answer);
}
}
核心架构
LangChain4j 的世界观里有这么几个核心角色:
- ChatLanguageModel: 聊天模型(GPT, Claude等)。
- EmbeddingModel: 嵌入模型(用于把文本转向量)。
- EmbeddingStore: 向量数据库(Milvus, Pinecone等)。
- ChatMemory: 聊天记忆(帮你记住上下文)。
- Tools: 工具(让 AI 调用你的 Java 方法)。
总结
LangChain4j 的设计非常符合 Java 开发者的直觉。尤其是 AI Services 的设计,极大地简化了代码与 AI 的集成。接下来的文章中,我们将深入探讨如何利用 AI Services 打造更复杂的应用。