Skip to main content
Open on GitHub

概述

LangChain有哪些新功能?

在 0.1.x 版本的开发过程中,新增了以下功能:

LangChain将推出哪些新功能?

  • 我们一直在努力开发 langgraph。我们将在此基础上构建更多功能,并专注于使其成为代理架构的首选框架。
  • Vectorstores V2!我们将重新审视我们的向量存储抽象,以帮助提升易用性和可靠性。
  • 更好的文档和版本化文档!
  • 我们计划在7月至9月之间发布一个重大版本(0.3.0),以升级到对Pydantic 2的完整支持,并将停止对Pydantic 1的支持(包括来自Pydantic 2的v1命名空间的对象)。

发生了什么变化?

由于该领域迅速发展,LangChain 也随之快速演进。

本文档旨在从高层次上概述发生了哪些变化以及原因。

TLDR

截至 0.2.0 版本:

  • 此版本完成了我们从 0.1.0 版本开始的工作,移除了 langchainlangchain-community 的依赖。
  • langchain 包不再需要 langchain-community。相反,langchain-community 将现在依赖于 langchain-corelangchain
  • 仍依赖于 langchain 中已弃用导入的用户代码,只要安装了 langchain_community,将继续正常工作。这些导入将在 0.4.x 版本中开始引发错误。

截至 0.1.0 版本:

  • langchain 被拆分为以下组件包:langchain-corelangchainlangchain-communitylangchain-[partner],以提高 LangChain 代码在生产环境中的可用性。你可以在我们的 博客 上了解更多详情。

生态系统组织

在 0.1.0 版本发布时,LangChain 已发展成为一个包含众多集成和庞大社区的大型生态系统。

为了提高LangChain在生产环境中的可用性,我们将单个 langchain 包拆分为多个包。这使我们能够为LangChain生态系统建立良好的基础架构,并提高 langchain 在生产环境中的可用性。

生态系统高层次概览如下:

  • langchain-core: 包含涉及LangChain可运行对象的核心抽象、可观测性工具以及重要抽象的基础实现(例如,聊天模型)。
  • LangChain:包含使用langchain-core中定义的接口构建的通用代码。此包用于可以在不同接口实现之间良好泛化的代码。例如,create_tool_calling_agent适用于支持工具调用功能的聊天模型。
  • langchain-community:由社区维护的第三方集成。包含基于 langchain-core 中定义接口的集成。由 LangChain 社区维护。
  • 合作伙伴包(例如 langchain-[partner]): 合作伙伴包是专门用于特别流行的集成的包(例如 langchain-openailangchain-anthropic 等)。专用包通常能获得更好的可靠性和支持。
  • langgraph: 通过将步骤建模为图中的边和节点,使用LLM构建健壮且具有状态的多参与者应用程序。
  • langserve: 将 LangChain 链部署为 REST API。

在 0.1.0 版本中,langchain-community 被保留为 langchain 的必需依赖项。

这允许向量存储、聊天模型和其他集成的导入继续通过 langchain 工作, 而不是强制用户更新所有导入以使用 langchain-community

在 0.2.0 版本中,我们将移除 langchainlangchain-community 的依赖。从 0.1 版本开始我们就计划做这件事,因为我们认为这是正确的包架构。

旧的导入方式将继续正常工作,只要安装了 langchain-community。这些导入方式将在 0.4.0 版本中被移除。

要理解我们为什么认为打破 langchainlangchain-community 的依赖是最好的,我们应该先了解每个包的用途。

langchain 用于包含高级链和代理架构。这些逻辑应以抽象级别(如 ChatModelRetriever)来指定,而不应针对任何特定集成。这有两个主要优势:

  1. langchain 的重量级相对较低。以下是拆分后的所有必需依赖项列表

    python = ">=3.8.1,<4.0"
    langchain-core = "^0.2.0"
    langchain-text-splitters = ">=0.0.1,<0.1"
    langsmith = "^0.1.17"
    pydantic = ">=1,<3"
    SQLAlchemy = ">=1.4,<3"
    requests = "^2"
    PyYAML = ">=5.3"
    numpy = "^1"
    aiohttp = "^3.8.3"
    tenacity = "^8.1.0"
    jsonpatch = "^1.33"
  2. langchain 链/代理在很大程度上与集成无关,这使得您可以轻松尝试不同的集成方式,并且即使某个特定集成出现问题,也能确保您的代码具有前瞻性。

还有一个第三种较难察觉的好处,那就是,由于我们对集成方式不敏感,这迫使我们只寻找那些在各种集成中都能良好泛化的非常通用的抽象和架构。鉴于基础技术能力的普遍性,以及该领域发展的速度,拥有通用的架构是让你的应用程序具备未来适应性的良好方式。

langchain-community 旨在包含所有尚未被维护在单独的 langchain-{partner} 包中的特定集成组件。目前,这仍然是大多数集成和大量代码。这些代码主要由社区贡献,而 langchain 则主要由核心维护者编写。所有这些集成都使用可选依赖项和条件导入,这可以防止依赖项膨胀和冲突,但也意味着不会明确指定兼容的依赖项版本。鉴于 langchain-community 中集成的数量以及集成变化的速度,遵循语义化版本控制(semver)非常困难,我们目前还没有做到这一点。

也就是说,根据langchain-community来依赖langchain并没有明显的好处,反而有一些明显的缺点:langchain中的功能应该本身与集成无关,langchain-community无法正确地进行版本控制,而依赖langchain-community会增加langchain漏洞攻击面

有关该组织原因的更多背景信息,请参阅我们的博客: https://blog.langchain.dev/langchain-v0-1-0/