当前位置: 首页 > news >正文

LangChain4J开源开发框架简介

目录

  • 1.1、前言
  • 1.2、集成方式简单
  • 1.3、核心功能与优势
  • 1.4、两种调用方式
  • 1.5、链式调用示例代码
  • 1.6、AI服务调用示例代码
  • 1.7、典型使用场景
  • 1.8、总结

1.1、前言

        LangChain4J 是一个专为 Java 开发者设计的开源框架,旨在简化大型语言模型(LLMs)在应用中的集成。它借鉴了 Python 版 LangChain 的核心思想,但针对 Java 生态进行了优化,帮助开发者快速构建基于 LLM 的智能应用,例如聊天机器人、自动化流程和知识库系统等。
        LangChain4J 降低了 Java 开发者集成 LLM 的门槛,尤其适合需要与企业现有系统(如数据库、API)深度结合的场景。其模块化设计和链式编排能力,使得构建复杂 AI 应用变得更加高效。如果你熟悉 Java 生态并希望快速接入大模型,LangChain4J 是一个值得尝试的工具。

1.2、集成方式简单

        LangChain4j的目标是简化将LLM集成到Java应用程序中的过程。具体如下:

  • 统一接口调用
            LLM提供商(如OpenAI或Google Vertex AI)和嵌入(矢量)存储(如Pinecone或Milvus)都有专用的API。这使得开发者在使用不同的LLM模型和嵌入存储时需要编写不同的代码,比较繁琐。LangChain4j提供了一个统一的API,便捷开发者在使用不同的LLM或嵌入存储时,只需修改参数配置,而无需重写代码。从而简化了LLM集成。
  • 丰富的工具箱
            自2023年初以来,社区一直在构建许多基于LLM的应用程序,确定常见的抽象、模式和技术。LangChain4j已经将这些改进为现成的包。我们的工具箱包括从低级提示模板、聊天内存管理和函数调用到代理和RAG等高级模式的工具。对于每种抽象,我们都提供了一个接口以及基于常见技术的多个即用型实现。无论您是在构建聊天机器人,还是在开发从数据摄取到检索的完整管道的RAG,LangChain4j都提供了多种选择。这是使得LangChain4j具备很强的扩展模型能力,不仅可以集成外部 API、数据库、搜索引擎(如 Google 搜索)还可以使用自定义 Java 工具。
  • 众多的示例代码
            这些示例展示了如何开始创建各种 LLM 驱动的应用程序。 提供灵感并使您能够快速开始构建。示例代码

1.3、核心功能与优势

  • 与超过15家LLM 提供商集成
  • 与超过20家嵌入(向量)存储集成
  • 与超过15个嵌入模型集成
  • 与5个图像生成模型集成
  • 与2个评分(重新排名)模型集成
  • 与一个审核模型(OpenAI)集成
  • 支持将文本和图像作为输入(多模态)
  • 提供高级的API调用方式
  • 支持提示词模板
  • 实现持久和内存中聊天内存算法:消息窗口和令牌窗口
  • 支持大模型的流式响应
  • 提供常见的Java类型和自定义POJO的输出解析器
  • 提供丰富的工具库与自定义工具开发
  • 支持动态工具(执行动态生成的 LLM 代码)
  • 支持RAG(检索增强生成):
    • 嵌入
      (1)从多个来源(文件系统、URL、GitHub、Azure Blob 存储、Amazon S3 等)导入各种类型的文档(TXT、PDF、DOC、PPT、XLS 等)
      (2)使用多种拆分算法将文档拆分为更小的段
      (3)文件和分段预处理
      (4)使用嵌入模型嵌入预处理后的文件和分段
      (5)将嵌入存储在嵌入(向量)存储中
    • 检索(简单和高级)
      (1)查询转换(扩展、压缩)
      (2)查询路由
      (3)从向量存储、任何自定义源中进行检索
      (4)重新排名
      (5)倒数排名融合
      (6)自定义RAG流程中的每个步骤
  • 文本分类
  • 用于令牌化和估计令牌计数的工具
  • Kotlin 扩展:使用 Kotlin 的协程功能对聊天交互进行异步非阻塞处理。
  • 支持链式编排:通过组合模型调用、工具使用和数据处理步骤,构建复杂任务流程(例如问答、文本生成+数据库查询)
  • 支持记忆管理:自动管理对话历史,支持短期/长期记忆存储,维持多轮对话的上下文
  • 支持多模型:支持 OpenAI、HuggingFace、Azure OpenAI 等云端模型,以及本地部署的模型(如 Ollama)

