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

相关推荐
xixixin_几秒前
【uniapp】vue2 搜索文字高亮显示
java·服务器·前端·uni-app·交互·文字高亮
左灯右行的爱情3 分钟前
深入理解 G1 GC:已记忆集合(RSet)与收集集合(CSet)详解
java·jvm·后端·juc
小奕同学A5 分钟前
数字化技术的五个环节:大数据、云计算、人工智能、区块链、移动互联网
大数据·人工智能·云计算
The hopes of the whole village6 分钟前
matlab 绘图
开发语言·matlab·信息可视化
Eric.Lee20218 分钟前
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
人工智能·算法·yolo·目标检测·计算机视觉
白熊1889 分钟前
【计算机视觉】CV实践- 基于PaddleSeg的遥感建筑变化检测全解析:从U-Net 3+原理到工程实践
人工智能·计算机视觉
珹洺14 分钟前
Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
java·运维·前端·mysql·intellij-idea·jsp
蔗理苦15 分钟前
2025-04-24 Python&深度学习4—— 计算图与动态图机制
开发语言·pytorch·python·深度学习·计算图
爱的叹息22 分钟前
mybatis-plus里的com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析
java·tomcat·mybatis
cmoaciopm1 小时前
Obsidian和Ollama大语言模型的交互过程
人工智能·语言模型