LangChain4j系列—Java AI框架LangChain4j快速入门

news2024/10/9 17:15:50

一、概述

LangChain4j于2023年初在ChatGPT的炒作中开始开发。我们注意到,与众多的Python和JavaScript LLM库和框架相比,缺少Java对应项,我们必须修复它!尽管“LangChain”是以我们的名义命名的,但该项目融合了LangChaint、Haystack、LlamaIndex和更广泛的社区的想法和概念,并加入了我们自己的创新。

LangChain4j的目标是简化LLM到Java应用程序的集成:

  1. 统一API:LLM提供商(如OpenAI或Google Vertex AI)和嵌入(向量)存储(如Pinecone或Milvus)使用专有API。LangChain4j提供了统一的API,以避免学习和实现每个API的特定API。要尝试不同的LLM或嵌入存储,您可以轻松地在它们之间切换,而不需要重写代码。LangChain4j目前支持15多个流行的LLM提供商和20多个嵌入商店。
  2. 综合工具箱:自2023年初以来,社区一直在构建许多基于LLM的应用程序,识别常见的抽象、模式和技术。LangChain4j将这些改进为现成的软件包。我们的工具箱包括从低级提示模板、聊天内存管理和函数调用到高级模式(如AI Services和RAG)的各种工具。对于每个抽象,我们提供了一个接口以及基于通用技术的多个现成实现。无论是构建聊天机器人还是开发具有从数据接收到检索的完整管道的RAG,LangChain4j都提供了各种各样的选项。
  3. 众多示例:这些示例展示了如何开始创建各种LLM支持的应用程序,提供了灵感并使您能够快速开始构建。

我们积极监控社区发展,旨在快速整合新技术和集成,确保您保持最新。图书馆正在积极发展。虽然一些功能仍在开发中,但核心功能已经就位,允许您立即开始构建基于LLM的应用程序!

为了更容易集成,LangChain4j还包括与Quarkus和Spring Boot的集成。

二、LangChain4j功能

  • 集成 15+个 语言大模型 15+ LLM providers
  • 集成 15+个 向量数据库 20+ embedding (vector) stores
  • 集成 10+个 嵌入模型 15+ embedding models
  • 集成 4个 图片大模型 5 cloud and local image generation models
  • 集成 2个 评分重排名模型  2 scoring (re-ranking) models
  • 集成 2个 代码执行引擎,支持动态函数调用(Function Calling)
  • 集成 1个 OpenAI 审核模型,实现输入/输出有害信息审核
  • 支持文本和图像作为输入(多模态)
  • AI服务(高级LLM API)
  • 提示模板
  • 持久和内存中聊天记忆算法的实现:消息窗口和令牌窗口
  • 来自LLM的响应流
  • 通用Java类型和自定义POJO的输出解析器
  • 动态工具(执行动态生成的LLM代码)
  • RAG(检索增强生成):
    • 数据导入/索引:
      • 从多个来源(文件系统、URL、GitHub、Azure Blob 存储、Amazon S3 等)导入各种类型的文档(TT、PDF、DOC、PPT、XLS 等)。
      • 使用多种算法将文档拆分为更小的片段。
      • 对文档和片段进行后处理
      • 使用嵌入模型生成嵌入片段
      • 将嵌入保存到向量数据库
    • (简单/高级)检索
      • 查询转换(扩展、压缩)「 expansion, compression 」
      • 查询路由 「 Routing of queries 」
      • 从向量存储或任何自定义源中检索
      • 重排名 「 Re-ranking 」
      • 倒数排名融合 「 Reciprocal Rank Fusion 」
      • 自定义 RAG 流程中的每个步骤
  • 支持文本分类
  • 用于标记化和估计标记计数的工具

三、LangChain4j框架

LangChain4j在两个抽象级别上使用:

低级别:在这个级别上,您可以最自由地访问所有低级组件,如ChatLanguageModel、UserMessage、AiMessage、EmbeddingStore、Embeding等。这些是LLM支持的应用程序的“原语”。您可以完全控制如何组合它们,但需要编写更多的粘合代码。
高级别:在这个级别上,您使用高级API(如AiServices)与LLM交互,这对您隐藏了所有的复杂性和样板。您仍然可以灵活地调整和微调行为,但它是以声明方式完成的。

LangChain4j 包含如下组件:

基础组件

  • 大语言模型
  • 提示词模板
  • 格式化解析
  • 上下文记忆

RAG

  • 文档加载
  • 文档切分
  • 嵌入模型
  • 向量存储/向量数据库

Chains:将多个低级组件组合在一起,并协调它们之间的交互。

四、LangChain4j 类库

LangChain4j采用模块化设计,包括:

  • langchain4j核心模块,它定义了核心抽象(如ChatLanguageModel和EmbeddedStore)及其API。
  • 主langchain4j模块,包含有用的工具,如ChatMemory、OutputParser以及高级功能,如AiServices。
  • 大量的langchain4j-{integration}模块,每个模块都提供与各种LLM提供者的集成,并将存储嵌入langchain4j中。您可以独立使用langchain4j-{integration}模块。对于其他功能,只需导入主要的langchain4j依赖项。

