首页/AI/RAG 与向量库速查/欧氏距离(L2)
Embedding 与检索50 条

欧氏距离(L2)

欧氏距离衡量向量端点的直线距离,对模长敏感;在归一化向量上它与余弦、内积排序等价,是 FAISS IndexFlatL2 等实现的默认度量。

RAG 与向量库速查AI更新于 2026-10-13

欧氏距离是什么

欧氏距离(L2)衡量两个向量端点的直线距离,对向量模长敏感。它是 FAISS 的 IndexFlatL2、Milvus 的 L2 度量等实现的默认距离;在归一化向量上,它的排序结果与余弦相似度、内积完全一致,所以选哪种度量更多取决于库的默认配置与历史数据,而不是效果差异。

基本信息

计算公式sqrt(Σ(a_i − b_i)²),即两端点间的直线距离
代表实现FAISS IndexFlatL2、Milvus 的 L2、pgvector 的 <-> 操作符
与余弦的关系归一化后有 ||a−b||² = 2 − 2·cos
方向差异L2 越小越相似,与余弦的「越大越相似」相反

典型使用场景

  • 确认库的默认度量:新建集合时未指定,多数向量库默认就是 L2
  • 归一化向量的统一处理:入库与查询两侧都归一化后,距离与相似度排序等价
  • 阈值兜底:用 L2 距离设「相关度不足就拒答」的判定线
  • 图像特征检索:非文本向量常直接用 L2,无需改成余弦
  • 跨库迁移核对:从 FAISS 迁到服务端向量库时,确认度量语义一致

L2 距离计算

L2 距离计算
import numpy as np

def l2(a, b):
    a = np.asarray(a, dtype="float32")     # 统一精度,避免 float64 拖慢
    b = np.asarray(b, dtype="float32")
    return float(np.linalg.norm(a - b))     # 相似度比较时用平方值即可

print(round(l2([0.3, 0.4, 0.5], [0.1, 0.9, 0.2]), 4))
# 索引检索时一般只返回距离平方,省去开方开销

常见度量对照

度量取值方向典型场景
L2 欧氏距离越小越相似图像特征与已归一化的文本向量
内积 IP越大越相似未归一化向量、推荐系统嵌入
余弦相似度越大越相似文本检索最常用
汉明距离越小越相似二值量化向量
归一化让两种度量等价,但前提是入库与查询两侧都做了归一化;只归一化一侧会让排序失真。
切换度量方式属于破坏性变更:旧向量在新度量下需要重建索引,阈值也要重新校准,不能只改一个配置项。
排查分数异常时先确认度量口径:控制台返回的距离是平方值还是开方值、是否做过归一化,不同工具默认值并不一致,混用会让阈值判定失效。

易错点

  • 未归一化时 L2 更多反映模长差异,不适合直接当语义相似度
  • 比较时用平方值即可,开方计算没有收益
  • 把 L2 距离直接当余弦相似度设阈值,判定线完全错位
  • 入库与查询归一化不一致,召回结果随机波动且难以排查

数据来源与参考

  • FAISS wiki(L2 距离)
  • Milvus 官方文档(度量类型)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