跳到主要内容

简介

欢迎!

LangChain4j 的目标,是让在 Java 应用中集成 LLM 变得更简单。

具体来说:

  1. 统一 API: LLM 提供商(例如 OpenAI 或 Google Vertex AI)以及 embedding(向量)存储(例如 Pinecone 或 Milvus)都使用各自专有的 API。LangChain4j 提供统一 API,让你无需分别学习和实现每一家厂商的专用接口。 如果你想尝试不同的 LLM 或 embedding 存储,也可以轻松切换,而不必重写代码。 LangChain4j 目前支持 20+ 主流 LLM 提供商30+ embedding 存储
  2. 完整工具箱: 从 2023 年初开始,社区就在持续构建大量由 LLM 驱动的应用,并逐渐提炼出常见的抽象、模式和技术。LangChain4j 将这些经验打磨成一个开箱即用的工具包。 我们的工具箱覆盖从底层的提示词模板、聊天记忆管理、函数调用, 到高层的 Agents 与 RAG 等模式。 对于每一种抽象,我们都提供接口以及多种基于常见技术的现成实现。 无论你是在构建聊天机器人,还是在开发一条完整的数据摄取到检索链路的 RAG, LangChain4j 都能提供丰富的选择。
  3. 大量示例: 这些示例展示了如何开始构建各种由 LLM 驱动的应用, 既能提供灵感,也能帮助你快速起步。

LangChain4j 于 2023 年初在 ChatGPT 热潮中启动开发。 我们注意到,在众多 Python 和 JavaScript 的 LLM 库与框架之外,Java 生态中缺少相应的高质量方案, 于是我们决定补上这一块。

不是 LangChain(Python)的移植版

尽管名字相似,LangChain4j 并不是 LangChain(Python)的 Java 移植版,而是为 Java 原生设计的库。 它是一套符合 Java 习惯的库,从一开始就围绕 Java 的开发约定构建: 类型安全、POJO、注解、接口、依赖注入、流式 API,以及对 QuarkusSpring BootHelidonMicronaut 的一等集成支持。 它的 API、内部实现和发布节奏都独立于 Python LangChain 项目。

我们持续关注社区的新进展,并尽可能快速地引入新的技术和集成能力, 确保你能够跟上最新实践。 这个库仍在积极演进中。虽然部分特性还在持续完善, 但核心能力已经可用,你现在就可以开始构建由 LLM 驱动的应用。

为了便于集成,LangChain4j 还提供了对 QuarkusSpring BootHelidonMicronaut 的集成支持。

LangChain4j 特性

两个抽象层级

LangChain4j 提供两个抽象层级:

  • 低层。这个层级提供最大自由度,并允许你访问所有底层组件,例如 ChatModelUserMessageAiMessageEmbeddingStoreEmbedding 等。 这些都是构建 LLM 应用的“原语”。 你可以完全控制它们的组合方式,但也需要自己编写更多胶水代码。
  • 高层。这个层级通过 AI Services 这样的高级 API 与 LLM 交互, 从而隐藏底层复杂性和样板代码。 你依然可以灵活调整和细化行为,只是方式变成了声明式。

LangChain4j 库结构

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

  • langchain4j-core 模块:定义核心抽象(例如 ChatModelEmbeddingStore)及其 API。
  • 主模块 langchain4j:包含文档加载器、聊天记忆 实现,以及 AI Services 等高级功能。
  • 大量 langchain4j-{integration} 模块:为各类 LLM 提供商和 embedding 存储提供 LangChain4j 集成。 你可以单独使用 langchain4j-{integration} 模块;如果需要更多功能,再额外引入主 langchain4j 依赖即可。

LangChain4j 相关仓库

使用场景

你可能会问,为什么我会需要这些? 下面是一些例子:

  • 你想实现一个可访问自身数据、并按你期望方式运行的定制化 AI 聊天机器人:
    • 客服机器人,可以:
      • 礼貌地回答客户问题
      • 接收 / 修改 / 取消订单
    • 教学助手,可以:
      • 教授各种学科内容
      • 解释不清楚的部分
      • 评估用户的理解程度 / 知识掌握情况
  • 你想处理大量非结构化数据(文件、网页等),并从中提取结构化信息。 例如:
    • 从客户评价和客服聊天记录中提炼洞察
    • 从竞争对手网站中提取有价值的信息
    • 从求职者简历中提取关键信息
  • 你想生成信息,例如:
    • 为不同客户量身定制邮件
    • 为应用或网站生成内容:
      • 博客文章
      • 故事
  • 你想变换信息,例如:
    • 总结
    • 校对与改写
    • 翻译

社区集成

LangChain4j 在 community repo 中维护了一部分集成。 它们支持与主仓库集成相同的功能。 两者的区别仅在于,community 仓库中的 artifact 和 package 名称与主仓库不同(即 artifact 和 package 名称里带有 community 前缀)。 建立 community 仓库的目的,是将部分集成的维护工作拆分出去,从而让主仓库更易维护。