LangChain4j

在这里插入图片描述

文章目录

    • 关于 LangChain4j
      • 特性
      • 2 levels of abstraction
      • Library Structure
      • Tutorials (User Guide)
      • Integrations and Models
      • 免责声明
    • Highlights
      • 定义由LLM提供支持的声明性 `AI Services`:
      • 使用 LLM 分类
      • 从非结构数据中提取结构化信息
    • Getting started
      • 兼容性
    • 支持的 LLM 集成


关于 LangChain4j

LangChain4j的目标是 简化将AI/LLM功能集成到Java应用程序的过程。

  • 官方文档:https://docs.langchain4j.dev
  • github : https://github.com/langchain4j/langchain4j
  • twitter : https://twitter.com/intent/follow?screen_name=langchain4j

教程资源

  • langchain4j-examples : https://github.com/langchain4j/langchain4j-examples
  • 学习材料:https://docs.langchain4j.dev/useful-materials/
  • Tutorials : https://docs.langchain4j.dev/category/tutorials
  • use cases : https://docs.langchain4j.dev/tutorials/#or-consider-some-of-the-use-cases
  • Amazing 90-minute tutorial : https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/

LangChain4j于2023年初在ChatGPT的火热中开始开发。
我们注意到大量Python和JavaScript LLM库和框架,缺乏Java对应物,我们不得不解决这个问题!
尽管“LangChain”是以我们的名义命名的,但该项目融合了LangChain、Haystack、LlamaIndex和更广泛的社区的想法和概念,并加入了我们自己的创新。

我们积极监控社区发展,旨在快速融入新技术和集成,确保您保持最新状态。

库正在积极开发中。虽然Python版本的LangChain的一些功能仍在开发中,但核心功能已经到位,允许您现在开始构建LLM驱动的应用程序!

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


统一 APIs
LLM提供(如OpenAI或Google Vertex AI)和 嵌入(矢量)存储(如Pinecone或Vespa)使用专有API。
LangChain4j提供了一个统一的API,以避免为每个API学习和实现特定的API。
要尝试不同的LLM或嵌入向量数据库,您可以轻松地在它们之间切换,而无需重写代码。
LangChain4j目前支持超过10个流行的LLM 和超过15个向量数据库。
把它想象成一个Hibernate,但用于LLM和嵌入存储。

丰富的 Toolbox
在过去的一年里,社区已经构建了许多LLM驱动的应用程序,确定了常见的模式、抽象和技术。
LangChain4j已经将这些代码细化为实用代码。我们的toolbox 包括从低级提示模板、内存管理和输出解析到高级模式(如Agent和RAG)的各种工具。
对于每个模式和抽象,我们都提供了一个接口以及基于已验证技术的多个现成实现。
无论您是在构建聊天机器人,还是开发具有从数据接收到检索的完整管道的RAG,LangChain4j都提供了多种选择。

很多 Examples
这些 examples 展示了如何开始创建各种LLM支持的应用程序,提供灵感并使您能够快速开始构建。


特性

  • 与10多个托管和自托管语言模型(LLM)集成,用于聊天
  • 提示模板
  • 支持文本和图像作为输入(多模态)
  • 来自语言模型的响应流
  • 用于标记化和估计标记计数的工具
  • 常见Java类型(例如 ListLocalDate 等)和自定义POJO的 输出解析器
  • 与三种以上托管和自托管的图像生成模型集成
  • 与10多个托管和自托管嵌入模型集成
  • 与超过15个托管和自托管 向量数据库 集成
  • 与一个模型集成:OpenAI
  • 与一个评分(re-ranking)模型集成:Cohere(预计还会有更多)
  • 工具(函数调用)
  • 动态工具(执行动态生成的LLM代码)
  • Lite 代理(OpenAI功能)
  • AI 服务
  • Chains(传统)
  • 持久化 和 内存聊天记忆算法的实现:消息窗口和 token 窗口
  • 文本分类
  • RAG (Retrieval-Augmented-Generation):
    • 集成:
      • 从不同源 (file system, URL, GitHub, Azure Blob Storage, Amazon S3, etc.) 导入多种类型文档 (TXT, PDFs, DOC, PPT, XLS etc.)
      • 使用分割算法,将本当分成不同的小块。
      • 预处理文档和分块
      • 使用 Embedding 模型 Embedding 块
      • Storing embeddings in embedding (vector) store
    • 检索 (简单和高级):
      • 查询转换(扩展、压缩)
      • 检索路由
      • 从向量数据库或任意自定义源检索
      • Re-ranking
      • Reciprocal Rank Fusion
      • 自定义 RAG 流的每一步

