LangChain4j

news2025/1/17 23:23:32

在这里插入图片描述

文章目录

    • 关于 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(二) 大雨

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

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

相关文章

[NSSCTF]prize_p5

前言 之前就学过反序列化的字符串逃逸 但是没怎么做题 补一下窟窿 题目 <?phperror_reporting(0);class catalogue{public $class;public $data;public function __construct(){$this->class "error";$this->data "hacker";}public functi…

Midjourney之利用tile进行图像拼粘,壁纸和纹理生成无缝拼图

hello 小伙伴们&#xff0c;我是你们的老朋友——树下&#xff0c;今天分享Midjourney提示词常用参数——tile&#xff0c;这个参数的主要作用是用来生成平铺图案&#xff0c;话不多说&#xff0c;直接开始~ 如果你想要各种图案的壁纸或者需要一些图案参考去制作织物&#xff…

FSRCNN:加速超分辨率卷积神经网络,SRCNN的加速版

paper&#xff1a;https://arxiv.org/pdf/1608.00367 code: https://github.com/yjn870/FSRCNN-pytorch/tree/master 目录 1. 动机 2. 方法 3. 代码对比 4. 实验结果 1. 动机 作者此前提出的SRCNN证明了CNN在图像超分领域的有效性。然而&#xff0c;SRCNN计算效率较低&#…

235 基于matlab的时频盲源分离(TFBSS)算法

基于matlab的时频盲源分离&#xff08;TFBSS&#xff09;算法&#xff0c;TFBSS用空间频率分布来分离非平稳信号&#xff0c;可以分离具有不同时频分布的源信号&#xff0c;也能够分离具有相同谱密度但时频分布不同的高斯源。同时&#xff0c;该算法在时频域上局域化源信号能量…

Bytebase 2.16.0 - 支持 Oracle 和 SQL Server DML 变更的事前备份

&#x1f680; 新功能 支持 Oracle 和 SQL Server DML 变更的事前备份。 支持在 SQL 编辑器中显示存储过程和函数。 支持兼容 TDSQL 的 MySQL 和 PostgreSQL 版本。 支持把数据库密码存储在 AWS Secrets Manager 和 GCP Secret Manager。 支持通过 IAM 连接到 Google Clou…

职场不败的社交口才是什么行为

职场不败的社交口才是什么行为 职场不败的社交口才&#xff1a;塑造卓越人际关系的行为艺术 在职场中&#xff0c;社交口才是一项至关重要的能力。它不仅能够帮助我们建立良好的人际关系&#xff0c;更能在关键时刻为我们赢得信任、提升影响力&#xff0c;从而在职场竞争中立于…

Mac NTFS磁盘读写工具选择:Tuxera还是Paragon?

在Mac上使用NTFS磁盘时&#xff0c;选择一款合适的读写工具至关重要。Tuxera和Paragon作为两款备受推崇的Mac NTFS磁盘读写工具&#xff0c;都能够帮助用户轻松地实现NTFS格式的读写。那么&#xff0c;面对这两款功能强大的工具&#xff0c;我们应该如何选择呢&#xff1f;本文…

【每日刷题】Day26

【每日刷题】Day26 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. [NOIP2008]笨小猴_牛客题霸_牛客网 (nowcoder.com) 2. 添加逗号_牛客题霸_牛客网 (nowcoder.com) …

【计算机毕业设计】基于SSM++jsp的校园快递代取系统【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

HarmonyOS Next从入门到精通实战精品课

第一阶段&#xff1a;HarmonyOS Next星河版从入门到精通该阶段由HarmonyOS Next星河版本出发&#xff0c;介绍HarmonyOS Next版本应用开发基础概念&#xff0c;辅助学员快速上手新版本开发范式&#xff0c;共计42课时 第一天鸿蒙NEXT Mac版、Windows版【编辑器】和【模拟器】&a…

5分钟梳理银行测试,文末附带实战项目,0经验入行so easy

很多银行招聘都要求有相关从业经验&#xff0c;这对于想跨入这个岗位的0经验从业同学可真犯了难 “你都不让我上岗&#xff0c;我哪来的工作经验呢&#xff1f;” 为了解决这个问题&#xff0c;小编整理了本篇文章&#xff0c;从3个方面介绍银行项目是如何进行测试的 银行的…

通过大模型(LLM)的多模态辩论的恶意表情包识别

Towards Explainable Harmful Meme Detection through Multimodal Debate between Large Language Models https://arxiv.org/abs/2401.13298https://arxiv.org/abs/2401.13298 1.概论 对于恶意表情包的识别,以往的研究方法没有能够深入表情包所隐含的复杂意义和文化背景,因…

Selenium的四种部署方式

关于selenium 的部署&#xff0c;我在网上找了很多&#xff0c;基本上都没有提到或是说的比较清晰的。当时我一直有个困惑&#xff1a;测试的脚本代码&#xff0c;是放在跟浏览器同一台机器上呢&#xff0c;还是放在Application Server上&#xff1f; 在官方开发文档中&#x…

高级IO|从封装epoll服务器到实现Reactor服务器|Part1

从封装epoll_server到实现reactor服务器(part1) 项目复习&#xff1a;从封装epoll_server到实现reactor服务器(part1)EPOLL模式服务器初步 select, poll, epoll的优缺点epoll的几个细节封装epoll_server基本框架先写好创建监听套接字和创建epoll模型可以Accept了吗&#xff1f…

改变 centos yum源 repo

centos 使用自带的 repo 源 速度慢&#xff0c;可以改为国内的&#xff0c;需要改两个地方 centos7.repo CentOS-Base.repo 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载对应版本repo文件…

CSS3:border-image

<!DOCTYPE html> <html><head><meta charset"utf-8"> </head><body><p>原始图片</p><img src"./images/border1.png" alt""><p>一、</p><p>border: 27px solid transp…

UniAD:以规划为导向的端到端自动驾驶

文章链接 这个文章是CVPR2023 Best Paper https://arxiv.org/pdf/2212.10156 提出背景 以往的自动驾驶多数是为不同的任务场景设计部署单独的模型&#xff0c;这样子组成的系统会很复杂如图a。 图b这是多任务共享一个主干&#xff0c;但还是要分离训练&#xff0c;而且不是…

基于JavaWEB的外卖点餐系统(含论文)

开发环境&#xff1a; Eclipse/MyEclipse、Tomcat7、Jdk1.7 数据库&#xff1a; MySQL 项目介绍&#xff1a; 计算机自诞生起就发展迅速发展&#xff0c;特别是进入了二十一世纪&#xff0c;伴随着互联网的普及&#xff0c;计算机应用进入高速发展阶段。为了顺应时代潮流的发…

ruoyi-nbcio-plus基于vue3的flowable为了适配文件上传改造VForm3的代码记录

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

在智慧城市的建设中智能车载监控录像机发挥什么作用

引言 随着科技的快速发展&#xff0c;智慧城市的概念逐渐深入人心。在智慧城市的建设中&#xff0c;智能车载监控录像机作为一种重要的技术工具&#xff0c;发挥着越来越重要的作用。本文将从多个方面探讨智能车载监控录像机在智慧城市建设中的作用。 一、智能车载监控录像机概…