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!"); // POSITIVEboolean 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.mzph.cn/diannao/2108.shtml

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

相关文章

jdk版本升级,导致项目编译报错:java: 程序包javax.annotation不存在

1.问题异常&#xff1a; java: 程序包javax.annotation不存在。 2.发生背景&#xff1a; 项目使用jdk版本做了升级&#xff0c;升级到了jdk19。结果切换了以后项目编译就报错了&#xff0c;报错信息就是上述的&#xff1a;java: 程序包javax.annotation不存在。 3.报错原因&…

数据库服务类--Redis--未授权访问终端Getshell

免责声明:本文仅做技术交流与学习. 目录 前提条件: windows上开启redis服务: Linux上创建&开启redis服务: 操作: 1-连接靶机redis 2-写入webshell 3-访问后门 redis--->webshell Redis未授权访问漏洞复现与利用 - 知乎 (zhihu.com) 前提条件: 端口开放(6379) 目录…

vscode自动生成项目目录结构

目录结构如下&#xff1a; 生成步骤如下&#xff1a; vscode安装插件&#xff0c;project-tree安装之后按ctrlshiftp&#xff0c;并输入Project Tree回车点击要生成目录的项目&#xff0c;回车将项目目录生成并存储到README.md中

vue3中web前端JS动画案例(四)侧边栏横幅效果-右下角广告-淘宝案例

myJsAnimation.js, 这里使用了上次封装的动画方法&#xff0c;并进行了改造 /*** 动画的函数* dom 当前对象* JSON 传入元素对象的属性 {"width": 300, "opacity": 50}* * -------------------- 多物体运动&#xff0c;同时运动 ---传入JSON-------------*…

Nodejs 第六十七章(OpenAI)

OpenAI OpenAI是一个人工智能研究实验室和技术公司&#xff0c;致力于推动人工智能的发展和应用 OpenAI最著名的项目之一是GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型&#xff0c;其中包括了GPT-3&#xff0c;它是迄今为止最大规模的语言模型之…

Python | Leetcode Python题解之第43题字符串相乘

题目&#xff1a; 题解&#xff1a; class Solution:def multiply(self, num1: str, num2: str) -> str:if num1 "0" or num2 "0":return "0"m, n len(num1), len(num2)ansArr [0] * (m n)for i in range(m - 1, -1, -1):x int(num1[i…

BI建设案例:FineBI大数据分析平台助力工程机械行业降本增效

工程机械行业作为国民经济的重要支柱&#xff0c;产品多样化、应用广泛&#xff0c;市场集中度高。其上游涉及原材料和核心零部件&#xff0c;下游则与房地产、基建工程和采矿等行业紧密相连。 如今&#xff0c;中国已崛起为全球工程机械制造大国&#xff0c;各类机械产品产量…

Macs Fan Control Pro for Mac:全面优化Mac风扇控制软件

Macs Fan Control Pro for Mac是一款专为苹果电脑用户设计的风扇控制软件&#xff0c;旨在通过精确的风扇速度调节&#xff0c;全面优化Mac的散热性能&#xff0c;确保系统始终运行在最佳状态。 Macs Fan Control Pro for Mac中文版下载 该软件具备实时监控功能&#xff0c;能够…

【CSS】grid 布局一行自动填充,每行最大限定px

