銀河鉄道

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

サムネイル
[LangChain]FAISS.load_local

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」

これ、LangChainで最近うるさくなってるポイントやで!

名前からしてちょっと怪しいやつやろ。
実際、注意が必要なんやで。

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

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

FAISS.load_local() は、保存済みの検索インデックスを“LLM対応の検索機能”として再起動する復元関数やで!

「ベクトル化して保存したけど、あとでまた使いたい!」ってときの必需品。
LangChainを使ったベクトル検索では、この復元処理がめちゃ重要になるから、ここを理解してると開発の全体像がつながってくるで〜🎯

To be continued…

著者

author
月うさぎ

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

記事一覧