2 levels of abstraction

LangChain4j在两个抽象级别上运行:

  • 低水平。在这个级别上,您可以最自由地访问所有底层组件,例如 ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding, 等等。
    这些是LLM驱动的应用程序的“基元”。
    您可以完全控制如何组合它们,但需要编写更多的粘合代码。
  • 高水平。在这个级别上,您可以使用高级API与LLM交互,如 AiServicesChains, 它对你隐藏了所有的复杂性和样板。
    您仍然可以灵活地调整和微调行为,但这是以声明的方式完成的。

在这里插入图片描述


Library Structure

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

  • langchain4j-core 模块,定义了核心抽象 (比如 ChatLanguageModelEmbeddingStore) 和他们的 APIs。
  • 主要的 langchain4j 模块, 包含诸如 ChatMemory, OutputParser 的工具, 以及高级功能,如 AiServices.
  • 一系列的langchain4j-{integration} 模块, 每个提供与各种LLM的集成,并将存储嵌入到LangChain4j中。
    你可以独立的使用 langchain4j-{integration} 模块。
    对于其他功能,只需导入主要的 langchain4j 依赖项即可。

Tutorials (User Guide)

发现鼓舞人心的use cases ,或者跟随我们在 Tutorials 下对LangChain4j功能的逐步介绍, 您将逐步了解LangChain4j的所有功能。所有步骤都通过完整的代码示例和代码解释进行了演示。


Code Examples

  • langchain4j-examples
  • Examples in plain Java
  • Examples with Quarkus (uses quarkus-langchain4j dependency)
  • Example with Spring Boot

Integrations and Models

LangChain4j提供与OpenAI、HuggingFace、谷歌、Azure等模型的现成集成。
它具有适用于所有常见文档类型的文档加载器,并与大量嵌入模型和嵌入存储集成,以促进检索增强生成和人工智能分类。
所有继承都列在 https://docs.langchain4j.dev/category/integrations。


免责声明

请注意,该库正在积极开发中,并且:

  • 一些功能仍然缺失。我们正在努力尽快实施。
  • API随时可能更改。在这一点上,我们优先考虑未来的良好设计,而不是现在的向后兼容性。我们希望你能理解。
  • 我们需要您的意见!请告诉我们您需要什么功能以及您对当前实现的关注。

Highlights

定义由LLM提供支持的声明性 AI Services

interface Assistant {

    String chat(String userMessage);
}

Assistant assistant = AiServices.create(Assistant.class, model);

String answer = assistant.chat("Hello");

System.out.println(answer); // Hello! How can I assist you today?

使用 LLM 分类

enum Sentiment {
    POSITIVE, NEUTRAL, NEGATIVE
}

interface SentimentAnalyzer {

    @UserMessage("Analyze sentiment of {{it}}")
    Sentiment analyzeSentimentOf(String text);

    @UserMessage("Does {{it}} have a positive sentiment?")
    boolean isPositive(String text);
}

SentimentAnalyzer sentimentAnalyzer = AiServices.create(SentimentAnalyzer.class, model);

Sentiment sentiment = sentimentAnalyzer.analyzeSentimentOf("It is good!"); // POSITIVE

boolean positive = sentimentAnalyzer.isPositive("It is bad!"); // false

从非结构数据中提取结构化信息

class Person {

    private String firstName;
    private String lastName;
    private LocalDate birthDate;
}

interface PersonExtractor {

    @UserMessage("Extract information about a person from {{text}}")
    Person extractPersonFrom(@V("text") String text);
}

PersonExtractor extractor = AiServices.create(PersonExtractor.class, model);

String text = "In 1968, amidst the fading echoes of Independence Day, "
    + "a child named John arrived under the calm evening sky. "
    + "This newborn, bearing the surname Doe, marked the start of a new journey.";

Person person = extractor.extractPersonFrom(text);
// Person { firstName = "John", lastName = "Doe", birthDate = 1968-07-04 }

你也可以提供 LLM 可以使用的工具,可以是任何,如从数据库提取信息,调动 APIs 等。
可见案例:https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithToolsExample.java


Getting started


兼容性

  • Java: 8+
  • Spring Boot: 2+

