如何在不同Pydantic版本中使用LangChain?

124 阅读2分钟

引言

在软件开发中,使用不同版本的依赖库是常见的挑战之一。随着Pydantic v2的发布,LangChain也在其API中做出了一些调整,以支持Pydantic v2的对象。对于开发者来说,理解如何在Pydantic v1和v2之间切换,以及如何在LangChain中使用这些不同版本,是至关重要的。本篇文章将深入探讨如何在LangChain中使用不同的Pydantic版本,提供实用的代码示例,并讨论潜在的问题和解决方案。

主要内容

1. 选择合适的Pydantic版本

LangChain自>=0.0.267版本以来,支持用户安装Pydantic v1或v2。然而,LangChain内部继续使用Pydantic v1,通过Pydantic 2的v1命名空间进行操作。因此,在LangChain 0.3正式发布之前,建议用户继续使用Pydantic v1对象。

2. LangChain API兼容性

大部分LangChain API已经更新,允许使用Pydantic v1或v2对象。特别是在工具使用方面,确保在合适的版本下迁移到Pydantic v2。

支持的API和包版本

  • BaseChatModel.bind_tools: 需要langchain-core>=0.2.23
  • Tool.from_function: 需要langchain-core>=0.2.23
  • 兼容的包包括:langchain-openai>=0.1.19langchain-fireworks>=0.1.5

3. 扩展LangChain模型

由于LangChain内部使用Pydantic v1,对LangChain模型进行子类化时,需要使用Pydantic v1对象。如果混用v1和v2对象,可能会导致错误。

代码示例

下面是一个使用LangChain API的代码示例,展示如何使用Pydantic v1对象:

from langchain_openai import ChatOpenAI
from pydantic.v1 import BaseModel  # 使用v1命名空间

class Person(BaseModel):
    """Personal information"""
    name: str

model = ChatOpenAI()
model = model.with_structured_output(Person)

model.invoke('Bob is a person.')

常见问题和解决方案

1. 混用Pydantic版本

如果在同一个项目中混用Pydantic v1和v2对象,可能会遇到难以调试的错误。解决方案是确保在同一个项目上下文中一致地使用一个版本。

2. 生成OpenAPI文档

LangServe不能在Pydantic v2下生成OpenAPI文档。如果需要此功能,可以降级到Pydantic v1或使用其他API处理器手动创建API路由。

总结和进一步学习资源

本文介绍了如何在不同的Pydantic版本中使用LangChain,提供了代码示例和解决方案。进一步学习可以参考以下资源:

参考资料

  1. Pydantic v2发布博客
  2. LangChain官方文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---