📚
【LangChain】FAISSのドキュメント情報を全部取得する
はじめに
LangChain の FAISS のドキュメントを一括で取得する方法を検索すると、以下のような方法が見つかります。
db = FAISS.load_local(
"faiss",
embeddings,
allow_dangerous_deserialization=True
)
print(db.docstore._dict)
しかしこの方法だと、エディターで type check を行っている場合怒られることがあります。
なぜ怒られるのか
_dict は InMemoryDocstore() のメンバー変数であり、
LangChain の FAISS では、from_document などで作成するとデフォルトで InMemoryDocstore() が使われるようになっていますが、
FAISS のメンバー変数 docstore の型は普通の Docstore であり
Docstore は _dict をメンバ変数として持っていないことが原因です。
どうすればいいのか
以下のようにすると、FAISS に定義されているものだけで全てのドキュメントを取得することができます。
db = FAISS.load_local(
"faiss",
embeddings,
allow_dangerous_deserialization=True
)
ids = list(db.index_to_docstore_id.values())
documents = db.get_by_ids(ids)
以下のようにすると、db.docstore._dict と同じ形で取得できます。
docstore_dict = {key: doc for key, doc in zip(ids, documents)}
print(docstore_dict)
Discussion