LangChain4J开源开发框架简介

news2025/5/19 16:20:54

目录

  • 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 是一个值得尝试的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2322331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式

SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式 前言添加maven依赖配置application.properties测试实体类 方式一&#xff1a;继承 ElasticsearchRepository&#xff08;适合简单查询&#xff09; 直接使用想自定义自己的Repository接口 方式…

STM32蜂鸣器播放音乐

STM32蜂鸣器播放音乐 STM32蜂鸣器播放音乐 Do, Re, Mi, Fa, 1. 功能概述 本系统基于STM32F7系列微控制器&#xff0c;实现了以下功能&#xff1a; 通过7个按键控制蜂鸣器发声&#xff0c;按键对应不同的音符。每个按键对应一个音符&#xff08;Do, Re, Mi, Fa, Sol, La, Si&a…

解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革

前言&#xff1a; DeepSeek 兑现了自己的诺言&#xff0c;开源了一款用于 Hopper GPU 的高效型 MLA 解码核&#xff1a;FlashMLA。 项目地址&#xff1a;https://github.com/deepseek-ai/FlashMLA 1:FlashMLA 是什么呀&#xff1f; MLA是DeepSeek大模型的重要技术创新点&…

leetcode:136. 只出现一次的数字(python3解法)

难度&#xff1a;简单 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xf…

Isaac Sim与Isaac Lab初使用

目录 基于Omiverse下载Isaacsim安装Isaac Lab配置isaacsim环境测试克隆仓库配置python环境强化学习训练的测试 IsaacLab模板配置vscode环境ros接口安装 作为nvidia出品的仿真软件&#xff0c;很多机器人、机器狗【具身智能】都可以有很不错的效果&#xff0c;所以会使用isaac s…

Spring AI Alibaba 工具(Function Calling)使用

一、工具(Function Calling)简介 Spring AI Alibaba工具(Function Calling)&#xff1a;https://java2ai.com/docs/1.0.0-M6.1/tutorials/function-calling/ 1、工具(Function Calling) “工具&#xff08;Tool&#xff09;”或“功能调用&#xff08;Function Calling&#xf…

Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套

在虚拟现实&#xff08;VR&#xff09;和扩展现实&#xff08;XR&#xff09;领域&#xff0c;触觉反馈技术正逐渐成为提升沉浸感和交互体验的重要因素。Weart作为这一领域的创新者&#xff0c;凭借其TouchDIVER Pro和TouchDIVER G1触觉手套&#xff0c;为用户带来了高度逼真的…

[深度学习]图片分类任务

图片分类任务 文章目录 图片分类任务分类任务回归和分类如何做分类的输出 图片分类卷积神经网络保持特征图大小不变更大的卷积核和更多的卷积核层数特征图怎么变小卷积神经网络中特征图改变卷积到全连接分类任务的LOSS一个基本的分类神经网络 经典神经网络AlexNetVggNetResNet …

Nodejs 项目打包部署方式

方式一&#xff1a;PM2 一、准备工作 确保服务器上已安装 Node.js 环境建议使用 PM2 进行进程管理&#xff08;需要额外安装&#xff09; 二、部署步骤 1.首先在服务器上安装 PM2&#xff08;推荐&#xff09;&#xff1a; npm install -g pm22.将项目代码上传到服务器&…

C++类与对象的的第三个简单的实战练习-3.25笔记

哔哩哔哩C面向对象高级语言程序设计教程&#xff08;118集全&#xff09; 简单实战三 创建项目 打开VS&#xff0c;点击创建一个新项目 创建一个空项目 点击下一步 点击工程名称&#xff0c;选择添加 选择新建项 选择C类 取名 点击确定&#xff0c;这时候还需要一个main.cpp …

HarmonyOS-ArkUI Grip组件

我们在学习List的时候&#xff0c;已经捎带引入了Grid。讲解如下图所示&#xff1a; 也就是&#xff0c;如果一个表&#xff0c;长宽基本都是一致的&#xff0c;那么此时可以完全不用Grid也可以实现&#xff0c;并且&#xff0c;优先考虑的就是List。 如果List实现不了的情况下…

2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip

一、资料列表 第一课&#xff1a;Deepseek基础入门 第二课&#xff1a;DeepSeek赋能职场 第三课&#xff1a;普通人如何抓住DeepSeek红利 第四课&#xff1a;让科研像聊天一样简单 第五课&#xff1a;DeepSeek与AI幻觉 第六课&#xff1a;基于DeepSeek的AI音乐词曲的创造法 第…

mac vim命令快捷键

目录 移动光标插入模式复制/粘贴删除搜索/替换退出 移动光标 快捷键说明0 / ^跳到行首&#xff0c;移动到光标所在行的"行首"$跳到行末&#xff0c;移动到光标所在行的"行尾"gg跳到文件第一行G移动到文章的最后[n]G跳到第n行w光标跳到下个字的开头e光标跳…

低代码配置式Web组态解析

低代码配置式Web组态技术通过可视化操作和预置组件库&#xff0c;大幅降低开发门槛&#xff0c;适用于工业控制、物联网监控、数据可视化等场景。以下是综合行业实践和产品特性的分析&#xff1a; ‌一、核心功能与优势‌ ‌可视化编辑与拖拽布局‌ 提供图形化编辑器&#xff0…

基于web的家政服务网站

内容摘要 由于互联网的使用&#xff0c;人们在管理、应用、服务等领域使用数据更加简洁、方便&#xff0c;大大提高了工作效率。互联网正逐渐融入我们的生活&#xff0c;影响和改变我们的生活。 家政服务管理系统是典型的信息管理系统&#xff08;MIS&#xff09;。其开发主要…

聚水潭数据集成到MySQL的最佳实践分享

聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将探讨如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体的集成方案为“聚水潭-商品信息查询-->BI初本-商品信息表_copy”。该方案旨在实现从聚水潭获取商…

线性代数核心概念与NumPy科学计算实战全解析

前言 学习方法&#xff1a; 思维导图&#xff0c;梳理 多记忆&#xff0c;函数名和功能&#xff0c;参数 学会应用&#xff0c;不要钻牛角尖 一、浅解线性代数 1.1标量 标量是一个只有大小没有方向的量。在数学上&#xff0c;标量通常表示为一个普通的数字&#xff0c;如‌质量…

C#自定义曲线便器功能实现(简化版)

目录 一、曲线编辑器实现功能 二、实现方法说明 三、关键代码说明 1、绘制背景板和曲线 2、绘制坐标系面板 3、绘制曲线 四、工程下载连接 一、曲线编辑器实现功能 添加或者删除控制点&#xff0c;通过移动控制点来修改曲线形状 二、实现方法说明 1、坐标系系统&#x…

解锁U盘属性0字节困境,重获数据生机

在数字化浪潮中&#xff0c;U盘宛如一位忠诚的“数据信使”&#xff0c;频繁穿梭于各种设备之间&#xff0c;为我们存储和传输着重要信息。然而&#xff0c;当U盘突然显示属性为0字节时&#xff0c;就如同这位信使突然“失声”&#xff0c;让我们陷入了数据丢失的恐慌之中。U盘…

⭐算法OJ⭐二叉树的直径【树】(C++实现)Binary Tree Paths

543. Binary Tree Paths&#xff08;二叉树的直径&#xff09; Given the root of a binary tree, return the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or m…