如何在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
相关产品推荐
相关产品推荐

