报错 | pydantic.v1.error_wrappers.ValidationError ... subclass of BaseModel expected


01 问题情景

最近在做Langchain的开发,可能是因为我更新了依赖库的版本,在执行下面这部分代码的时候出现了该异常:

# 出现该异常的代码(仅保留核心逻辑)
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel


class Data(BaseModel):
	...

def my_func(...):
	...
	# 创建了一个输出解析器 此行是报错的位置
    parser = PydanticOutputParser(pydantic_object=Data)
    ...

02 分析问题

报错的内容是:

...
pydantic.v1.error_wrappers.ValidationError: 1 validation error for PydanticOutputParser
pydantic_object
subclass of BaseModel expected (type=type_error.subclass; expected_class=BaseModel)

该信息提示,预期传入的是BaseModel类的子类,说我没有传对类型。
可是我传递的Data分明是继承了BaseModel类的子类,不应该呀。

03 阅读源码

于是我开始去源码中寻找答案:

# 源码节选
from langchain_core.pydantic_v1 import BaseModel

class PydanticOutputParser(JsonOutputParser):
    """Parse an output using a pydantic model."""

    pydantic_object: Type[BaseModel]
	...

Type[BaseModel]来看,我的传递方式确实没有写错,问题出在源码中导包的部分
源码写法:from langchain_core.pydantic_v1 import BaseModel
我的写法:from pydantic import BaseModel

恍然大悟!

原来是版本不兼容惹得祸,为了证实这一点,我在命令行使用pip list命令查看pydantic的版本,发现版本是2.x.x,而源码中导入的是1.x.x,版本是不兼容的!

04 解决方案

4.1 方案1 - 指定版本安装

这也是网上很多人给出的解决方案,即在requirements.txt中指定pydantic==1.10.3
但我并不太推荐,因为我的项目其他地方也用到了pydantic,那边依赖的是2.x的版本,这一换就全换了。
而且使用老旧的版本心里总觉得有点不舒服。

4.2 (通用)方案2 - 指定v1版本

在不替换原有的2.x版本的情况下 ,pydantic为我们提供了兼容的选项,只需要在我们自己的项目中采用如下方式导包即可:

# 原来的导包方式
from pydantic import BaseModel

# 改成下面这种导包方式
from pydantic.v1 import BaseModel

4.3 (推荐)方案3 - 参考源码

在我的项目中,完全可以看源码中的导包方式,我只需要复制粘贴就可以了,这种方式最为稳妥。

# 将我的导包方式改成和源码一致
from langchain_core.pydantic_v1 import BaseModel

(完)

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ValidationErrorPydantic 模块中的一种异常,表示配置数据校验失败。其中 "1 validation error for Config" 表示有 1 个错误发生在 Config 类上。您可以查看详细的错误消息来了解具体原因。 ### 回答2: `pydantic.error_wrappers.ValidationError: 1 validation error for Config` 是 Pydantic 库中的错误提醒信息,表示在配置文件 Config 中发生了一个验证错误。 Pydantic 是一个数据验证和解析库,可以用来验证和解析 Python 对象。当使用 Pydantic 解析一个对象时,它会根据预定义的模型定义进行验证,并在遇到错误时抛出 `ValidationError`。 在这个错误信息中,"1 validation error for Config" 表示在 Config 配置中发现了一个验证错误。这意味着 Config 对象在验证过程中与其模型的定义不匹配,导致验证失败。 根据实际情况,你需要查看完整的错误信息以了解具体的验证错误内容和位置。通常,错误信息会给出相关字段、错误类型和错误描述等信息,帮助你定位并修复验证错误。 ### 回答3: pydantic.error_wrappers.ValidationError是一个在使用Pydantic库时可能遇到的错误类型。它表示在验证Pydantic模型配置时发生了某种错误。具体的错误消息通常会给出错误的数量,以及关于错误的更多详细信息。在这里,我们将回答一个关于"Config"的错误消息。 "Config"是Pydantic模型的一个内部类,它用于指定模型的配置选项。在Pydantic模型类中,"Config"类可以选择性地定义,以更改模型的行为和属性。 当遇到"pydantic.error_wrappers.ValidationError: 1 validation error for Config"的错误消息时,表示"Config"内部类的定义中出现了一个验证错误。可能有以下几种原因导致这个错误: 1. 类中定义了不支持的配置项:验证错误可能是因为模型类的"Config"内部类中定义了Pydantic不识别的配置项。请确保在定义"Config"类时只使用Pydantic所支持的配置选项。 2. 配置项的值不正确:验证错误也可能是因为在"Config"内部类中的某个配置项的值不符合预期。请仔细检查所有配置项的值,并确保它们是正确的。 3. "Config"类的定义位置不正确:验证错误也可能是因为"Config"类没有被正确定义在模型类内部。请确保"Config"类定义在正确的位置,即在模型类内部作为一个单独的内部类。 总之,要解决这个错误,可以先查看错误消息中提供的详细信息,尤其是相关的配置项和错误的数量。然后,检查模型类的"Config"内部类定义,并确保它满足Pydantic库的要求和期望。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿林仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值