跳到主要內容
Open In ColabOpen on GitHub

如何將向量資料庫作為檢索器使用

向量資料庫檢索器是一種檢索器,它使用向量資料庫來檢索文件。它是向量資料庫類別的輕量級封裝,使其符合檢索器的 介面。它使用向量資料庫實作的搜尋方法,例如相似度搜尋和 MMR,來查詢向量資料庫中的文本。

在本指南中,我們將涵蓋

  1. 如何從向量資料庫實例化檢索器;
  2. 如何指定檢索器的搜尋類型;
  3. 如何指定其他搜尋參數,例如閾值分數和 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_searchmax_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

此頁面是否有幫助?