LangChain的发展历程
LangChain有哪些新功能?
在0.1.x版本的开发过程中,添加了以下功能:
通过事件流API提供更好的流媒体支持。
@chain装饰器,更容易创建RunnableLambdas
https://python.langchain.com/docs/expression_language/how_to/inspect/
在Python中,对许多核心抽象提供更好的异步支持(感谢@cbornet!!)
在
AIMessage
中包含响应元数据,以便轻松访问底层模型的原始输出可视化工具,用于查看你的可运行对象或你的langgraph应用
大多数提供商之间的聊天消息历史互操作性
为流行的集成提供了20多个合作伙伴包的Python支持
LangChain即将推出哪些功能?
我们一直在努力开发langgraph。我们将在其基础上构建更多功能,并致力于使其成为代理架构的首选框架。
Vectorstores V2!我们将重新审视我们的向量存储抽象,以提高可用性和可靠性。
更好的文档和版本化文档!
我们计划在7月至9月之间发布一个重大版本(0.3.0),以升级到完全支持Pydantic 2,并停止支持Pydantic 1(包括源自Pydantic 2的
v1
命名空间的对象)。
有什么变化?
由于领域的快速发展,LangChain也在快速演变。
本文档旨在概述高层次上发生了什么变化以及为什么发生了变化。
简要总结
截至0.2.0版本:
该版本完成了我们在0.1.0版本中开始的工作,将
langchain
对langchain-community
的依赖关系移除。langchain
包不再需要langchain-community
。相反,langchain-community
现在将依赖于langchain-core
和langchain
。仍依赖于
langchain
中已弃用导入的用户代码将在0.4.x版本中开始引发错误,只要安装了langchain_community
,这些导入将继续工作。
截至0.1.0版本:
langchain
被拆分为以下组件包:langchain-core
、langchain
、langchain-community
、langchain-[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-openai
、langchain-anthropic
等)。这些专用包通常具有更好的可靠性和支持。langgraph
:通过将步骤建模为图中的边缘和节点,使用LLMs构建强大且有状态的多角色应用程序。langserve
:将LangChain链部署为REST API。
在0.1.0版本中,保留了langchain-community
作为langchain
的依赖项。
这使得可以通过langchain
继续导入向量存储、聊天模型和其他集成。
与其强制用户更新所有导入到 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
中的集成数量以及集成变化的速度,很难遵循语义版本控制,而我们目前并没有这样做。
总之,langchain
依赖于 langchain-community
并没有太大的好处,但有一些明显的缺点:langchain
中的功能本来就应该与集成无关,langchain-community
无法得到适当的版本控制,并且依赖于 langchain-community
会增加 langchain
的漏洞面。
有关组织原因的更多背景信息,请参阅我们的博客:https://blog.langchain.dev/langchain-v0-1-0/