概览
LangChain 有哪些新功能?
在 0.1.x 开发过程中加入了以下功能:
- 通过 Event Streaming API 提供更好的流式支持。
- 标准化的工具调用支持
- 用于 结 构化输出 的标准化接口
- @chain 装饰器,更轻松地创建 RunnableLambdas
- https://python.langchain.com/docs/expression_language/how_to/inspect/
- 在 Python 中,为许多核心抽象提供了更好的异步支持(感谢 @cbornet!!)
- 在
AIMessage中包含响应元数据,以便轻松访问底层模型的原始输出 - 用于可视化您的 runnables 或 您的 langgraph 应用 的工具
- 大部分提供商之间的聊天消息历史记录的互操作性
- Python 中超过 20 个合作伙伴包,涵盖热门集成
LangChain 未来展望
- 我们一直在努力开发 langgraph。我们将在此基础上构建更多功能,并致力于将其打造成代理架构的首选框架。
- Vectorstores V2!我们将重新审视我们的 vectorstores 抽象,以帮助提高可用性和可靠性。
- 更好的文档和版本化文档!
- 我们计划发布一个破坏性版本(0.3.0),时间在 7 月至 9 月之间,以升级到完全支持 Pydantic 2,并将停止支持 Pydantic 1(包括源自 Pydantic 2
v1命名空间的 Pydantic 1 对象)。
有哪些变化?
由于该领域的快速发展,LangChain 也经历了快速的演变。
本文档旨在从高层次概述变化的原因和内容。
概要
截至 0.2.0 版本:
- 此版本完成了我们从 0.1.0 版本开始的工作,移除了
langchain对langchain-community的依赖。 langchain包不再需要langchain-community。现在langchain-community将依赖于langchain-core和langchain。- 仍然依赖于
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 的必需依赖项。
这使得通过 langchain 继续使用 vectorstores、聊天模型和其他集成,而不是强制用户更新所有导入到 langchain-community。
对于 0.2.0 版本,我们正在移除 langchain 对 langchain-community 的依赖。自 0.1 版本发布以来,我们一直在计划这样做,因为我们相信这是正确的包架构。
只要安装了 langchain-community,旧的导入将继续工作。这些导入将在 0.4.0 版本中被移除。
要理解为什么我们认为打破 langchain 对 langchain-community 的依赖是最好的,我们应该了解每个包的预期用途。
langchain 旨在包含高级链和代理架构。这些逻辑应在 ChatModel 和 Retriever 等抽象级别进行指定,并且不应特定于任何一个集成。这有两个主要优点:
-
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" -
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/