1.4、两种调用方式

        LangChain4j 提供两种层次上的调用方式,一种是低层次的链式调用,另一种是高层次的AI服务调用。

  • 低层次的链式调用
    在这个层次上,可以最自由地访问所有低级组件,例如ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding等等。这些是LLM驱动的应用程序的“基本单元”。你可以完全控制如何组合它们,但你需要编写更多的组合代码。
  • 高层次的AI服务调用
    在这个层次上,将使用 AI 服务等高级 API 与 LLM 进行交互。 这种方式隐藏了所有的复杂性和细节。 但热可以灵活地进行调整和微调行为,但这是以声明方式完成的。
    两种调用方式

1.5、链式调用示例代码

        以下是一个 LangChain4J 链式调用的示例代码,展示了如何将多个步骤(模型调用、工具使用、数据处理)组合成一个完整的流程:用户输入一个自然语言问题 → 模型生成 SQL → 执行 SQL 查询 → 模型将结果转换为自然语言回答。

import dev.langchain4j.chain.Chain;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.structured.Description;
import dev.langchain4j.tools.DatabaseTool;

public class LangChain4JChainExample {

    // 步骤1: 定义数据结构(用于解析模型输出)
    public static class SqlQuery {
        @Description("生成的SQL查询语句")
        private String sql;
        
        // Getter/Setter
    }

    public static void main(String[] args) {

        // 步骤2: 初始化模型和工具
        OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey("your-openai-key")
                .modelName("gpt-4")
                .temperature(0.3)  // 降低随机性,适合生成SQL
                .build();

        // 模拟数据库工具(实际项目需替换为真实连接)
        DatabaseTool dbTool = new DatabaseTool() {
            @Override
            public String executeQuery(String sql) {
                // 执行SQL并返回结果(示例数据)
                return "[{\"name\": \"Alice\", \"age\": 30}, {\"name\": \"Bob\", \"age\": 25}]";
            }
        };

        // 步骤3: 构建链式流程
        Chain<String, String> chain = Chain.builder()
                // 子链1: 用户问题 → 生成SQL
                .addStep(input -> 
                    model.generate(
                        "用户问题: {{input}}\n请生成对应的SELECT SQL语句,只输出SQL不要解释。",
                        input
                    )
                )
                // 解析SQL为结构化对象
                .addStep(sql -> new SqlQueryParser().parse(sql, SqlQuery.class))
                // 子链2: 执行SQL查询
                .addStep(sqlQuery -> dbTool.executeQuery(sqlQuery.getSql()))
                // 子链3: 结果 → 自然语言总结
                .addStep(data -> 
                    model.generate(
                        "将以下JSON数据转换为自然语言回答:\n{{data}}\n用户原问题:{{input}}",
                        data, 
                        args[0]  // 原始输入
                    )
                )
                .build();

        // 步骤4: 执行链
        String userQuestion = "查询年龄大于28岁的用户,返回姓名和年龄";
        String answer = chain.execute(userQuestion);
        
        System.out.println("最终回答: \n" + answer);
    }
}

示例输出结果
最终回答:
共有1位用户年龄大于28岁:
姓名:Alice,年龄:30岁。

1.6、AI服务调用示例代码

        以下是 LangChain4J 调用 AI 服务的示例代码,涵盖常见的场景(如 OpenAI、本地模型、工具集成等),可直接用于 Java 应用开发:

  • 简单文本生成(OpenAI)
