基于向量存储的检索器
向量存储检索器是一种使用向量存储来检索文档的检索器。它是对向量存储类的轻量级封装,以使其符合检索器接口。它使用向量存储实现的搜索方法,如相似性搜索和MMR,来查询向量存储中的文本。
一旦构建了向量存储,构建检索器就非常容易。让我们通过一个示例来了解一下。
from langchain.document_loaders import TextLoader
loader = TextLoader('../../../state_of_the_union.txt')
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(texts, embeddings)
retriever = db.as_retriever()
docs = retriever.get_relevant_documents("what did he say about ketanji brown jackson")
最大边际相关检索
默认情况下,向量存储检索器使用相似性搜索。如果底层的向量存储支持最大边际相关搜索,您可以将其指定为搜索类型。
retriever = db.as_retriever(search_type="mmr")
docs = retriever.get_relevant_documents("what did he say about ketanji brown jackson")
相似性分数阈值检索
您还可以使用设置相似性分数阈值的检索方法,只返回分数高于该阈值的文档。
retriever = db.as_retriever(search_type="similarity_score_threshold", search_kwargs={"score_threshold": .5})
docs = retriever.get_relevant_documents("what did he say about ketanji brown jackson")
指定 top k
您还可以指定搜索参数,如 k
,用于进行检索。
retriever = db.as_retriever(search_kwargs={"k": 1})
docs = retriever.get_relevant_documents("what did he say about ketanji brown jackson")
len(docs)
1