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

如何在LangChain的similarity_search与as_retriever中修改距离度量

问题解答

1. 修改similarity_search的距离度量为余弦距离

要将similarity_search默认的欧氏距离改为余弦距离,直接在调用函数时通过search_kwargs参数传入Solr所需的距离配置即可。具体代码修改如下:

from eurelis_langchain_solr_vectorstore import Solr
from langchain.embeddings import OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings(model="bge-small-en")

vector_store = Solr(embeddings_model, core_kwargs={
    'page_content_field': 'content',
    'vector_field': 'content_vec',
    'core_name': 'default',
    'url_base': 'http://localhost:8983/solr'
})

# 传入distance_function参数指定余弦距离
vector_store.similarity_search(
    "relevant question",
    k=5,
    search_kwargs={"distance_function": "cosine"}
)

注意:需确保你的Solr核心中content_vec字段的配置支持余弦距离计算。如果之前未配置,需要在Solr的schema文件中,将该向量字段的similarity属性设置为cosine。

2. 在as_retriever中修改距离度量

使用as_retriever创建检索器时,同样通过search_kwargs传递距离度量参数,将distance_function设为cosine即可:

# 创建使用余弦距离的检索器
retriever = vector_store.as_retriever(
    search_kwargs={'k': 5, "distance_function": "cosine"}
)

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:03:23