import dev.langchain4j.model.openai.OpenAiChatModel;

public class BasicTextGeneration {

    public static void main(String[] args) {
        // 1. 初始化 OpenAI 模型
        OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey("your-api-key")
                .modelName("gpt-3.5-turbo")
                .temperature(0.7)
                .build();

        // 2. 发送请求并获取回复
        String response = model.generate("用一句诗形容春天");
        System.out.println(response); 
        // 输出示例:春风又绿江南岸,明月何时照我还。
    }
}
  • 结构化输出(如 JSON)
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.structured.Description;

public class StructuredOutputExample {

    // 定义数据结构(用注解描述字段)
    static class Product {
        @Description("商品名称,需吸引人且长度不超过20字")
        String name;
        
        @Description("价格,单位为人民币,保留两位小数")
        double price;
        
        @Description("适用人群,用逗号分隔的标签,如'学生,程序员'")
        String tags;
    }

    public static void main(String[] args) {
        OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey("your-key")
                .modelName("gpt-4")
                .build();

        // 生成并解析结构化数据
        Product product = model.generate(
            "生成一个数码产品的信息,类型为{{type}}",
            Product.class,  // 指定输出类型
            "无线蓝牙耳机"    // 替换模板变量
        );

        System.out.println("商品名称: " + product.name);
        System.out.println("价格: ¥" + product.price);
        System.out.println("适用人群: " + product.tags);
    }
}

1.7、典型使用场景

  • 智能客服
    多轮对话管理,结合知识库提供精准回答。
  • 数据分析助手
    用户用自然语言提问,模型生成数据分析代码(如 SQL/Python),自动执行并返回结果。
  • 文档问答系统
    集成 RAG(检索增强生成),从企业内部文档中提取信息生成答案。
  • 自动化流程
    自动分类工单、生成报告摘要或执行预定义操作(如发送邮件)。

1.8、总结

        LangChain4J 降低了 Java 开发者集成 LLM 的门槛,尤其适合需要与企业现有系统(如数据库、API)深度结合的场景。其模块化设计和链式编排能力,使得构建复杂 AI 应用变得更加高效。如果你熟悉 Java 生态并希望快速接入大模型,LangChain4J 是一个值得尝试的工具。

相关文章:

  • 为什么有了Redis还需要本地缓存?
  • leetcode 2711. 对角线上不同值的数量差 中等
  • Redis原理:为什么要rehash
  • 详细分析HttpClient的基本知识(附Demo实战思路)
  • SEV内存加密位linux内核设置过程
  • C++锁: 读锁,递归锁,超时锁
  • 2025系统分析师---软件工程:深度剖析常见软件开发方法
  • Nature Machine Intelligence 嵌入式大语言模型使机器人能够在不可预测的环境中完成复杂的任务
  • WordPress WooCommerce 本地文件包含漏洞(CVE-2025-1661)
  • 网络编程基础知识——从基础到实操
  • 常见框架漏洞(一)----Thinkphp(TP)
  • Android之卡片式滑动
  • 零基础上手Python数据分析 (9):DataFrame 数据读取与写入 - 让数据自由穿梭
  • 基于Java的班级事务管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • HarmonyOS-ArkUI Grip组件
  • Charles汉化步骤 charles中文版怎么用
  • 凝视型高光谱相机:钻石光谱分析研究与应用
  • PoE交换机如何助力智慧城市基础设施建设?
  • C# 如何检查给定的四个点是否形成一个正方形(How to check if given four points form a square)
  • docker ssh远程连接
  • 郑州网站建设选智巢/成都全网推广哪家专业
  • 越南网购网站/360手机优化大师下载
  • 网盘做网站/南京疫情最新消息
  • 制作一般网站/aso优化报价
  • 怎么做网站快照/合肥网站优化软件
  • 奉贤做网站公司/网站seo服务商