Java大模型工程能力必修课,LangChain4j 入门到实践(已完结)

249 阅读6分钟

LangChain4j 是什么、能解决什么问题,再通过实操案例掌握基础用法,最后了解它的工程化落地能力。下面结合新手易懂的语言和实操代码,帮你全面吃透它:

  1. 先搞懂 LangChain4j 到底是什么LangChain4j 是专门为 Java 开发者设计的大模型应用开发框架,就像一个 “AI 工具工具箱”。咱们直接调用大模型 API 时,要写很多繁琐代码处理对话记忆、工具调用这些功能,而它把这些功能封装成了现成组件。而且它能对接 OpenAI、千问等主流模型,切换模型时几乎不用改业务代码,还能和 Spring、Spring Boot 这些 Java 常用框架无缝融合,特别适合用来开发企业级的 AI 应用,比如智能客服、知识库问答系统等。它和 Python 版的 LangChain 相比,更适配 Java 后端的微服务、批处理等场景,还支持异步非阻塞调用,有商业版的安全审计等功能,对做 Java 企业项目的开发者很友好。

  2. 5 分钟上手:写第一个 LangChain4j 程序新手不用先纠结复杂原理,先跑通一个简单程序更易建立认知,步骤如下:

    1. 准备环境:首先得安装 JDK11 及以上版本,然后用 Maven 管理依赖。在项目的 pom.xml 文件里添加核心依赖和 OpenAI 模型的依赖,这样就能调用对应的模型了。
    2. 编写代码:核心是初始化模型、定义交互接口、绑定服务并调用。下面的代码能实现让大模型生成 Java 冒泡排序算法,每行都加了注释方便理解:

java

运行

// 导入需要的LangChain4j类
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;

public class FirstLangChain4jApp {
    public static void main(String[] args) {
        // 1. 初始化OpenAI的聊天模型,填入自己的apiKey,指定用gpt - 3.5 - turbo模型
        var chatModel = OpenAiChatModel.builder()
                .apiKey("你的OpenAI API密钥") // 替换成自己的有效API Key
                .modelName("gpt-3.5-turbo")
                .build();

        // 2. 定义一个助手接口,声明聊天方法,后续会自动生成实现
        interface AiAssistant {
            String chat(String userMessage);
        }

        // 3. 把接口和模型绑定,LangChain4j自动生成代理类,不用自己写实现
        AiAssistant assistant = AiServices.create(AiAssistant.class, chatModel);

        // 4. 调用接口,向大模型发请求,获取响应并打印
        String response = assistant.chat("用Java写一个冒泡排序算法");
        System.out.println("大模型回复:" + response);
    }
}
  1. 运行结果:运行后控制台会输出大模型生成的冒泡排序代码。这里的关键是AiServices会自动帮我们实现接口,不用手动处理和模型的通信细节。

  2. 核心组件拆解:搞懂每个 “零件” 的作用跑通基础程序后,再理解核心组件,就能应对更复杂的需求。这些组件就像积木,组合起来能搭建出复杂的 AI 应用:

    1. 模型(Models) :这是和大模型沟通的桥梁。LangChain4j 用ChatModel接口统一了不同模型的调用方式。比如你想换成千问模型,只需换对应的模型构建类,不用改后面的业务代码。甚至本地部署的 Ollama 模型,也能通过对应的适配类接入。
    2. 记忆(Memory) :解决多轮对话 “健忘” 的问题。比如用户先问 “推荐一本 Java 书”,再问 “它的作者是谁”,模型需要记住上一轮推荐的书。LangChain4j 的ConversationBufferMemory就是常用的记忆组件,能存储对话历史,下次调用模型时自动传入上下文。
    3. 工具(Tools) :给模型加 “手脚”,让它能调用外部功能。比如模型不会算复杂数学题、拿不到实时天气,这时可以把 “计算器”“天气查询接口” 封装成工具。模型会根据用户问题,自动决定调用哪个工具。比如下面的简单计算器工具示例:

java

运行

