首页/AI/RAG 与向量库速查/余弦检索实现细节与坑
本包目录(229 条)
架构与流程30 条解析与切分33 条
Embedding 与检索50 条
向量数据库49 条重排与生成32 条评估与优化35 条

余弦检索实现细节与坑

工程实现余弦检索时的细节:归一化必须用 float32 避免精度漂移;接近零的向量(全零 embedding)会让除法产生 NaN,需要在入库前过滤或兜底处理。

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

安全归一化

安全归一化
import numpy as np

def safe_l2norm(x, eps=1e-12):
    norms = np.linalg.norm(x, axis=1, keepdims=True)
    return x / np.maximum(norms, eps)      # 全零向量保持全零

vecs = safe_l2norm(np.random.rand(100, 384).astype("float32"))
对全零向量做除法会得到 NaN;NaN 一旦入库,检索排序会整体异常且很难定位。

易错点

  • 用 float64 重算入库向量,与线上 float32 检索结果出现微小不一致
  • 空文本编码出的全零向量直接入库,后续相似度全为 NaN

数据来源与参考

  • NumPy 官方文档(浮点与除法)
  • Qdrant 官方文档(向量校验)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