Skip to main content
Open In Colab在 GitHub 上打开

如何将 vectorstore 用作检索器

向量存储检索器是使用向量存储检索文档的检索器。它是 vector store 类的轻量级包装器,使其符合 retriever 接口。 它使用向量存储实现的搜索方法(如相似性搜索和 MMR)来查询向量存储中的文本。

在本指南中,我们将介绍:

  1. 如何从 vectorstore 实例化检索器;
  2. 如何指定检索器的搜索类型;
  3. 如何指定其他搜索参数,例如阈值分数和 top-k。

从 vectorstore 创建检索器

您可以使用其 .as_retriever 方法从 vectorstore 构建检索器。让我们来看一个示例。

首先,我们实例化一个 vectorstore。我们将使用内存中的 FAISS vectorstore:

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:

retriever = vectorstore.as_retriever()

这将创建一个检索器(特别是 VectorStoreRetriever),我们可以按常规方式使用它:

docs = retriever.invoke("what did the president say about ketanji brown jackson?")

最大边际相关性检索

默认情况下,向量存储检索器使用相似性搜索。如果基础向量存储支持最大边际相关性搜索,则可以将其指定为搜索类型。

这有效地指定了底层 vectorstore 上使用的方法(例如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?")

指定前 k

我们还可以限制文档的数量k由 retriever 返回。

retriever = vectorstore.as_retriever(search_kwargs={"k": 1})
docs = retriever.invoke("what did the president say about ketanji brown jackson?")
len(docs)
1