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

LangChain Chroma向量数据库两个相似性搜索方法返回结果异常咨询

问题原因与解决办法

核心原因

  1. LangChain旧版本封装缺陷:部分早期LangChain版本中,similarity_search_with_score()和similarity_search_with_relevance_scores()复用了相同的底层调用逻辑,没有对后者的分数做0-1区间的转换处理,导致两者返回完全一致的原始分数。
  2. Chroma原始分数范围特性:Chroma默认使用余弦距离(范围[0,2],数值越小越相似),如果LangChain未将其映射为0-1的相关性分数,直接返回就会出现超出1的情况——余弦距离最大值为2(完全不相似时)。
  3. 文档与实现不同步:LangChain文档对两个方法的定义是理想状态,但实际封装代码未跟上文档更新,导致行为与描述不符。

解决办法

  • 手动转换分数:拿到similarity_search_with_score()返回的余弦距离后,自行计算相关性分数:
    # 将余弦距离(0-2)转换为0-1的相关性分数
    relevance_score = 1 - (distance / 2)
    
    如果Chroma返回的是原始余弦相似度(范围[-1,1]),则用:
    relevance_score = (score + 1) / 2
    
  • 升级依赖版本:更新LangChain到最新稳定版,同步升级Chroma,新版本已修复两个方法的行为差异,确保similarity_search_with_relevance_scores()返回标准0-1区间的分数。
  • 检查距离函数配置:如果初始化Chroma时指定了非默认的距离函数(如L2、IP),需对应调整分数转换逻辑,或者在初始化时明确设置符合需求的相似度计算方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:42:45