1、在你的工程 添加 LangChain4j OpenAI 依赖

Maven:

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

Gradle:

implementation 'dev.langchain4j:langchain4j-open-ai:0.30.0'

2、导入 OpenAI API key:

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

你也可以使用我们提供的免费 API key demo 来测试 OpenAI。
How to get an API key?


3、Create an instance of a model and start interacting:

OpenAiChatModel model = OpenAiChatModel.withApiKey(apiKey);

String answer = model.generate("Hello world!");

System.out.println(answer); // Hello! How can I assist you today?

支持的 LLM 集成

ProviderNative ImageSync CompletionStreaming CompletionEmbeddingImage GenerationScoringFunction Calling
OpenAI
Azure OpenAI
Hugging Face
Amazon Bedrock
Google Vertex AI Gemini
Google Vertex AI
Mistral AI
DashScope
LocalAI
Ollama
Cohere
Qianfan
ChatGLM
Nomic
Anthropic
Zhipu AI

2024-04-23(二) 大雨

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM学习笔记(五)内存模型

与【java 内存结构】不同&#xff0c;【java 内存模型】是Java Memory Model&#xff08;JMM&#xff09;的意思。前三章主要介绍java内存结构&#xff08;组成&#xff09;、垃圾回收、字节码技术、类加载器&#xff0c;与内存模型这一章关联更多的是多线程&#xff0c;与前面…

C语言进阶课程学习记录-第48课 - 函数设计原则

C语言进阶课程学习记录 - 函数设计原则 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录

虚拟化+Docker基本管理

一、虚拟化简介 1、云端 华为云、谷歌云、腾讯云、阿里云、亚马逊、百度云、移动云、天翼云、西部数码云等 1.国内云 华为云、阿里云、腾讯云、天翼云(私有云) 2.国外云 谷歌云、亚马逊 2、云计算的服务模式是分层的 IaaS&#xff1a;Infrastructure&#xff08;基础设…

Ansys学生版安装教程

Ansys学生版安装 安装包下载 进入官网Ansys学生版下载&#xff0c;这里选择Ansys Electronics Desktop学生版。 解压安装包 将下载好的安装包解压&#xff0c;内容如下 打开AnsysEMSV文件夹&#xff0c;有以下内容 安装 双击点击setup.exe文件&#xff0c;依次按以下流程走…

社区奶柜的便捷与创新

在快节奏的现代生活中&#xff0c;无人零售技术如自动售货机已成为一种普遍现象&#xff0c;为消费者提供便捷的购物体验。社区奶柜&#xff0c;作为这一趋势中的一部分&#xff0c;不仅优化了日常购物流程&#xff0c;而且还在提升社区服务质量上发挥了重要作用。 1. 社区奶柜…

政企宣传邀请媒体的作用?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 政企宣传邀请媒体的作用主要体现在以下几个方面&#xff1a; 提升品牌知名度&#xff1a;通过媒体广泛报道活动内容、亮点及企业形象&#xff0c;可以提升企业或政府的品牌知名度。增加…

安卓原生项目工程结构说明

.gradle 和 .idea (自动生成) .gradle 是gradle下载好的缓存&#xff0c;如果有配置好的 下载好的缓存 直接会拿来用 没有会下载 生成 .idea 是编辑器的配置 app 代码主逻辑 目录 项目中的代码 资源都会在里面 工作的时候的核心目录 gradle 下载安卓的构建器gradle相关的配置信…

个人开发 App 最简单方法:使用现代开发工具和平台

在移动应用市场的蓬勃发展下&#xff0c;个人开发者也有机会将自己的创意转化为实际的应用程序&#xff0c;并通过应用商店实现盈利。然而&#xff0c;对于许多初学者来说&#xff0c;如何开始个人开发一个应用可能会感到困惑。本文将介绍个人开发 App 的最简单方法&#xff0c…

使用全局代理后导致Pycharm无法请求

一直有一个问题&#xff0c;就是在使用Fiddler等抓包工具或者VPN的时候由于是默认的开启的全局代理&#xff0c;然后就会导致我们使用requests时出现以下报错&#xff1a; 导致这个报错的原因就是requests被代理了&#xff0c;既然如此我们让它不被代理就可以了&#xff0c;代…

MIGO行项目屏幕增强

