一、什么是 LangChain4j?

LangChain4j 是一个 Java 框架,用于构建基于大语言模型的应用程序。它的目标类似于 Python 世界的 LangChain:抽象模型接口、对话上下文(Memory)、提示模板、文档检索(RAG)等,帮助你快速搭建智能体(Agent)。

二、环境准备

1. 创建 Maven 项目

添加基本依赖(以 OpenAI 为例):

<dependencies>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j</artifactId>
        <version>0.25.0</version>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-openai</artifactId>
        <version>0.25.0</version>
    </dependency>
</dependencies>
2. 设置 OpenAI API Key
String apiKey = System.getenv("OPENAI_API_KEY");

三、构建你的第一个智能问答程序

import dev.langchain4j.model.openai.OpenAiChatModel;

public class SimpleChatApp {
    public static void main(String[] args) {
        OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey("sk-你的key")
                .modelName("gpt-3.5-turbo")
                .build();

        String answer = model.generate("用一句话介绍Java是什么");
        System.out.println(answer);
    }
}

输出示例:

Java 是一种面向对象、跨平台的编程语言,广泛应用于企业和移动应用开发。
import dev.langchain4j.Memory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.chat.MemoryChatModel;

public class MemoryChatExample {
    public static void main(String[] args) {
        ChatLanguageModel model = OpenAiChatModel.builder()
                .apiKey("sk-你的key")
                .build();

        Memory memory = Memory.builder().build();
        MemoryChatModel chatModel = new MemoryChatModel(model, memory);

        System.out.println(chatModel.send("我叫张三"));
        System.out.println(chatModel.send("我是谁?"));
    }
}

四、使用 Memory 进行多轮对话

LangChain4j 支持上下文记忆(类似 ChatGPT 会话状态):

import dev.langchain4j.Memory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.chat.MemoryChatModel;

public class MemoryChatExample {
    public static void main(String[] args) {
        ChatLanguageModel model = OpenAiChatModel.builder()
                .apiKey("sk-你的key")
                .build();

        Memory memory = Memory.builder().build();
        MemoryChatModel chatModel = new MemoryChatModel(model, memory);

        System.out.println(chatModel.send("我叫张三"));
        System.out.println(chatModel.send("我是谁?"));
    }
}

输出

你好,张三!
你是张三,我们刚刚聊过 :)

五、使用 @AiService 创建智能代理(Agent)

你可以用注解方式构建“智能服务接口”,极其方便!

import dev.langchain4j.service.AiService;
import dev.langchain4j.service.SystemMessage;

@AiService
interface QaService {
    @SystemMessage("你是一个精通Java的助理,请用中文回答。")
    String answer(String question);
}
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.ServiceFactory;

public class AgentDemo {
    public static void main(String[] args) {
        QaService qa = ServiceFactory.create(
            QaService.class,
            OpenAiChatModel.withApiKey("sk-你的key")
        );

        String result = qa.answer("什么是Java泛型?");
        System.out.println(result);
    }
}

六、使用提示模板(Prompt Templates)

LangChain4j 支持模板化提示:

@AiService
interface Translator {
    @SystemMessage("你是一位翻译助手。")
    @dev.langchain4j.service.UserMessage("请将以下句子翻译成英文:{input}")
    String translate(String input);
}

调用:

Translator translator = ServiceFactory.create(Translator.class, OpenAiChatModel.withApiKey("sk-你的key"));
System.out.println(translator.translate("我喜欢编程"));

七、集成 Tools(自定义工具函数)

你可以把 Java 函数作为工具暴露给模型使用:


import dev.langchain4j.agent.tool.Tool;

public class MathTools {

    @Tool
    public int 加法(int a, int b) {
        return a + b;
    }

    @Tool
    public int 乘法(int a, int b) {
        return a * b;
    }
}

将工具接入 Agent:

Agent agent = Agent.builder()
    .tools(new MathTools())
    .chatLanguageModel(OpenAiChatModel.withApiKey("sk-xxx"))
    .build();

String response = agent.chat("2加2是多少?");
System.out.println(response);

八、与文档对接(RAG)

LangChain4j 支持加载 PDF/文本并进行语义搜索(基于 Embedding + 向量数据库,如 Milvus、Weaviate、Chroma):

TextSplitter splitter = new DocumentSplitters().recursive(200, 20);
List<Document> docs = splitter.split("Java 是一种编程语言......");

EmbeddingStore<TextSegment> store = new InMemoryEmbeddingStore<>();
EmbeddingModel embeddingModel = OpenAiEmbeddingModel.withApiKey("sk-xxx");

for (TextSegment segment : docs) {
    store.add(embeddingModel.embed(segment), segment);
}

然后你可以基于相似片段构建 RAG 应答。

九、集成 Spring Boot(可选)

LangChain4j 提供 langchain4j-spring 模块,让你在 Spring 应用中使用依赖注入方式构建智能服务:

<dependency>
  <groupId>dev.langchain4j</groupId>
  <artifactId>langchain4j-spring</artifactId>
  <version>0.25.0</version>
</dependency>

配置 API Key:

langchain4j:
  openai:
    chat-model:
      api-key: sk-xxx

自动注入:

@Autowired
MyAiService aiService;
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