AI Agent智能体 - LangChain4j框架

部署运行你感兴趣的模型镜像

官方资源:


一、什么是 LangChain4j?

LangChain4j 是一个受 Python 版 LangChain 启发而构建的 Java 框架。它的核心目标是简化基于 LLM 的应用程序的开发。它提供了一套优雅的抽象层和丰富的工具,让 Java 开发者能够轻松地将 AI 功能(如聊天、问答、推理等)嵌入到他们的传统应用中,而无需深入了解底层复杂的 API 调用和数据处理细节。

可以把它想象成 Java 界的 LLM 应用开发“瑞士军刀”


二、核心设计理念与目标

  • 开发者友好:提供符合 Java 习惯(fluent-style、builder pattern)的、类型安全的 API。

  • 模块化:各个组件(如模型、嵌入、向量库、工具等)都是可插拔的,你可以自由组合和替换。

  • 轻量级:项目被分解为多个小模块,你可以只引入项目需要的部分,避免依赖膨胀。

  • 与 Java 生态无缝集成:天然支持 Spring Boot、Quarkus 等主流 Java 框架,并且可以轻松与现有的 Java 数据源、服务和方法连接。


三、核心概念与关键组件

要理解 LangChain4j,需要掌握以下几个核心概念:

1、模型抽象

LangChain4j 定义了一套统一的接口来与各种 LLM 交互,屏蔽了不同供应商 API 的差异。

  • 聊天模型:用于多轮对话(如 OpenAiChatModel, AzureOpenAiChatModel, LocalAiChatModel)。

  • 流式聊天模型:支持以流的方式实时获取模型响应,提升用户体验。

  • 语言模型:用于简单的文本补全。

  • 嵌入模型:将文本转换为数值向量,这是实现语义搜索和 RAG 的基础。

2、提示词模板

LLM 的输入被称为“提示词”。LangChain4j 提供了 PromptTemplate,允许你动态地将变量注入到预设的文本模板中。

// 示例:创建一个包含变量的提示词模板
PromptTemplate promptTemplate = PromptTemplate.from("请为{{it}}写一首短诗。");
String prompt = promptTemplate.apply("春天"); // 输出:"请为春天写一首短诗。"
3、对话记忆

为了在多次交互中记住上下文,LangChain4j 提供了 ChatMemory 抽象。

  • 它可以自动地将历史对话信息包含在发给模型的请求中。

  • 支持多种后端存储,如内存、Redis 等。

  • 可以控制记忆的窗口大小(例如,只记住最近 10 轮对话)。

4、工具与智能体

这是 LangChain4j 最强大的功能之一。

  • 工具:你可以将任何 Java 方法(如查询数据库、调用外部 API、执行计算)暴露为一个“工具”,并描述其功能。

  • 智能体:模型可以“思考”并决定是否以及如何调用这些工具来完成任务。这极大地扩展了 LLM 的能力,使其能够获取实时信息、执行具体操作。

示例场景:用户问“我上个月的销售额是多少?”。模型可以自动调用你提供的 getSalesData(month) 工具,获取真实数据,然后组织语言回答用户。

5、检索增强生成(RAG)

这是当前构建企业级 AI 应用最核心的模式。RAG 允许模型根据你提供的私有、最新的知识库来回答问题,而不是仅依赖其训练时的通用知识。

LangChain4j 为 RAG 提供了完整的工具链:

  1. 文档加载器:从各种来源(PDF、TXT、URL、数据库)加载文档。

  2. 文本分割器:将长文档切分成更小的、有意义的片段(chunks)。

  3. 嵌入模型:将文本片段转换为向量。

  4. 向量数据库:存储这些向量。LangChain4j 支持多种向量库,如 Chroma、Elasticsearch、Milvus、Redis 等。

  5. 检索器:当用户提问时,将问题也转换为向量,并在向量库中搜索最相关的文本片段。

  6. 最终问答:将检索到的相关片段和原始问题一起组合成一个详细的提示词,发送给 LLM,让它生成一个基于你私有知识的、准确的答案。


四、一个完整的代码示例(RAG + Spring Boot)

以下是一个简化但完整的例子,展示如何在 Spring Boot 中使用 LangChain4j 构建一个 RAG 应用。

