Java AI 新星:LangChain4j 快速入门

如果说 Spring AI 是 Spri.

如果说 Spring AI 是 Spring 官方的正规军,那么 LangChain4j 就是社区里的游击队——灵活、迭代快、兼容性极强。
它的名字致敬了 Python 界的霸主 LangChain,但绝不是简单的翻译。它针对 Java 强类型特点做了大量优化。

为什么选择 LangChain4j?

  1. 统一 API:今天用 OpenAI,明天老板说要换成 Google Gemini 或者本地的 Llama2?如果是原生接入,你得重写代码。但在 LangChain4j 里,只需要改一行配置。
  2. Java 友好:它不像 Python 那样随意,它提供了非常优雅的 Builder 模式和强类型支持。
  3. 双层抽象
    • Low-level: 直接操作 ChatModel, UserMessage,适合喜欢掌控细节的开发者。
    • High-level: 使用 @AiService 注解,声明接口,让 AI 自动实现它。这才是它的杀手锏!

快速开始

引入依赖(以 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 打造更复杂的应用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注