<div class"model-plat-content"><div class"mode-card" v-for"i in 30"></div></div>.model-plat-content {display: grid;// 解释&#xff1a; repeat(auto-fit, minmax(250px, 1fr)) 自动填充&#xff0c;每行最大25…

ubuntu apt update:The repository ‘xxx‘ is not signed.报错解决办法(未解决)

文章目录 报错原因及解决办法 报错 rootjax:~# apt update Get:1 file:/var/cuda-repo-l4t-11-4-local InRelease [1575 B] Get:2 file:/var/cudnn-local-repo-ubuntu2004-8.4.1.50 InRelease [1575 B] Get:1 file:/var/cuda-repo-l4t-11-4-local InRelease [1575 B] Get:2 …

通过创新的MoE架构插件缓解大型语言模型的世界知识遗忘问题

在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;的微调是提升模型在特定任务上性能的关键步骤。然而&#xff0c;一个挑战在于&#xff0c;当引入大量微调数据时&#xff0c;模型可能会遗忘其在预训练阶段学到的世界知识&#xff0c;这被称为“世界知识遗忘…

vue 脚手架创建

脚手架创建 介绍 脚手架是什么呢&#xff0c;就是vue自动创建脚手架的项目模板&#xff0c;用于搭建项目的整体骨架&#xff0c;就比如后端开发时&#xff0c;咱们可以创建一个空项目&#xff0c;一步步创建为mvc项目&#xff0c;但是vs封装了mvc的框架&#xff0c;我们可以直…

【Python-Pygame】

Python-Pygame ■ Pygame-简介■ Pygame-安装■ Pygame-Rect区域位置■ Pygame-Draw绘图函数■ Pygame-■ Pygame-■ Pygame-■ Pygame-事件监听■ Pygame-Event事件模块■ Pygame-游戏循环■ Pygame-Display显示模块■ Pygame-Time时间控制■ Pygame-Font文本和字体■ Pygame-…

计算机网络-IS-IS链路状态数据库同步

在建立IS-IS邻接关系之后&#xff0c;路由器开始发送LSP报文进行链路状态数据库进行同步。 一、链路状态数据库同步 LSP&#xff08; Link State PDU&#xff0c;链路状态报文&#xff09; 用于交换链路状态信息。LSP分为两种&#xff1a;Level–1 LSP和Level–2 LSP。Level–1…

一文学会Amazon transit GateWay

这是一个中转网关&#xff0c;使用时候需要在需要打通的VPC内创建一个挂载点&#xff0c;TGW会管理一张路由表来决定流量的转发到对应的挂载点上。本质上是EC2的请求路由到TGW&#xff0c;然后在查询TGW的路由表来再来决定下一跳&#xff0c;所以需要同时修改VPC 内子网的路由表…

力扣刷题学习python(跟随视频学着刷)

使用入门 视频链接 【手把手带你刷Leetcode力扣&#xff5c;各个击破数据结构和算法&#xff5c;大厂面试必备技能【已完结】-哔哩哔哩】 https://b23.tv/vIcRT61 时空复杂度 时间&#xff1a; 空间&#xff1a;主要有O(1)和O(n)两种 数组 特点&#xff1a;适合读多写少 操作…

阿赵UE学习笔记——29、Niagara制作火焰效果

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎&#xff0c;之前简单介绍了Niagara粒子系统&#xff0c;这次用Niagara系统做一个火焰的效果。 一、创建发射器 和之前介绍的一样&#xff0c;先创建一个空白的发射器&#xff1a; 我把这个发射器命名为…

货代是什么?如何选择靠谱的FBA头程货代公司?

在全球化的浪潮中&#xff0c;跨境电商业务如雨后春笋般蓬勃发展&#xff0c;货代公司作为连接卖家与市场的关键桥梁&#xff0c;其重要性也愈发凸显。货代公司不仅提供从起始地到目的地的货物运输服务&#xff0c;还在复杂的物流流程中发挥着不可或缺的作用。特别是在亚马逊等…

报错The chromedriver version cannot be discovered以及下载chromedriver.exe和查看其版本的命令

python3.8.10&#xff0c;win10。 谷歌浏览器版本&#xff08;我写代码的时候还是123.0.x.x&#xff0c;没几天就自动更新到124.0.x.x了&#xff09;&#xff1a; 在使用selenium的时候&#xff0c;出现报错&#xff0c;The chromedriver version cannot be discovered。 &am…

面试宝典(1)——数据库篇(MySQL)

面试宝典&#xff08;1&#xff09;——数据库篇&#xff08;MySQL&#xff09; 1.什么是索引&#xff1f; 索引是一种用于加快数据库查询速度的数据结构。 索引可以帮助数据库快速定位到数据库表中特定列的记录&#xff0c;从而加快数据检索和查询的速度。 通过在表的列上…