// 1. 添加依赖 (Maven)
// <dependency>
//     <groupId>dev.langchain4j</groupId>
//     <artifactId>langchain4j-spring-boot-starter</artifactId>
//     <version>0.31.0</version> // 请使用最新版本
// </dependency>

// 2. 配置 application.yml
// langchain4j:
//   open-ai:
//     chat-model:
//       api-key: ${OPENAI_API_KEY}
//   embedding-model:
//     open-ai:
//       api-key: ${OPENAI_API_KEY}

import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel; // 本地嵌入模型,免费
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreRetriever;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import org.springframework.stereotype.Service;

import java.util.List;

import static dev.langchain4j.model.openai.OpenAiModelName.GPT_3_5_TURBO;

@Service
public class DocumentQaService {

    private final OpenAiChatModel chatModel;
    private final EmbeddingStoreRetriever retriever;

    public DocumentQaService() {
        // 初始化聊天模型
        this.chatModel = OpenAiChatModel.builder()
                .apiKey(System.getenv("OPENAI_API_KEY"))
                .modelName(GPT_3_5_TURBO)
                .build();

        // 初始化嵌入模型和向量存储(这里使用内存存储,仅作演示)
        var embeddingModel = new AllMiniLmL6V2EmbeddingModel();
        EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();

        // 文档摄取:加载、分割、嵌入、存储
        // 这里我们手动添加一些文档
        List<String> documents = List.of(
            "LangChain4j 是一个用于构建基于 LLM 应用的 Java 框架。",
            "它支持多种大语言模型,如 OpenAI 和 Azure OpenAI。",
            "RAG 是检索增强生成的缩写,是一种流行的技术。"
        );

        var ingestor = EmbeddingStoreIngestor.builder()
                .documentSplitter(...) // 配置文本分割器
                .embeddingModel(embeddingModel)
                .embeddingStore(embeddingStore)
                .build();
        // 将文档摄入向量库(此处简化了文档转换步骤)
        // ingestor.ingest(...);

        // 初始化检索器
        this.retriever = EmbeddingStoreRetriever.from(embeddingStore, embeddingModel);
    }

    public String answer(String question) {
        // 从向量库中检索与问题相关的内容
        var relevantContents = retriever.retrieve(question);

        // 构建一个包含检索到内容的提示词
        var promptTemplate = PromptTemplate.from(
            "请根据以下信息回答问题:\n\n{{information}}\n\n问题:{{question}}"
        );
        var prompt = promptTemplate.toUserMessage(
            Map.of("information", relevantContents, "question", question)
        );

        // 发送给 LLM 获取答案
        return chatModel.generate(prompt);
    }
}

// 3. 在 Controller 中使用
@RestController
public class ChatController {

    @Autowired
    private DocumentQaService qaService;

    @GetMapping("/ask")
    public String ask(@RequestParam String question) {
        return qaService.answer(question);
    }
}

五、优势与适用场景

优势:

  • 降低门槛:让不熟悉 AI 的 Java 开发者也能快速构建 AI 应用。

  • 提高效率:提供了大量“开箱即用”的组件,避免了重复造轮子。

  • 生产就绪:良好的设计、文档和社区支持,适合用于企业级项目。

  • 灵活性:模块化设计允许你自由选择模型、向量库等组件。

适用场景:

  • 智能客服机器人:基于企业知识库的问答。

  • 代码助手:分析代码、生成文档、解释错误。

  • 内容生成与摘要:自动生成报告、摘要长文档。

  • 数据分析与洞察:让模型通过工具查询数据并进行分析。

  • 任何需要与文本进行智能交互的传统 Java 应用


六、总结

LangChain4j 是 Java 开发者进入 AI 应用世界的桥梁和加速器。它通过一系列精心设计的抽象,将复杂的 LLM 交互、上下文管理、工具调用和 RAG 流程封装成简单、易用的 API。如果你是一名 Java 开发者,并希望在你的应用中集成现代 AI 功能,LangChain4j 绝对是你应该首先学习和使用的工具。

您可能感兴趣的与本文相关的镜像

ComfyUI

ComfyUI

AI应用
ComfyUI

ComfyUI是一款易于上手的工作流设计工具,具有以下特点:基于工作流节点设计,可视化工作流搭建,快速切换工作流,对显存占用小,速度快,支持多种插件,如ADetailer、Controlnet和AnimateDIFF等

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值