如何將向量資料庫作為檢索器使用
向量資料庫檢索器是一種檢索器,它使用向量資料庫來檢索文件。它是向量資料庫類別的輕量級封裝,使其符合檢索器的 介面。它使用向量資料庫實作的搜尋方法,例如相似度搜尋和 MMR,來查詢向量資料庫中的文本。
在本指南中,我們將涵蓋
- 如何從向量資料庫實例化檢索器;
- 如何指定檢索器的搜尋類型;
- 如何指定其他搜尋參數,例如閾值分數和 top-k。
從向量資料庫建立檢索器
您可以使用向量資料庫的 .as_retriever 方法從向量資料庫建立檢索器。讓我們逐步完成一個範例。
首先,我們實例化一個向量資料庫。我們將使用記憶體中的 FAISS 向量資料庫
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(texts, embeddings)
然後我們可以實例化一個檢索器
retriever = vectorstore.as_retriever()
這會建立一個檢索器(特別是 VectorStoreRetriever),我們可以使用通常的方式使用它
docs = retriever.invoke("what did the president say about ketanji brown jackson?")
最大邊際相關性檢索
預設情況下,向量資料庫檢索器使用相似度搜尋。如果底層向量資料庫支援最大邊際相關性搜尋,您可以將其指定為搜尋類型。
這有效地指定了底層向量資料庫上使用的方法(例如,similarity_search
、max_marginal_relevance_search
等)。
retriever = vectorstore.as_retriever(search_type="mmr")
docs = retriever.invoke("what did the president say about ketanji brown jackson?")
傳遞搜尋參數
我們可以使用 search_kwargs
將參數傳遞給底層向量資料庫的搜尋方法。
相似度分數閾值檢索
例如,我們可以設定相似度分數閾值,並且僅返回分數高於該閾值的文件。
retriever = vectorstore.as_retriever(
search_type="similarity_score_threshold", search_kwargs={"score_threshold": 0.5}
)
docs = retriever.invoke("what did the president say about ketanji brown jackson?")
指定 top k
我們還可以限制檢索器返回的文件數量 k
。
retriever = vectorstore.as_retriever(search_kwargs={"k": 1})
docs = retriever.invoke("what did the president say about ketanji brown jackson?")
len(docs)
1