一、概述
LangChain4j于2023年初在ChatGPT的炒作中开始开发。我们注意到,与众多的Python和JavaScript LLM库和框架相比,缺少Java对应项,我们必须修复它!尽管“LangChain”是以我们的名义命名的,但该项目融合了LangChaint、Haystack、LlamaIndex和更广泛的社区的想法和概念,并加入了我们自己的创新。
LangChain4j的目标是简化LLM到Java应用程序的集成:
- 统一API:LLM提供商(如OpenAI或Google Vertex AI)和嵌入(向量)存储(如Pinecone或Milvus)使用专有API。LangChain4j提供了统一的API,以避免学习和实现每个API的特定API。要尝试不同的LLM或嵌入存储,您可以轻松地在它们之间切换,而不需要重写代码。LangChain4j目前支持15多个流行的LLM提供商和20多个嵌入商店。
- 综合工具箱:自2023年初以来,社区一直在构建许多基于LLM的应用程序,识别常见的抽象、模式和技术。LangChain4j将这些改进为现成的软件包。我们的工具箱包括从低级提示模板、聊天内存管理和函数调用到高级模式(如AI Services和RAG)的各种工具。对于每个抽象,我们提供了一个接口以及基于通用技术的多个现成实现。无论是构建聊天机器人还是开发具有从数据接收到检索的完整管道的RAG,LangChain4j都提供了各种各样的选项。
- 众多示例:这些示例展示了如何开始创建各种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