Skip to content

向量数据库原理是什么?请简述下它的原理 ​

  • 标签:AI、大模型、RAG、向量数据库

🏛 业务架构师 ​

向量数据库的核心原理是"把语义搜索变成数学问题":

  1. 向量化:文本/图片经 Embedding 模型转为高维向量(如 1024 维),语义相近则向量距离近。
  2. 索引结构:海量向量做精确最近邻搜索代价是 O(N) 暴力比对,不可行。向量库的核心是用 ANN(近似最近邻)索引——HNSW 构建多层跳表式图结构,查询时从顶层快速跳到目标邻域,牺牲一点召回换百倍速度;IVF 先聚类分桶,查询只扫最近的几个桶;PQ 量化压缩向量减少内存。
  3. 检索:查询向量经同一索引找到 Top-K 近邻,返回距离分数和对应原文档。

业务视角:理解原理的意义在于做成本与效果决策——索引类型决定"召回率、延迟、内存"三角:HNSW 内存大但快,IVF/PQ 省内存但有精度损失,业务上对应"客服要秒回(HNSW)"还是"日志检索要省钱(PQ)"。另外,向量库本质是"搜索引擎的一种",它解决"模糊语义匹配",不解决精确条件查询和事务——所以生产架构里它总与元数据过滤、传统数据库配合出现,而不是替代后者。

🏗 系统架构师 ​

向量数据库的核心原理是用近似最近邻(ANN)索引把 O(N) 的暴力搜索降到亚线性,代价是牺牲一点召回率换两个数量级的性能。

三层机制:

  • 存储与编码:向量(float32/float16/binary)+ 标量元数据 + 倒排/正排文件;高维稠密向量(768~3072 维)无法用 B+树索引,必须专门索引结构;
  • ANN 索引:主流是 HNSW(分层可导航小世界图:上层稀疏快速定位、底层稠密精确逼近,查询 O(logN),内存大)、IVF(聚类分桶,只搜最近的几个桶,配合 PQ 量化压内存)、DiskANN(图索引落在 SSD,十亿级向量内存友好);
  • 查询管线:标量过滤(pre-filter 先缩小候选集)→ ANN 检索 Top-K → 距离精算重排 → 返回。距离度量:余弦(语义检索默认)、内积(归一化后等价余弦)、L2。

架构师视角的三个认知:一是 recall vs latency 是可调曲线(HNSW 的 ef、IVF 的 nprobe),生产要按业务定召回目标(如 recall@100 ≥ 95%);二是内存是第一成本——10 亿 × 1024 维 float32 约 4TB 原始,量化与 DiskANN 是规模化的必选项;三是向量库本质是"牺牲一致性换性能"的检索引擎,写后立查有可见性延迟,实时性要求高的场景要评估它的最终一致窗口。

💻 全栈开发专家 ​

向量数据库的核心 = Embedding + ANN 索引 + 距离度量 + 标量过滤。

原理拆开讲:

  1. 写入路径:文本经 Embedding 模型变成 d 维向量(如 1024 维 float32),连同 payload(原文、元数据)一起入库;后台构建 ANN 索引。
  2. 索引结构:暴力检索是 O(N) 全量比对,亿级向量不可接受,所以用 ANN 近似最近邻索引——HNSW(分层跳表式图,贪心搜索)或 IVF(聚类分桶,只搜最近的几个桶),牺牲一点召回换两三个数量级的速度。
  3. 查询路径:query 向量化 → ANN 索引找到候选集(比如 top 200)→ 可选标量过滤(dept == "sales" AND year > 2023)→ 精确距离重排 → 返回 top K。
  4. 度量方式:余弦/内积/欧氏距离,归一化后三者等价,一般文本用余弦。
sql
-- PGVector 里看就是一张表 + 特殊索引
CREATE TABLE chunks (id bigserial, content text,
    embedding vector(1024), metadata jsonb);
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);
SELECT * FROM chunks ORDER BY embedding <=> '[...]' LIMIT 5;

一句话总结:向量库 = 把「语义相似度搜索」做成了一等公民的存储引擎,传统数据库的 B+树解决不了这个问题。