LangChainでPickleファイルの読み込みエラー「ValueError: The de-serialization relies loading a pickle file」の解決法

公開日:
目次

以前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_deserializationTrueに設定することで、Pickleファイルの読み込みに関するセキュリティ制限を緩和します。

注意点

allow_dangerous_deserializationTrueに設定することで、問題は解決しますが、安全でないデシリアライゼーションを許可することになるため、使用するファイルの出所が信頼できることを確認してください。

不明なソースからのファイルは、このオプションを使わずに開かないようにしましょう。

参考