Pydantic 是一个用于数据验证和设置管理的广泛使用的 Python 库。随着 Pydantic v2 的发布(2023 年 6 月),出现了一些重大变化,因此开发者在使用 LangChain 时需要格外注意,因为 Pydantic 1 的生命周期在 2024 年 6 月结束。本文将详细讲解如何在不同的 Pydantic 版本中使用 LangChain,并提供一些实用的代码示例。
技术背景介绍
LangChain 是一个用于构建语言模型应用程序的框架。它允许使用 Pydantic 对数据进行验证。然而,随着 Pydantic v2 的发布,其内部结构发生了变化,导致了与 Pydantic v1 的不兼容性。LangChain 将在未来版本中逐渐迁移到 Pydantic 2,目前支持使用 Pydantic v1 和 v2 的对象。
核心原理解析
LangChain 内部目前仍然使用 Pydantic v1,通过 Pydantic 2 的 v1 命名空间实现兼容。这意味着在某些情况下,开发者必须明确指定使用 v1 的类和方法,以避免混合使用 v1 和 v2 对象导致的错误。
代码实现演示
示例 1: 使用 Pydantic v1 对象(适用于 langchain-core<0.2.23
)
这是在旧版本的 LangChain 中使用 Pydantic v1 对象的示例:
from langchain_openai import ChatOpenAI
from pydantic.v1 import BaseModel # 指定使用 v1 命名空间
class Person(BaseModel):
"""个人信息"""
name: str
# 创建并配置 ChatOpenAI 模型
model = ChatOpenAI()
model = model.with_structured_output(Person)
# 调用模型
model.invoke('Bob is a person.')
示例 2: 使用 Pydantic v2 对象(适用于 langchain-core>=0.2.23
)
在新版的 LangChain 中,可以使用 Pydantic v1 或 v2 对象:
from langchain_openai import ChatOpenAI
from pydantic import BaseModel
class Person(BaseModel):
"""个人信息"""
name: str
# 创建并配置 ChatOpenAI 模型
model = ChatOpenAI()
model = model.with_structured_output(Person)
# 调用模型
model.invoke('Bob is a person.')
应用场景分析
在使用 LangChain 构建工具时,确保使用正确版本的 Pydantic 对象至关重要。否则,可能会遇到不兼容问题,导致程序运行失败。对于需要生成 OpenAPI 文档的用户,请务必使用 Pydantic 1,因为 Pydantic 2 尚不支持这项功能。
实践建议
- 如果您正使用较旧版本的 LangChain,建议继续使用 Pydantic v1 对象,直到完全支持 Pydantic v2 为止。
- 在子类化 LangChain 模型或工具时,应使用 Pydantic v1 的原语,避免与 v2 混用。
- 如果需要 OpenAPI 文档,建议暂时使用 Pydantic v1 或手动创建 API 路由。
如果遇到问题欢迎在评论区交流。
—END—