这个坑值得记一笔。项目里锁着 pydantic 1.10,把 langchain 升到 0.3 后导入就报 PydanticUserError,提示 BaseSettings 已经搬到 pydantic-settings 包,自定义 Tool 的字段校验同时全部失效。

刚开始盯着「validator 装饰器改名成 field_validator 且签名变了」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。0.3 只支持 pydantic v2,v1 的写法直接不被识别;BaseSettings 被拆成独立包 pydantic-settings;导入路径从 langchain.chat_models 换到 langchain_openai。

先看当前版本与谁在拉旧依赖

pip show pydantic

装 v2 与拆分出去的 settings 包

pip install -U "pydantic>=2.7" pydantic-settings

然后把校验器改成新装饰器写法

python -c "from pydantic import field_validator;print(field_validator)"

冒烟一次确认链能起

python -c "from langchain_openai import ChatOpenAI;print(ChatOpenAI(model='gpt-4o-mini'))"

这次没动代码,只在配置和运行环境上找原因。

隔了一天再看,现象没变,说明不是偶发。

那几天正好在做别的变更,先把时间线对齐才敢动手。

怎么算真的好了,看的是同一批现象。导入不再出现 PydanticUserError,工具参数校验仍能拦住非法输入,冒烟链返回一条正常回答。

补一句。有些三方包还没适配 v2,会顺手把 pydantic 拉回 v1,装完先 pip check 再启动服务。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189