はじめに
Python 3.14 環境で LangChain を使用してスクリプトを実行した際、以下のような UserWarning が発生しました。
/Users/.../site-packages/langchain_core/_api/deprecation.py:26: UserWarning: Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater.
from pydantic.v1.fields import FieldInfo as FieldInfoV1
この警告をコード側で抑制(非表示に)する方法を共有します。
実行環境
今回この現象を確認した環境は以下の通りです。
- OS: macOS (darwin)
- Python: 3.14.2
-
主要ライブラリ:
-
langchain: 1.2.3 系 (内部でlangchain-core等を使用) -
pydantic: 2.12.5 (V2を使用)
-
原因とコミュニティの議論
LangChain は現在 Pydantic V2 への移行を完了していますが、内部(特に langchain-core)に過去のバージョンとの互換性のためのコードが残っており、それが Python 3.14 と衝突しています。
この問題は LangChain のリポジトリでも Issue #33926 として報告されています。
-
問題の核心:
langchain-coreがモジュールレベルでpydantic.v1をインポートしているため、ユーザーが V1 機能を全く使っていなくても、ライブラリをロードするだけで警告が出てしまいます。 -
今後の展望: コメントによれば、Pydantic 2.13 以降で
pydantic.v1名前空間への修正がバックポートされる予定であり、将来的には解消される見込みです。しかし、それまでの間は実行するたびにこの警告がログを埋め尽くしてしまいます。
対処法:warnings モジュールによる抑制
将来のライブラリ更新を待つ間、以下のコードで警告を抑制できます。langchain 関連の import より前に記述してください。
import warnings
# "Pydantic V1 functionality" という文字列を含む UserWarning を無視する
# メッセージ内容でフィルタリングすることで、どのモジュール経由の発生でも捕捉可能です
warnings.filterwarnings("ignore", message=".*Pydantic V1 functionality.*")
# フィルター設定後に LangChain 関連を import する
from langchain_ollama import ChatOllama
# ...
なぜ module="pydantic" ではないのか?
当初 module="pydantic" でのフィルタリングを試みましたが、警告のスタックトレースを見ると発生元が langchain_core/_api/deprecation.py となっており、モジュール名指定ではうまく捕捉できないケースがありました。message による正規表現マッチングの方が確実です。
まとめ
この警告は、最新の Python 環境とライブラリの互換レイヤーが過渡期にあるために発生するものです。
Issue でも議論されている通り、不要な警告は開発者の集中を削ぐ「警告疲れ」の原因になります。現時点で動作に問題がないことを確認できているのであれば、上記の方法で一旦抑制し、将来の pydantic や langchain のアップデートを待つのが現実的な対応と言えそうです。