銀河鉄道

LangChainのFAISS.load_localとは|検索インデックスを再利用する方法

サムネイル
[LangChain]FAISS.load_local
FAISSという
関数

FAISS?

検索するときに使うもの

FAISS.load_local() とは

LangChainの検索機能を“復元”するお助け関数

LangChainで「保存しといた検索データ」使いたいときに、復元してくれる関数。
前に作った検索の中身を、また使えるようにしてくれる。

誰が作ったか?

FAISSは、Meta(昔のFacebook)が作った本気の検索エンジン。
それをLangChainが「LLMと相性よく動くように」包み直してくれてる。
その包みの中に load_local() も入ってる。

正体:LangChainのラッパー機能

from langchain_community.vectorstores.faiss import FAISS

FAISS クラスは、
Meta(旧Facebook)製のガチ検索ライブラリ「FAISS」を、LangChainが「ベクトル検索付きのLLM向けデータベース」としてラップしたもの。

load_local() はそのラッパーの一部で、保存済みのFAISSインデックスをPython環境に“復活”させる専用メソッド。

FAISSってそもそも何?

正式には「Facebook AI Similarity Search」。
つまり「AIで似たもの探しをするツール」。
特徴を軽くまとめると。

  • MetaのAIチームが作った
  • めちゃくちゃ速い類似検索ができる
  • データが何百万件あっても一瞬で探せる

たとえば、「この文章に似てるものを、100万件の中からパッと出して!」を超高速でやってくれる。

load_local() の使い方

from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import OpenAIEmbeddings

db = FAISS.from_index(
    folder_path="index/faiss_index",
    embedding=OpenAIEmbeddings(),
    index_name="index",
    allow_dangerous_deserialization=True
)

それぞれの引数の意味は。

引数意味
folder_pathインデックスが入ってるフォルダ
embeddingsクエリをベクトルに変えるモデル
index_name読み込むファイルの名前(.faiss)
allow_dangerous_deserialization.pkl(LangChain用のメタ情報)を読み込むかどうかの設定。Trueにするなら、自分で作ったファイルだけにする

裏で何が起きてる?

FAISS.load_local() がやってくれてることは、ざっくりこんな流れ:

  1. index.faiss(ベクトルデータ)をFAISSエンジンで読み込み
  2. index.pkl(LangChain用メタデータ)をpickleで読み込み
  3. ベクトルデータと、使用していた埋め込みモデル情報を再構築
  4. VectorStore(LangChain用の検索機構)として復活!

つまり、インデックスを保存しておいて、あとから再利用するための「復元スイッチ」。

安全性の注意:「allow_dangerous_deserialization」

  • 自分で作った .pkl を読み込むときだけ True にするんはOK。
  • でも、他人からもらったファイルで True にするんは絶対NG。
  • 悪意のあるコードが混ざってるかもしれないから。

まとめ:これがわかれば「保存→再利用」がつながる!

FAISS.load_local() は、

保存済みの検索インデックスを“LLM対応の検索機能”として再起動する復元関数のこと

「ベクトル化して保存したけど、あとでまた使いたい!」ときの必需品。
LangChainを使ったベクトル検索では、この復元処理が重要になる。

To be continued…

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