VectorStore

LangChain对索引(因此也是检索器)支持最多的是VectorStoreRetriever。顾名思义,这个检索器在很大程度上由VectorStore支持。

一旦构建了一个VectorStore,构建检索器就非常简单。让我们通过一个例子来说明。

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)
Exiting: Cleaning up .chroma directory
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 abotu 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 abotu ketanji brown jackson")

指定top k

您还可以指定搜索参数,如k,用于进行检索。

retriever = db.as_retriever(search_kwargs={"k": 1})
docs = retriever.get_relevant_documents("what did he say abotu ketanji brown jackson")
len(docs)
1
Last Updated:
Contributors: 刘强