五、用例

你可能会问我为什么需要这个?以下是一些示例:

  • 你想实现一个定制的人工智能聊天机器人,它可以访问你的数据,并按照你想要的方式行事:
    • 客服聊天机器人:
      • 礼貌地回答客户问题
      • 接受/更改/取消订单
    • 教育助理可以:
      • 教授各种科目
      • 解释不清楚的部分
      • 评估用户的理解/知识
  • 您希望处理大量非结构化数据(文件、网页等)并从中提取结构化信息。例如:
    • 从客户评论中提取见解并支持聊天记录
    • 从竞争对手的网站上提取有趣的信息
    • 从求职者的简历中提取见解
  • 您想生成内容,例如:
    • 为每位客户量身定制的电子邮件
    • 应用程序/网站的内容:
      • 博客
      • 文章
  • 您想转换信息,例如:
  • 总结
  • 校对和重写
  • 翻译

六、LangChain4j 入门示例

LangChain4j提供与许多LLM提供商的集成。每个集成都有自己的maven依赖关系。最简单的方法是从OpenAI集成开始: 

1、引入Maven 依赖

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.35.0</version>
</dependency>

LangChain4j提供与许多LLM提供商的集成。每个集成都有自己的maven依赖关系。最简单的方法是从OpenAI集成开始:

String apiKey = System.getenv("OPENAI_API_KEY");

设置好密钥后,让我们创建一个OpenAiChatModel的实例:

OpenAiChatModel model = OpenAiChatModel.builder()
    .apiKey(apiKey)
    .modelName(GPT_4_O_MINI)
    .build();
String answer = model.generate("Say 'Hello World'");
System.out.println(answer); // Hello World

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

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

相关文章

UEFI学习笔记(十):系统表与ACPI表的遍历

一、概述 在 UEFI 系统表中&#xff0c;有几个关键的表用于提供系统信息、服务和硬件抽象。这些表可以通过 EFI_SYSTEM_TABLE 访问&#xff0c;常见的 UEFI 系统表如下&#xff1a; 1、EFI_SYSTEM_TABLE (系统表) EFI_SYSTEM_TABLE 是一个指针&#xff0c;包含多个服务和系统…

电力电子技术03 AC-DC整流器(1)---AC-DC整流器概述

一、AC-DC整流器概述 1.AC-DC整流器简介 AC-DC整流器是将交流电&#xff08;AC&#xff09;转换为直流电&#xff08;DC&#xff09;的电力电子设备&#xff0c;它在许多电子设备中至关重要&#xff0c;尤其是需要稳定直流电源的应用场景&#xff0c;如电源适配器、电脑电源、…

VSCode中添加自定义代码片段

目录 VSCode中添加自定义代码片段 基本操作 辅助工具 VSCode中添加自定义代码片段 基本操作 打开Visual Studio Code设置&#xff0c;选择Snippets 在弹出的窗口中选择新建全局片段文件 如果只想为当前工作目录设置片段文件则选择第二个 输入新全局片段文件的名称 这个文件…

Redis学习(十二)连接数不足报错及分析修复:ERR max number of clients reached.

目录 一、问题介绍二、问题分析2.1 redis-cli 登录2.2 info clients 查看连接数情况2.3 client list 查看具体连接情况2.4 分析连接空闲时长2.5 client list 根据客户端IP统计连接数 三、问题结论和解决3.1 问题结论&#xff1a;3.2 解决方案①&#xff1a;优化程序3.3 解决方案…

execl表格批量换行问题

我拿到了一份execl表格。需要用代码去读每一行。 当我点击wps中的换行的时候。显示已经换行了。 但是我双击图表的时候&#xff0c;显示换行并没有生效。 还是在cell单元格里有很多行。 此时&#xff0c;ctrlf打开替换按钮。 选择替换的内容&#xff1a;altenter 按住alten…

轨迹预测升级:如何让自动驾驶汽车从意图与风险中真正读懂“人心”?

导读&#xff1a; 本篇文章提出了一种基于联合预测的轨迹预测模型&#xff0c;包括交互模块、意图模块和风险评估模块。实验结果表明&#xff0c;本文模型在正常场景中保持高准确性&#xff0c;并且展现了在事故场景中应对具有挑战性或者突发情况的潜力。©️【深蓝AI】编译…

重学SpringBoot3-集成Redis(九)之共享Session

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;九&#xff09;之共享Session 1. 为什么需要 Session 共享2. Spring Session 和 Redis 的集成2.1. 引入依赖2.2. 配置 Redis 连接…

车辆重识别(2022ACM SIGGRAPH调色板:图像到图像的扩散模型)论文阅读2024/10/09

[2] Palette: Image-to-Image Diffusion Models ( ACM SIGGRAPH 2022) 作者&#xff1a;Chitwan Saharia、William Chan、Huiwen Chang 单位&#xff1a;Google Research, Brain Team 摘要&#xff1a; 本文基于条件扩散模型开发了一个统一的图像到图像翻译框架&#xff0c;并…

无人机避障——4D毫米波雷达点云滤波去噪(四)

