向量数据库与 ANN 检索
Embedding 把文本变成向量后,问题变成「在千万向量里找最近邻」。暴力比对太慢,于是有了向量库与近似最近邻(ANN)。面试常问:HNSW 是什么?召回率和延迟怎么权衡?选哪个库?
01为什么需要向量数据库
文本/图像经 Embedding 后变成高维向量。语义检索 = 找「与查询向量最相似的 Top-K 个」。当库里有百万/十亿级向量时,逐一计算余弦相似度(O(N·d))不可接受,需要专用索引结构来加速且可扩展地检索。
02精确 vs 近似(ANN)
精确最近邻 (Exact / KNN)
结果 100% 正确,但慢,只适合小数据。
近似最近邻 (ANN)
用少量精度换大幅加速,召回率 90%+ 即可,工业默认。
实际系统几乎都用 ANN:宁可漏掉个别最相似项,也要把毫秒级延迟和海量规模跑出来。
03主流索引算法
IVF(倒排)
先聚类分桶,查询只搜最近的几个桶,缩小范围。快但依赖聚类质量。
PQ(乘积量化)
把高维向量切成多段分别压缩,用近似距离代替全量计算,省内存。
HNSW(分层可导航小世界)
用多层图做「高速公路式」导航,查询沿边快速逼近近邻。最常用。
LSH(局部敏感哈希)
相似向量高概率落入同桶,靠哈希快速粗筛。实现简单但精度一般。
04HNSW 直觉图解
查询从最上层稀疏层进入,靠长边快速「空降」到目标附近,再下钻到稠密层精确定位。类似「先坐高铁到城市,再走路到门口」。内存换速度,召回率高、延迟低。
05与 RAG 的关系
向量库是 RAG 的检索底座:文档切块 → Embedding → 入库;用户提问 → 向量化 → ANN 检索 Top-K → 拼进 prompt。RAG 效果好不好,一半取决于向量检索质量(召回率、重排)。详见 rag 目录。
06选型对比
FAISS
Meta 开源库,索引算法全、轻量,常作为其他系统的内核;偏「库」非「服务」。
Milvus / Qdrant
生产级向量数据库,分布式、可扩展、带过滤与运维,适合大规模。
Chroma / pgvector
轻量/嵌入式,Chroma 适合原型;pgvector 让 Postgres 直接存向量,复用现有栈。
选型看:规模(百万 vs 十亿)、是否要分布式、是否要元数据过滤、团队运维能力。
07面试速记卡
为什么
Embedding 后要做「最近邻检索」,暴力比对不可扩展。
ANN
用精度换速度,工业默认;关注召回率/延迟/内存。
HNSW
分层图:上层高速导航、下层精确定位,最常用。
与 RAG
向量库是 RAG 检索底座,质量靠召回+重排保障。