Skip to main content
在 GitHub 上打开

概述

LangChain 有什么新变化

在 0.1.x 的开发过程中添加了以下功能:

LangChain 将推出什么功能?

  • 我们一直在努力开发 langgraph。我们将在它的基础上构建更多功能,并专注于使其成为代理架构的首选框架。
  • 矢量存储 V2!我们将重新审视我们的 vectorstores 抽象,以帮助提高可用性和可靠性。
  • 更好的文档和版本控制文档!
  • 我们计划在 7 月至 9 月之间的某个时候发布一个突破性版本(0.3.0),以升级到对 Pydantic 2 的完全支持,并将放弃对 Pydantic 1 的支持(包括源自 Pydantic 1 的v1命名空间)。

发生了什么变化?

由于该领域的快速发展,LangChain 也得到了快速发展。

本文档用于概括地概述已更改的内容和原因。

顶级域名

从 0.2.0 开始:

  • 此版本通过删除langchainlangchain-community.
  • langchainpackage 不再需要langchain-community.相反langchain-community现在将依赖于langchain-corelangchain.
  • 仍然依赖于已弃用的 imports 的用户代码langchain只要langchain_community已安装。这些导入将在版本 0.4.x 中开始引发错误。

从 0.1.0 开始:

  • langchain被拆分为以下组件包:langchain-core,langchain,langchain-community,langchain-[partner]提高 langchain 代码在生产设置中的可用性。您可以在我们的博客上阅读更多相关信息。

生态系统组织

到 0.1.0 版本发布时,LangChain 已经发展成为一个拥有许多集成和大型社区的大型生态系统。

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

以下是生态系统的高级细分:

  • langchain-core:包含涉及 LangChain Runnables、可观察性工具以及重要抽象(例如聊天模型)的基本实现的核心抽象。
  • langchain:包含使用 中定义的接口构建的通用代码langchain-core.此包适用于在特定接口的不同实现中很好地通用的代码。例如create_tool_calling_agent适用于支持工具调用功能的聊天模型。
  • langchain-community:社区维护的第三方集成。包含基于 langchain-core 中定义的接口的集成。由 LangChain 社区维护。
  • 合作伙伴包(例如,langchain-[partner]):合作伙伴包是专用于特别流行的集成(例如langchain-openai,langchain-anthropic等)。专用软件包通常受益于更好的可靠性和支持。
  • langgraph:通过将步骤建模为图形中的边和节点,使用 LLM 构建健壮且有状态的多角色应用程序。
  • langserve:将 LangChain 链部署为 REST API。

在 0.1.0 版本中,langchain-community根据需要保留了依赖项langchain.

这允许 vectorstore、聊天模型和其他集成的导入继续进行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根据langchain-community以及一些明显的缺点:功能langchain无论如何都应该与集成无关,langchain-community无法正确进行版本控制,并且依赖于langchain-community增加langchain.

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