引言
欢迎!
LangChain4j 的目标是简化将大语言模型(LLM)集成到 Java 应用程序中的过程。具体方式如下:
统一API:LLM提供商(如OpenAI或Google Vertex AI)和嵌入(向量)存储(如Pinecone或Milvus)使用专有的API。LangChain4j提供统一API,避免了学习和实现每个特定API的需要。为了试验不同的LLM或嵌入存储,您可以轻松地在它们之间切换,无需重写代码。LangChain4j目前支持20多个流行的LLM提供商和30多个嵌入存储。
全面的工具箱:自2023年初以来,社区一直在构建众多基于LLM的应用程序,识别出了常见的抽象、模式和技术。LangChain4j已将这些提炼成一个即用型包。我们的工具箱涵盖了从低层次的提示模板、聊天记忆管理和函数调用,到高层次模式如Agent和RAG(检索增强生成)的各种工具。对于每个抽象,我们都提供了一个接口以及基于常见技术的多种即用型实现。无论您是在构建聊天机器人,还是开发一个包含从数据摄入到检索的完整RAG流程,LangChain4j都提供了广泛的选择。
丰富的示例:这些示例展示了如何开始创建各种基于LLM的应用程序,提供灵感并使您能够快速开始构建。
LangChain4j的开发始于2023年初,正值ChatGPT热潮之际。我们注意到缺乏Java版的Python和JavaScript LLM库及框架,我们必须改变这一点!
并非LangChain(Python)的移植版
尽管名称相似,但LangChain4j并非LangChain(Python)的Java移植版------它是为Java构建的,而非移植过来的。它是一个地道的Java库,完全围绕Java惯例从头设计:类型安全、POJO、注解、接口、依赖注入、流畅API,并与Quarkus、Spring Boot、Helidon和Micronaut提供一流的集成。其API、内部结构和发布周期独立于Python LangChain项目。
我们积极关注社区发展,旨在快速整合新技术和集成,确保您紧跟最新动态。该库正在积极开发中。虽然某些功能仍在完善中,但核心功能已经就绪,您现在就可以开始构建基于LLM的应用程序!
为便于集成,LangChain4j还包含与Quarkus、Spring Boot、Helidon和Micronaut的集成。
LangChain4j功能特性
- 与20多个LLM提供商集成
- 与30多个嵌入(向量)存储集成
- 与20多个嵌入模型集成
- 与5个以上聊天记忆存储集成
- 与5个以上图像生成模型集成
- 与5个以上评分(重排序)模型集成
- 与1个审核模型(OpenAI)集成
- 支持文本和图像作为输入(多模态)
- AI服务(高阶LLM API)
- Agent和代理式AI
- 技能(Skills)
- 提示模板
- 实现了持久化和内存中的聊天记忆算法:消息窗口和令牌窗口
- LLM响应流式传输
- 针对常见Java类型和自定义POJO的输出解析器
- 工具(函数调用)
- 动态工具(执行动态生成的LLM代码)
- RAG(检索增强生成):
- 数据摄入:
- 从多种来源(文件系统、URL、GitHub、Azure Blob存储、Amazon S3等)导入各种类型的文档(TXT、PDF、DOC、PPT、XLS等)
- 使用多种分割算法将文档分割成更小的段落
- 文档和段落后处理
- 使用嵌入模型对段落进行嵌入
- 将嵌入存储到嵌入(向量)存储中
- 检索(简单和高级):
- 查询转换(扩展、压缩)
- 查询路由
- 从向量存储和/或任何自定义来源检索
- 重排序
- 倒数排名融合
- RAG流程中每个步骤的自定义
- 数据摄入:
- 文本分类
- 用于分词和估算令牌数量的工具
- Kotlin扩展:利用Kotlin的协程功能,实现聊天交互的异步非阻塞处理。
2个抽象层次
LangChain4j在两个抽象层次上运作:
- 低层次 。在这个层次上,您拥有最大的自由度,可以访问所有低层次组件,如
ChatModel、UserMessage、AiMessage、EmbeddingStore、Embedding等。这些是您基于LLM的应用程序的"原语"。您完全控制如何组合它们,但需要编写更多的"胶水"代码。 - 高层次。在这个层次上,您使用像AI服务这样的高级API与LLM交互,它为您隐藏了所有复杂性和样板代码。您仍然可以灵活地调整和微调行为,但这是以声明方式完成的。
LangChain4j库结构
LangChain4j采用模块化设计,包括:
langchain4j-core模块,定义了核心抽象(如ChatModel和EmbeddingStore)及其API。- 主
langchain4j模块,包含有用的工具,如文档加载器、聊天记忆实现,以及AI服务等高级功能。 - 大量的
langchain4j-{集成}模块,每个模块提供与各种LLM提供商和嵌入存储的集成。您可以独立使用langchain4j-{集成}模块。如需额外功能,只需导入主langchain4j依赖即可。
LangChain4j代码仓库
- 主仓库
- Micronaut集成
- Quarkus扩展
- Spring Boot集成
- 社区集成
- 示例
- 社区资源
应用场景
您可能会问,为什么我需要所有这些?以下是一些示例:
- 您想要实现一个定制的AI驱动聊天机器人,它可以访问您的数据并按照您期望的方式运行:
- 客户支持聊天机器人,能够:
- 礼貌地回答客户问题
- 处理下单/更改/取消订单
- 教育助手,能够:
- 教授各种学科
- 解释不清楚的部分
- 评估用户的理解/知识水平
- 客户支持聊天机器人,能够:
- 您想要处理大量非结构化数据(文件、网页等)并从中提取结构化信息。例如:
- 从客户评论和支持聊天记录中提取洞见
- 从竞争对手网站提取有趣信息
- 从求职者的简历中提取洞见
- 您想要生成信息,例如:
- 为每位客户量身定制的电子邮件
- 为您应用/网站生成内容:
- 博客文章
- 故事
- 您想要转换信息,例如:
- 总结
- 校对和重写
- 翻译
社区集成
LangChain4j在社区仓库中维护了一些集成。它们支持与主仓库中集成相同的功能。它们之间的唯一区别在于,社区集成的工件和包名与主仓库不同(即工件和包名中带有community前缀)。创建社区是为了分离某些集成的维护工作,从而简化主仓库的维护。