You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LangChain FAISS检索器中指定相似度阈值?

使用相似度阈值替代k值检索文档
  • 直接在vectorstore.as_retriever()的search_kwargs中传入score_threshold参数即可,该参数会筛选出相似度高于设定值的文档,替代原有的k值数量限制。
  • 示例阈值可根据实际需求调整,比如设置为0.7(数值范围通常在0-1之间,越接近1相似度越高)。

修改后的完整代码如下:

from langchain.document_loaders import PyPDFLoader
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain

def get_conversation_chain(vectorstore):
    llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')
    # 用score_threshold替代k值,设置相似度阈值为0.7
    qa = ConversationalRetrievalChain.from_llm(
        llm=llm,
        retriever=vectorstore.as_retriever(search_kwargs={'score_threshold': 0.7}),
        return_source_documents=True,
        verbose=True
    )
    return qa

loader = PyPDFLoader("sample.pdf")
# 加载并拆分PDF文档
pages = loader.load_and_split()
# 创建FAISS向量索引
faiss_index = FAISS.from_documents(pages, OpenAIEmbeddings())
# 创建对话链
chat_history = []
qa = get_conversation_chain(faiss_index)
query = "What is a sunflower?"
result = qa({"question": query, "chat_history": chat_history}) 
  • 补充说明:如果同时设置k和score_threshold,会先筛选出符合阈值的文档,再从中返回最多k个结果;若没有文档满足阈值条件,检索结果会为空。

内容的提问来源于stack exchange,提问作者G. Macia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:32:08