目次
以前LangChainを利用しPickleファイルを操作している際に、「ValueError: The de-serialization relies loading a pickle file」というエラーに遭遇しました。
このエラーに対処したので備忘録を残します。
エラーの原因
このエラーは、Pickleファイルを安全でない方法で読み込もうとしたときに発生します。
PickleはPythonでオブジェクトをシリアライズ(保存可能な形式に変換)してファイルに保存したり、その逆の操作をするためのモジュールです。
しかし、信頼できないソースからのPickleファイルを読み込むことは、コードの実行や任意のコードの実行を引き起こす可能性があり、セキュリティリスクが伴います。
解決法
この問題の解決法は、allow_dangerous_deserialization
オプションをTrue
に設定することです。
これにより、Pickleファイルの読み込み時のセキュリティチェックが緩和されますが、信頼できるソースからのファイルのみこの方法を使うようにしてください。
例えば、私はLangChainのFAISSを使用していたのですが、ベクトルストアをロードする際に以下のように記述することでエラーを回避できます。
FAISS.load_local("vectorstore", embeddings, allow_dangerous_deserialization=True)
このコードは、vectorstore
という名前のベクトルストアを読み込み、embeddings
という埋め込みモデルを使用して、allow_dangerous_deserialization
をTrue
に設定することで、Pickleファイルの読み込みに関するセキュリティ制限を緩和します。
注意点
allow_dangerous_deserialization
をTrue
に設定することで、問題は解決しますが、安全でないデシリアライゼーションを許可することになるため、使用するファイルの出所が信頼できることを確認してください。
不明なソースからのファイルは、このオプションを使わずに開かないようにしましょう。
参考