Vectorstore
https://python.langchain.com/docs/integrations/vectorstores
Overview
- EmebddingしたVectorを格納するDatastore
- LangChainのVectorStoreの中のvectorstoreに実際のvectorstoreが格納されている
- DeepLakeならdeeplake_vectorstore.pyが本体のvectorstore.
Types of Vector Store
Usage: Embedding -> Vector -> VectorStore (Qdrant) -> RetrievalQA
- Qdrant のClientの初期化(local fileの場合) Qdrant
- Qdrantに
str
またはDocument
を追加 - Retrieverの初期化
- Question&Answer: 上で作成したretriverに質問する
VectorStore (Interface for vector store)
-
VectorStore.from_documentsは texts と metadatasをfrom_textsに渡しているだけ:
@classmethod def from_documents( cls: Type[VST], documents: List[Document], embedding: Embeddings, **kwargs: Any, ) -> VST: """Return VectorStore initialized from documents and embeddings.""" texts = [d.page_content for d in documents] metadatas = [d.metadata for d in documents] return cls.from_texts(texts, embedding, metadatas=metadatas, **kwargs)
-
DeepLake.from_textsは 結局は
add_texts
をしてるだけ@classmethod def from_texts( cls, texts: List[str], embedding: Optional[Embeddings] = None, metadatas: Optional[List[dict]] = None, ids: Optional[List[str]] = None, dataset_path: str = _LANGCHAIN_DEFAULT_DEEPLAKE_PATH, **kwargs: Any, ) -> DeepLake: deeplake_dataset = cls(dataset_path=dataset_path, embedding=embedding, **kwargs) deeplake_dataset.add_texts( texts=texts, metadatas=metadatas, ids=ids, ) return deeplake_dataset
-
DeepLake.add_textsは、DeepLakeVectorStore.add (https://github.com/activeloopai/deeplake)している (具体的にやっていることはEmbedding Function (このケースだとOpenAI)を叩いて与えられたテキストをEmbeddingしてVectorStoreに格納する)
Tips
- datasetサマリー
vector_store.vectorstore.dataset.summary() Dataset(path='./datasets/v1', tensors=['embedding', 'id', 'metadata', 'text']) tensor htype shape dtype compression ------- ------- ------- ------- ------- embedding embedding (0,) float32 None id text (0,) str None metadata json (0,) str None text text (0,) str None
-
datasetをリセットする (Tensorも消えるので注意)
with delete_all_samples_if_specified
1. datasetのtensorをClearする (from deeplake.core.vectorstore.vector_search import dataset as dataset_utils dataset_utils.delete_all_samples_if_specified(vector_store.vectorstore.dataset, True)
id
はTensor名)