import dev.langchain4j.service.AiService;
import dev.langchain4j.service.Tool;

// 定义工具类,封装计算功能
class CalculatorTool {
    // 用@Tool注解标记这是工具方法,描述清楚功能
    @Tool("计算两个整数的和")
    public int add(int a, int b) {
        return a + b;
    }
}

// 定义AI服务接口
@AiService(tools = CalculatorTool.class)
interface CalculatorAssistant {
    String chat(String message);
}

// 调用时,模型会自动调用add方法计算
public class ToolDemo {
    public static void main(String[] args) {
        CalculatorAssistant assistant = AiServices.create(CalculatorAssistant.class, OpenAiChatModel.builder()
                .apiKey("你的API密钥")
                .modelName("gpt-3.5-turbo")
                .build());
        System.out.println(assistant.chat("35加48等于多少"));
    }
}
  1. 提示词模板:避免每次都写重复提示词。比如做文本总结时,每次都要写 “总结以下文本”,用模板可以写成 “总结以下文本:{text}”,调用时只需传入 {text} 对应的内容,既方便又不易出错。

  2. 实用进阶功能:从原型到能用的应用掌握基础后,这些进阶功能能让你的应用更贴近生产环境需求:

    1. 多轮对话记忆:给上面的基础程序加记忆功能,实现连贯对话。比如:

java

运行

import dev.langchain4j.memory.ConversationBufferMemory;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;

public class ChatWithMemory {
    public static void main(String[] args) {
        OpenAiChatModel chatModel = OpenAiChatModel.builder()
                .apiKey("你的API密钥")
                .modelName("gpt-3.5-turbo")
                .build();

        // 初始化对话记忆组件
        ConversationBufferMemory memory = ConversationBufferMemory.create();

        interface ChatBot {
            String chat(String message);
        }

        // 绑定记忆组件
        ChatBot chatBot = AiServices.builder(ChatBot.class)
                .chatModel(chatModel)
                .memory(memory)
                .build();

        // 多轮对话
        System.out.println(chatBot.chat("我叫小明"));
        System.out.println(chatBot.chat("记住我的名字了吗")); // 模型会回复记住了小明
    }
}
  1. 流式响应:避免用户长时间等待。比如模型生成大段文本时,流式响应能让内容逐字输出,就像聊天时对方边打字边显示。只需用StreamingChatModel替代ChatModel,示例如下:

java

运行

import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.service.AiServices;

public class StreamingResponseDemo {
    public static void main(String[] args) {
        // 初始化流式模型
        OpenAiStreamingChatModel streamingModel = OpenAiStreamingChatModel.builder()
                .apiKey("你的API密钥")
                .modelName("gpt-3.5-turbo")
                .build();

        interface StreamingAssistant {
            Response<String> chat(String message);
        }

        StreamingAssistant assistant = AiServices.create(StreamingAssistant.class, streamingModel);
        // 流式接收并打印响应
        assistant.chat("讲一个简短的Java编程笑话").onNext(System.out::print);
    }
}
  1. 检索增强生成(RAG) :解决模型 “胡说八道” 的问题。比如做企业知识库问答,模型没学过公司内部文档,这时可以用 RAG 把文档转成向量存储起来。用户提问时,先从向量库检索相关文档片段,再让模型基于这些片段生成答案。这是企业应用中很常用的功能,LangChain4j 支持对接 MongoDB 等向量存储组件。

  2. 新手落地小建议

    1. 先从简单场景入手,比如先实现单轮对话,再逐步加记忆、工具功能,不要一开始就挑战复杂的 RAG 或智能 Agent。
    2. 优先用小模型测试,比如 gpt-3.5-turbo,调用成本低、响应快,等功能稳定了再考虑切换到更强大的模型。
    3. 注意 API 密钥的安全,不要直接写在代码里,可通过环境变量或配置文件读取。
    4. 多调试提示词,比如用@SystemMessage给模型定角色(如 “你是 Java 技术顾问”),能让模型的回复更符合需求。