You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从langchain_openai导入OpenAIEmbeddings时遇PydanticUserError求助

问题:导入OpenAIEmbeddings时的Pydantic兼容错误

问题描述

我在尝试从langchain_openai导入OpenAIEmbeddings时遇到错误,使用的导入语句为:

from langchain_openai import OpenAIEmbeddings

运行代码后出现如下错误:

PydanticUserError: The `__modify_schema__` method is not supported in Pydantic v2. Use `__get_pydantic_json_schema__` instead in class `SecretStr`.

环境信息

  • 操作系统:Windows 11
  • Python版本:3.12.2

相关依赖版本

langchain                  0.2.5
langchain-anthropic        0.3.0
langchain-community        0.2.50
langchain-core             0.3.26
langchain-openai           0.2.12
langchain-text-splitters   0.2.1
langdetect                 1.0.9
langgraph                  0.2.53
langgraph-checkpoint       2.0.8
langgraph-sdk              0.1.40
langsmith                  0.1.147

pydantic                   2.9.2
pydantic_core              2.23.4

已尝试的解决方法

  • 版本调整:将pydantic降级至1.10.17、2.0、2.9.2,均未解决问题;
  • 检查依赖冲突:排查pydantic与langchain系列包的版本匹配问题,未发现明确冲突;
  • 查阅文档:了解到Pydantic v2不再支持__modify_schema__,需改用__get_pydantic_json_schema__,但不清楚如何在langchain_openai中适配。

疑问

  1. 这是langchain_openai与pydantic v2.x的已知兼容问题吗?
  2. 我是否需要进一步降级Pydantic或更换langchain_openai版本?
  3. 是否有特定补丁或临时解决方案可解决该问题?

解答

1. 是否为已知兼容问题?

是,这是langchain_openai与Pydantic v2.x之间的典型兼容问题。根源在于部分依赖包(包括langchain内部组件或其依赖的第三方包)仍在使用Pydantic v1的__modify_schema__方法,而Pydantic v2已移除该方法并替换为__get_pydantic_json_schema__。你的报错中SecretStr类触发了问题,说明该类的定义仍依赖旧的Pydantic v1语法。

2. 是否需要调整版本?

不需要盲目降级Pydantic,更推荐升级langchain-openai和langchain-core到最新兼容版本。你当前使用的langchain-openai 0.2.12和langchain-core 0.3.26存在未修复的Pydantic v2适配问题,建议升级到langchain-openai >= 0.3.0和langchain-core >= 0.4.0版本,这些版本已针对Pydantic v2做了全面适配。

如果升级后仍有异常,可以尝试将Pydantic固定在2.8.2版本,这个版本与多数langchain生态包的兼容性更稳定。

3. 临时解决方案

如果暂时无法升级依赖,可以尝试以下临时修复:

  • 手动替换SecretStr的兼容方法:在导入OpenAIEmbeddings之前,覆盖SecretStr的方法以适配Pydantic v2,示例代码:
from pydantic import SecretStr

def __get_pydantic_json_schema__(cls, schema, handler):
    schema = handler(schema)
    schema["format"] = "password"
    return schema

SecretStr.__get_pydantic_json_schema__ = classmethod(__get_pydantic_json_schema__)

# 之后再执行导入
from langchain_openai import OpenAIEmbeddings
  • 启用Pydantic v1兼容模式:在代码开头添加配置,强制Pydantic以兼容模式运行:
import pydantic
# 开启v1兼容模式
pydantic.config.ConfigDict.from_attributes = True

# 或者直接使用v1版本的SecretStr替换
from pydantic.v1 import SecretStr as V1SecretStr
# 若代码中涉及SecretStr的引用,可替换为V1SecretStr

内容的提问来源于stack exchange,提问作者Daniyal Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:10:09