噪声的来源&#xff1a; 对于4D毫米波雷达的前后两帧点云数据进行去噪&#xff0c;可以采用多种方法。首先&#xff0c;需要了解点云数据的噪声来源&#xff0c;可能是由于硬件限制、环境干扰或目标本身的反射特性等因素造成的。噪声点通常包括漂移点、孤立点、冗余点和混杂点…

【通过zip方式安装mysql服务】

通过zip方式安装mysql服务 Mysql安装包下载mysql安装及环境配置1.解压缩配置环境变量初始化mysql配置安装mysql服务启动MySQL服务连接mysql修改root用户密码 Mysql安装包下载 通过访问mysql官网下载&#xff1a;mysql下载地址 mysql安装及环境配置 1.解压缩 下载完成后&am…

YOLOv10改进策略【注意力机制篇】| GAM全局注意力机制: 保留信息以增强通道与空间的相互作用

一、本文介绍 本文记录的是基于GAM注意力模块的YOLOv10目标检测改进方法研究。GAM注意力模块通过3D排列和重新设计的子模块&#xff0c;能够在通道和空间方面保留信息&#xff0c;避免了先前方法中由于信息减少和维度分离而导致的全局空间-通道交互丢失的问题。本文利用GAM改进…

『网络游戏』角色创建界面逻辑【11】

创建代码&#xff1a;CreateWnd.cs 编写脚本&#xff1a;CreateWnd.cs 绑定脚本 修改脚本&#xff1a;LoginWnd.cs 绑定事件 修改脚本&#xff1a;Constans.cs 修改脚本&#xff1a;LoginSys.cs 修改脚本&#xff1a;LoginWnd.cs 拖拽框选 运行项目 - 点击开始进入创建角色界面…

柯桥外语培训韩语学习考级韩语中TOPIK常用语法表达

-기 위해서는 -는 것이 좋다 为了......&#xff0c;......比较好 -는 것보다는 -는 것이 좋다 比起......&#xff0c;......比较好 -(으)려면 -아/어/야 한다 如果想......的话&#xff0c;得...... -왜냐하면 -기 때문이다 因为...... -그 이유는 -기 때문이다 理由是…

TinyOS 点对基站通信

文章目录 一、前言1.1 发包的BlinkToRadio的数据包格式 二、混淆基站源码分析2.1 Makefile2.2 组件连接2.3 主逻辑代码 一、前言 1.1 发包的BlinkToRadio的数据包格式 如下&#xff0c;注意&#xff1a;AM层类型(1byte)即handlerID使可以在组件中修改的。 二、混淆基站源码…

专访:青年制片人林苏楠给影视行业新人的建议

近十年&#xff0c;对影视行业抱有浓厚兴趣&#xff0c;并进入专业院校学习的年轻人越来越多。但他们中的很多人毕业后却选择了其他行业&#xff0c;或者从事影视行业几年后决定转行。这其中的缘由似乎一部分来源于年轻创作者对真实的影视市场的不了解和不适应。 我们这次采访…

GC9118S替代TMI8118的优势分析,可应用在牙刷,电子锁,医疗设备等产品中

GC9118S作为一种新型集成电路&#xff0c;逐渐被视为TMI8118的理想替代品。以下是GC9118S在多个方面的优势&#xff0c;使其能够有效替代TMI8118。 1. 低功耗设计 GC9118S在功耗方面进行了优化&#xff0c;使其在待机和工作状态下都能显著降低能耗。这对于电池供电的设备&…

SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析

文章目录 同步编程&异步编程线程池为什么要使用线程池&#xff1f;Spring自定义线程池SpringBoot轻松调用线程池总结 测试demo链接 同步编程&异步编程 在Java并发编程中&#xff0c;同步和异步是两种常见的处理方式。 同步是指多个任务按顺序执行&#xff0c;一个任务的…

虚拟机三种网络配置方式随笔

1.1桥接模式 虚拟机和物理机同时直接连接物理网络&#xff08;均作为独立主机&#xff09; 桥接模式下&#xff0c;虚拟主机与真实主要在VMnet0构成的局域网内通信&#xff0c;同时通过真实主机中的网关与外网通信。由上表可看出&#xff0c;VMnet0直接连接到真实主机的某块真…

AGI时代存内计算芯片的语音识别之旅 —— 知存科技开发板体验与感悟

目录 一、简介二、活动内容2.1 多模态时代&#xff0c;存内计算框架的应用与发展1、多模态时代计算需求2、存内计算技术3、知存科技存内产品 2.2 分布式环境下深度学习任务的高效可靠执行研究2.3 IGZO在后道单片三维集成中的机遇与挑战1、IGZO的背景2、IGZO的优势3、IGZO器件的…

OpenStack 创建自定义的QCOW2格式镜像

目录 创建kvm虚拟机 创建目录上传ISO镜像 将 CentOS 7.4 上传到 /soft 目录下 创建 kvm虚机 使用的磁盘文件 配置kvm虚拟机 修改 KVM 虚机网络配置文件 安装 cloud-init 软件包 编辑 cloud.cfg 文件 编辑 network 文件 编辑 grub 文件 关闭kvm虚拟机 创建 QCOW2 镜…