MIGO行项目屏幕增强 一、增强描述 由于在事务码MIGO中存在的字段中没有能够满足客户需求的字段&#xff0c;所以需要在事务码MIGO的屏幕中添加一个新的页签用来保存物料凭证中行项目增加的字段。 通过查找BADI的程序ZDEMO_BADI,输入参数MIGO后&#xff0c;得到对应BADI为MB_M…

大模型培训老师叶梓:通过微调提升小型语言模型的复杂推理能力

在人工智能的快速发展中&#xff0c;复杂推理能力的提升一直是研究者们追求的目标。最近&#xff0c;一项发表在arXiv上的研究成果【1】&#xff0c;提出了一种创新的方法&#xff0c;即通过微调小型语言模型&#xff08;LMs&#xff09;&#xff0c;并将其与大型语言模型&…

【测试】Kali Linux 渗透安全学习笔记(4) - 单一服务器扫描

距离上次做 Kali Linux 分享已经相隔半年之久了&#xff0c;刚好需要主导公司每半年一次的本地安全加固工作&#xff0c;这次将简单分享自己是如何做单一服务器的扫描。 声明&#xff1a; 本文测试的站点为自家站点仅做学习使用&#xff0c;不存在侵犯网络信息安全问题&#…

Kotlin语法快速入门--条件控制和循环语句(2)

Kotlin语法入门–条件控制和循环语句&#xff08;2&#xff09; 文章目录 Kotlin语法入门--条件控制和循环语句&#xff08;2&#xff09;二、条件控制和循环语句1、if...else2、when2.1、常规用法2.2、特殊用法--并列&#xff1a;2.3、特殊用法--类型判断&#xff1a;2.4、特殊…

Ubuntu 自己写的程序如何创建快捷方式

在Ubuntu中创建程序的快捷方式通常是通过将一个指向程序可执行文件的.desktop文件放入/usr/share/applications/或用户的~/.local/share/applications/目录来实现的。以下是创建快捷方式的基本步骤和示例&#xff1a; 创建一个新的.desktop文件。 在文件中填写必要的信息&…

【MySQL】Linux环境下MySQL基本操作

目录 一、登录进入MySQL 二、MySQL数据库的查看、创建、删除、重命名、拷贝操作 三、数据库下表的创建、删除、查看、修改&#xff08;增加、删除、更新字段/列&#xff0c;修改字段/列名&#xff09; 四、表中数据的插入、删除、查找、更新 一、登录进入MySQL mysql -u u…

如何登陆远程桌面?

远程桌面登录是一种在不同网络环境下实现电脑之间远程连接的常见技术手段。本文将介绍一种名为【天联】的组网产品&#xff0c;它是一款由北京金万维科技有限公司自主研发的连接产品&#xff0c;可帮助用户在异地组网环境中构建局域网&#xff0c;解决电脑与电脑、设备与设备、…

入坑 Node.js 1

原文&#xff1a;https://blog.iyatt.com/?p14717 前言 前面刚刚对 Spring Boot 有了个概念&#xff0c;再来学学 Node.js&#xff0c;顺便当学 JavaScript&#xff0c;为后面入前端做准备。 环境 Node.js 20.12.2 官方 API 文档&#xff1a;https://nodejs.org/docs/lat…

使用 ArcGIS 对洪水预测进行建模

第一步 — 下载数据 所有数据均已包含在 Esri 提供的项目压缩文件中。我将创建一个名为“Stowe_Hydrology.gdb”的新地理数据库,在其中保存这些数据以及创建的所有后续图层。 1-0。斯托市边界 斯托城市边界是佛蒙特州地理信息中心提供的矢量要素类面。我将这一层称为“Stow…

C#语法基础知识之环境搭建

C#基础语法知识 环境搭建 、变量、运算符、条件分支语句、循环语句 目录 C#基础语法知识环境搭建1、程序语言是什么2、常用的主流语言3、为何要学习C#语言4、IDE是什么5、下载安装Visual Studio6、新建项目进行基础设置7、基础设置8、理解写代码9、注释的三种方式10、控制台…

面试集中营—mysql架构相关

一、Mysql基本架构 这个问题没太有人问&#xff0c;笔者也是浅尝辄止&#xff0c;但是了解一个中间件一定要从架构开始&#xff0c;上来就背八股文那就没意思了。 从下图可以看到Mysql的包括网络连接、服务、数据存储和系统文件&#xff08;日志&#xff09;四大部分。 数据连接…