问题出现得很突然,日志倒是留得挺全。项目里还是 pydantic 1.10,LangChain 升到 0.3 后用 bind_tools 绑定一个 BaseModel 工具,启动就报 TypeError,提示 model_json_schema 不存在,同一个类在 0.2 上能跑。
刚开始盯着「依赖里另一个包把 v2 降回了 v1」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。LangChain 0.3 只走 pydantic v2 的 model_json_schema。还有一种是运行环境的 pydantic 仍是 1.x。
少数情况下是工具参数用 dataclass 与 BaseModel 混写。
第一件事是确认运行时的 pydantic 版本
python -c "import pydantic;print(pydantic.VERSION)"
随后查谁把 pydantic 钉在 1.x
pip show pydantic; pipdeptree | grep -i pydantic
升级到 v2 并补上兼容依赖
pip install -U "pydantic>=2.7" "pydantic-settings>=2"
剩下的就是用 v2 写法重跑工具绑定
python check_tools.py --pydantic v2
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
改完先别撤,确认这几项。绑定成功,模型返回的参数能被 BaseModel 校验,启动日志里不再出现 model_json_schema 缺失。
这里还有个坑。兼容层能让旧代码先跑起来,但 LangChain 0.3 的新接口只认 v2,迁移排期还是要留出来。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
