タイトルの方法です。
それぞれ a.txt
には大文字のA
が入っているようなシンプルなテキスト3つを用意してロードします。
from pprint import pprint
from langchain.document_loaders.text import TextLoader
doc_a = TextLoader("./data/a.txt").load()
doc_b = TextLoader("./data/b.txt").load()
doc_c = TextLoader("./data/c.txt").load()
pprint((doc_a,doc_b,doc_c))
([Document(page_content='A', metadata={'source': './data/a.txt'})],
[Document(page_content='B', metadata={'source': './data/b.txt'})],
[Document(page_content='C', metadata={'source': './data/c.txt'})])
これらをDBに取り込みます。
from langchain.vectorstores.faiss import FAISS
db = FAISS.from_documents(documents=doc_a,embedding=llm)
db.add_documents(doc_b)
db.add_documents(doc_c)
まずDBのデータを検索でなく、一括取得する方法です。( _
始まりの変数なのですぐ変更になってしまう可能性も高いです)
pprint(db.docstore._dict)
ここで出力されるe5ef500d-1e31-467d-af14-55f156debac5
のような Keyとなっている部分がDocumentのIDとなります。
{'1a0abd38-3059-46d0-9ded-9082ad25f876': Document(page_content='C', metadata={'source': './data/c.txt'}),
'53892d26-24b8-4288-999f-266336f902b5': Document(page_content='A', metadata={'source': './data/a.txt'}),
'e5ef500d-1e31-467d-af14-55f156debac5': Document(page_content='B', metadata={'source': './data/b.txt'})}
このIDを指定して delete()
メソッドを利用すればDocumentをDBから削除可能です。
例えば以下のようにすると B
のDocumentを削除可能です。
# 削除前の検索
print(db.similarity_search("b",k=1))
# -> [Document(page_content='B', metadata={'source': './data/b.txt'})]
# Bのドキュメントを削除
db.delete(ids=["e5ef500d-1e31-467d-af14-55f156debac5"])
# 削除後の検索
print(db.similarity_search("b",k=1))
# -> [Document(page_content='C', metadata={'source': './data/c.txt'})]
ids
は複数していできるので、上記で db.docstore._dict
の結果をmetadataでフィルタして指定するなども可能です。