JAVA AI 框架LangChain4j 入门教程

以下是一篇关于 LangChain4j 的入门使用教程,包含框架介绍和开发入门指南:


LangChain4j 入门教程

1. LangChain4j 简介

LangChain4j 是一个基于 Java 的轻量级框架,旨在简化大型语言模型(LLM)在 Java 应用中的集成。它借鉴了 Python 版 LangChain 的设计理念,提供了以下核心功能:

  • 模型集成:支持 OpenAI、HuggingFace、本地模型(如 Ollama)等。
  • 提示工程:通过模板化提示(Prompt Templates)优化与模型的交互。
  • 链式调用:将多个步骤(模型调用、工具执行)组合成可复用的流程。
  • 记忆管理:支持短期/长期记忆(如对话历史记录)。
  • 数据增强:通过检索增强生成(RAG)扩展模型知识库。
  • 工具扩展:允许自定义工具(如搜索、数据库查询)扩展模型能力。

适用场景:聊天机器人、文档问答、自动化数据处理等。


2. 环境准备

2.1 添加依赖

在 Maven 或 Gradle 项目中添加依赖:

Maven
xml 复制代码
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.29.0</version> <!-- 使用最新版本 -->
</dependency>
Gradle
groovy 复制代码
implementation 'dev.langchain4j:langchain4j-open-ai:0.29.0'

2.2 获取 API 密钥

如需使用 OpenAI 等云服务,需注册并获取 API 密钥(示例中使用 OpenAI)。


3. 快速开始:Hello World

以下示例演示如何通过 OpenAI 生成文本:

java 复制代码
import dev.langchain4j.model.openai.OpenAiChatModel;

public class HelloWorld {
    public static void main(String[] args) {
        // 初始化 OpenAI 模型(需设置环境变量 OPENAI_API_KEY)
        OpenAiChatModel model = OpenAiChatModel.builder()
                .modelName("gpt-3.5-turbo")
                .temperature(0.3)
                .build();

        // 发送提示并获取响应
        String response = model.generate("用一句话解释量子计算");
        System.out.println(response); // 输出:量子计算利用量子比特的叠加和纠缠特性,实现远超经典计算机的并行计算能力。
    }
}

4. 核心功能详解

4.1 提示模板(Prompt Templates)

通过模板动态生成提示,提高复用性:

java 复制代码
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.Response;

public class PromptTemplateDemo {
    public static void main(String[] args) {
        OpenAiChatModel model = OpenAiChatModel.create();

        String template = "将以下文本翻译成{{language}}: {{text}}";
        String prompt = template
                .replace("{{language}}", "法语")
                .replace("{{text}}", "你好,世界!");

        Response<String> response = model.generate(prompt);
        System.out.println(response.content()); // 输出:Bonjour le monde !
    }
}

4.2 链(Chains)

将多个操作组合成链:

java 复制代码
import dev.langchain4j.chain.ConversationalChain;
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.TokenWindowChatMemory;

public class ChainDemo {
    public static void main(String[] args) {
        ChatMemory memory = TokenWindowChatMemory.withMaxTokens(500);
        ConversationalChain chain = ConversationalChain.builder()
                .chatLanguageModel(OpenAiChatModel.create())
                .chatMemory(memory)
                .build();

        String answer = chain.execute("爱因斯坦最著名的成就是什么?");
        System.out.println(answer); // 输出:相对论...
    }
}

4.3 记忆(Memory)

实现多轮对话记忆:

java 复制代码
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.UserMessage;

interface Assistant {
    String chat(@MemoryId String sessionId, @UserMessage String message);
}

public class MemoryDemo {
    public static void main(String[] args) {
        Assistant assistant = AiServices.builder(Assistant.class)
                .chatLanguageModel(OpenAiChatModel.create())
                .chatMemoryProvider(sessionId -> TokenWindowChatMemory.withMaxTokens(1000))
                .build();

        String sessionId = "user123";
        System.out.println(assistant.chat(sessionId, "我最喜欢的颜色是蓝色"));
        System.out.println(assistant.chat(sessionId, "我刚才说喜欢什么颜色?")); // 输出:您喜欢蓝色
    }
}

4.4 数据加载与检索增强(RAG)

从文档加载数据并增强回答:

java 复制代码
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.parser.TextDocumentParser;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;

public class RAGDemo {
    public static void main(String[] args) {
        // 1. 加载文档
        Document document = Document.from(new File("knowledge.txt"), new TextDocumentParser());

        // 2. 分割文本块
        DocumentSplitter splitter = new DocumentByParagraphSplitter();
        List<TextSegment> segments = splitter.split(document);

        // 3. 生成嵌入并存储
        EmbeddingModel embeddingModel = new OpenAIEmbeddingModel();
        EmbeddingStore<TextSegment> store = new InMemoryEmbeddingStore<>();
        store.addAll(embeddingModel.embed(segments), segments);

        // 4. 构建问答链
        ConversationalRetrievalChain chain = ConversationalRetrievalChain.builder()
                .chatLanguageModel(OpenAiChatModel.create())
                .retriever(EmbeddingStoreRetriever.from(store, embeddingModel))
                .build();

        String answer = chain.execute("文档中提到的关键技术是什么?");
        System.out.println(answer);
    }
}

4.5 工具调用(Tools)

扩展模型能力(如调用天气 API):

java 复制代码
import dev.langchain4j.agent.tool.Tool;

class WeatherTools {
    @Tool("获取指定城市的当前温度")
    double getCurrentTemperature(String city) {
        // 调用真实 API(此处模拟)
        return 25.3;
    }
}

public class ToolDemo {
    public static void main(String[] args) {
        OpenAiChatModel model = OpenAiChatModel.builder()
                .tools(new WeatherTools())
                .build();

        String response = model.generate("上海现在的温度是多少?");
        System.out.println(response); // 输出:上海当前温度为25.3摄氏度
    }
}

5. 进阶指引

  1. 本地模型 :使用 langchain4j-ollama 集成本地模型(如 Llama3)
  2. 评估与监控:集成 Prometheus 监控模型调用指标
  3. 复杂链设计 :通过 ConditionalChain 实现分支逻辑
  4. 自定义输出解析 :实现 OutputParser 处理非结构化响应

6. 注意事项

  • API 密钥安全:通过环境变量或密钥管理工具存储
  • 本地模型:需要部署本地推理服务(如 Ollama)
  • 性能优化:合理设置超时时间与重试策略
  • 错误处理 :捕获 LangChain4jException 处理模型异常

通过本教程,您已掌握 LangChain4j 的核心概念和基础用法。接下来可以尝试:

  1. 构建客户服务自动回复系统
  2. 实现基于私有数据的文档问答机器人
  3. 开发自动化数据分析工具

完整示例代码可参考 LangChain4j 官方 GitHub

相关推荐
小杨4042 分钟前
python入门系列十四(多进程)
人工智能·python·pycharm
风象南1 小时前
SpringBoot中6种自定义starter开发方法
java·spring boot·后端
mghio10 小时前
Dubbo 中的集群容错
java·微服务·dubbo
咖啡教室15 小时前
java日常开发笔记和开发问题记录
java
阿坡RPA15 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
咖啡教室15 小时前
java练习项目记录笔记
java
用户277844910499315 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心15 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
鱼樱前端15 小时前
maven的基础安装和使用--mac/window版本
java·后端