跳到主要内容
Open on GitHub

概述

LangChain 的新功能?

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

LangChain 的未来展望?

  • 我们一直在努力开发 langgraph。我们将在此基础上构建更多功能,并专注于使其成为 agent 架构的首选框架。
  • 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_community,仍然依赖于 langchain 中已弃用导入的用户代码将继续工作。这些导入将在 0.4.x 版本中开始引发错误。

截至 0.1.0

  • langchain 被拆分为以下组件包:langchain-corelangchainlangchain-communitylangchain-[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-openailangchain-anthropic 等)。专用包通常受益于更好的可靠性和支持。
  • langgraph:通过将步骤建模为图中的边和节点,使用 LLM 构建健壮且有状态的多 actor 应用程序。
  • 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 旨在包含高级链和 agent 架构。这些逻辑应在 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 链/agent 在很大程度上与集成无关,这使得尝试不同的集成变得容易,并且在某个特定集成出现问题时可以使您的代码面向未来。

还有第三个不太明显的优势,即与集成无关迫使我们只找到那些非常通用的抽象和架构,这些抽象和架构在集成之间很好地通用。鉴于基础技术的通用能力以及该领域的发展速度,拥有通用架构是使您的应用程序面向未来的好方法。

langchain-community 旨在拥有所有集成特定的组件,这些组件尚未在单独的 langchain-{partner} 包中维护。今天,这仍然是大多数集成和大量代码。此代码主要由社区贡献,而 langchain 主要由核心维护者编写。所有这些集成都使用可选依赖项和条件导入,这可以防止依赖项膨胀和冲突,但也意味着兼容的依赖项版本不是显式声明的。鉴于 langchain-community 中集成的数量以及集成更改的速度,很难遵循 semver 版本控制,而且我们目前也没有这样做。

所有这些都表明,langchain 依赖于 langchain-community 没有很大的好处,并且存在一些明显的缺点:langchain 中的功能无论如何都应该是与集成无关的,langchain-community 无法正确版本控制,并且依赖于 langchain-community 会增加 langchain漏洞面

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


此页面是否对您有帮助?