· liyu · tutorials · 24 min read · — 次浏览

向量数据库全景:AI 系统的记忆中枢与主流方案横向对比

从 RAG 知识库到 Agent 长期记忆,从语义搜索到多模态检索,向量数据库已经成为 AI 应用的标准基础设施。本文从一次 RAG 选型经历出发,梳理向量数据库在现有 AI 系统中的六大典型角色,并客观对比 Milvus、Qdrant、Weaviate、Pinecone、Chroma、pgvector、Elasticsearch 等主流方案的定位与适用场景。

一、为什么 AI 时代需要向量数据库

这篇文章的起点是一次真实的技术选型:我在搭 RAG 系统时,知识检索这一层选了 Milvus。用是会用,但当时我对”它到底替我做了什么""市面上同类方案长什么样”其实心里没底。于是我把向量数据库这个方向系统补了一遍课,这篇文章就是补课笔记的整理。

先说结论式的认知:向量数据库不像 MySQL 那样历史悠久,也不像 Redis 那样角色单纯,但它补上了传统数据库从未覆盖的一块能力拼图——按语义存取数据。短短几年,它已经成了 AI 应用的”标配地基”。

要理解它的价值,得从 Embedding 说起。

1. Embedding:把万物映射为向量

现代 AI 系统处理的核心对象是非结构化数据:文本、图片、音频、代码。深度学习模型(Embedding 模型)可以把它们统一编码为高维稠密向量,最关键的性质是:语义相近的内容,在向量空间中距离也近。

相似度通常用余弦相似度衡量:

cos(θ) = (a · b) / (‖a‖ × ‖b‖)

取值范围 [-1, 1],越接近 1 表示方向越一致、语义越相似。比如「iPhone 多少钱」和「苹果手机价格」在字面上几乎没有重合,但它们的向量夹角会很小——这正是传统关键词检索做不到的「语义检索」。

2. 暴力检索的困境

有了向量,检索就变成了Top-K 最近邻搜索:给定查询向量,在 N 条候选向量中找出距离最小的 K 条。

问题是,暴力扫描的复杂度是 O(N × D)(N 为向量条数,D 为维度)。以 100 万条 1024 维向量估算,一次查询就是十亿次级别的乘加运算;到了 1 亿条规模,单次查询要几百毫秒起步,完全不可用。

于是 ANN(Approximate Nearest Neighbor,近似最近邻)算法登场——牺牲一点召回率,换取几个数量级的速度提升。三大主流路线:

算法核心思想特点
HNSW分层跳表式近邻图,查询沿高层”高速公路”逐层下沉召回率高、延迟低,内存占用大,是绝大多数向量库的默认选择
IVF + PQ先聚类分桶(倒排文件),桶内用乘积量化压缩内存占用可压至原来的几十分之一,适合超大规模,召回略低
DiskANN向量索引放磁盘,内存只驻留压缩摘要单机十亿级向量,用磁盘换内存,SSD 友好

以 HNSW 为例,它的分层结构和跳表异曲同工:

Level 2:   A ─────────────── B              (稀疏:高层高速公路)
           │                 │
Level 1:   A ───── C ─────── B ───── D      (中层:快速路网)
           │       │         │       │
Level 0:   A─E─F─G─C─H─I─J─B─K─L─M─D─N─O    (底层:全量节点,城市道路)

3. ANN 索引 ≠ 数据库

但一个只有 ANN 索引的东西,还配不上”数据库”三个字。生产系统真正需要的是:

  • 增删改:文档更新后向量要能更新,HNSW 这类图索引的删除与重建并不平凡;
  • 元数据过滤:「在 category = RAG 且 updateDate 近 90 天的文档里搜 Top-K」,过滤与搜索的先后顺序(Pre-filter / Post-filter)直接影响召回正确性;
  • 混合检索:向量语义召回 + BM25 关键词召回互补融合(常用 RRF 倒数排名融合),是 2026 年 RAG 的标配;
  • 分布式与高可用:分片、副本、一致性、水平扩展;
  • 工程配套:多租户隔离、权限、监控、备份。

所以一个更准确的定义是:向量数据库 = 传统数据库的工程能力 + ANN 检索引擎。这也是为什么 Faiss 这类”裸索引库”不能直接当数据库用。


二、向量数据库在 AI 系统中的六大典型角色

把视野从 RAG 拓宽到整个 AI 行业,向量数据库的作用可以归纳为六大角色。

1. RAG 的知识库底座(最主流)

大模型有三先天缺陷:知识过时、私有数据看不到、一本正经地幻觉。RAG(Retrieval-Augmented Generation)的解法是”开卷考试”:先从知识库检索相关内容,再让 LLM 基于检索结果作答。向量数据库正是这个”图书馆”。

用户提问 "我们的退款政策是什么?"
        │
        ▼
 Query Embedding(查询向量化)
        │
        ▼
┌─────────────────────────────────┐
│ 向量数据库                       │
│  ANN Top-K 语义召回              │
│  + 元数据过滤(文档类型/时间/权限)│
│  + BM25 混合检索                 │
└─────────────────────────────────┘
        │ Top-K 文档块
        ▼
 拼装 Prompt(问题 + 检索上下文)
        │
        ▼
 LLM 生成「有据可依」的回答并引用来源

有一个容易被低估的细节:生产环境里,元数据过滤和权限过滤往往比 ANN 算法本身更影响最终质量。比如普通员工不应该在检索结果里看到高管薪酬制度,这种过滤必须发生在检索阶段,而不是事后再剔除——“该过滤的没过滤好”是 RAG 项目最常见的事故来源之一。

2. 语义搜索:搜索框的换代升级

传统搜索依赖倒排索引做关键词匹配,天然受限于「字面重合」。语义搜索直接匹配意图:

  • 电商搜索:「通勤背的包」→ 召回通勤单肩包、公文包(哪怕标题里没有”通勤”二字);
  • 文档站搜索:搜「怎么让它跑起来」→ 召回「部署与启动指南」;
  • 客服工单:自然语言描述问题,直接命中历史解决方案。

主流形态往往是混合检索:向量负责语义泛化,BM25 负责专有名词、型号、代码标识等精确匹配,两者经 RRF 融合排序。

3. Agent 的长期记忆

LLM 的上下文窗口再大,也不可能把三年对话历史全塞进去。Agent 系统的做法是:把对话摘要、用户偏好、任务状态、工具调用结果向量化后存入向量数据库;下次交互时,按当前语义按需唤醒相关记忆,注入上下文。

用户:「上次那个部署报错,后来怎么解决的?」
        │
        ▼
 记忆检索:从向量库召回 3 个月前
 「Nginx 502 → upstream 超时配置」的解决记录
        │
        ▼
 Agent 拿着这段记忆 + 当前问题继续推理

这层能力加上摘要压缩、时间衰减、冲突消解,就构成了 Mem0、Letta(MemGPT)这类记忆框架的底层。可以说没有向量数据库,就没有真正”记得你”的 Agent。

4. 推荐系统的召回层

搜广推场景中,双塔模型把用户和物品分别编码为向量,离线把亿级物品向量灌入向量库,在线请求时用用户向量做 Top-K 近邻召回,再交给精排。这与关键词时代的召回完全不同:它能召回内容上从未共现、但语义上高度相关的物品,是”越刷越懂你”的核心引擎。

5. 多模态检索

CLIP 这类对比学习模型把图像和文本映射到同一向量空间,于是:

  • 以文搜图:相册里搜「海边落日下的合影」;
  • 以图搜图:拍一张鞋的照片找同款;
  • 音视频检索:语音转写 + 语义检索会议记录;监控视频按「有人翻越围栏」检索片段;
  • 代码检索:按功能描述搜代码片段(GitHub、IDE 的语义代码搜索)。

一套向量数据库底座,可以同时服务文本、图像、音频多种模态,这也是它被称为「AI 时代通用检索层」的原因。

6. 去重、缓存与安全

一些容易被忽视但很实用的用法:

  • 数据去重:训练语料或工单库的近似去重(Near-Dedup),向量距离小于阈值即视为重复,比精确哈希更能容忍格式噪声;
  • 语义缓存:把「Python 怎么读文件」的历史问答缓存下来,新问题向量命中缓存就直接返回,省下一次 LLM 调用,对高 QPS 场景是真金白银的 token 成本节约;
  • 安全风控:RAG 投毒检测(新入库文档与已知恶意内容向量聚类比对)、Prompt 注入样本识别、异常行为向量化聚类告警。

三、主流向量数据库横向对比

进入正题。按出身可以把主流方案分成四类:专业向量数据库(Milvus、Qdrant、Weaviate、Chroma)、全托管云服务(Pinecone)、通用数据库的向量扩展(pgvector、Elasticsearch/OpenSearch、Redis)、向量检索库(Faiss——它是引擎不是数据库,但绕不开)。

以下内容基于各项目官方文档与社区口碑的整理,力求客观;个别地方会标注我在 RAG 项目里使用 Milvus 的直观感受。

1. Milvus:大规模生产级的分布式旗舰

  • 定位:面向海量向量(亿级到百亿级)的云原生分布式向量数据库,CNCF 托管的开源项目,国内生态与中文资料最完善;
  • 架构:2.x 起存算分离,接入、查询、存储节点独立伸缩;提供 Standalone 单机、Distributed 集群、Lite 嵌入式三种形态,升级路径平滑;
  • 索引:IVF、HNSW、DiskANN、GPU 索引一应俱全,还支持 BM25 稀疏向量与稠密向量的混合检索、多向量多路召回融合;
  • 适合:数据量会涨到亿级、需要复杂标量过滤与多租户的生产系统。运维复杂度是它的代价,不想管可以上同公司的 Zilliz Cloud。

我自己在 RAG 项目里用的就是 Milvus(Standalone 单机模式)。直观感受是:SDK 设计合理,标量过滤 + 向量检索的组合表达式写起来顺手,中文文档和社区答疑的密度在同类项目里确实突出;单机部署对中小知识库来说也足够省心。

2. Qdrant:资源效率与过滤能力的标杆

  • 定位:Rust 编写的向量数据库,单二进制部署,内存占用低、延迟稳定,社区普遍将其视为自建中小规模服务的”甜点”选择;
  • 索引:HNSW 为主力,配套标量量化、二进制量化、乘积量化,内存紧张时能把索引压缩一个量级;
  • 亮点:Payload(元数据)过滤设计非常出色,支持嵌套 JSON 条件的 Pre-filter,复杂业务过滤场景召回正确性有保障;1.10+ 支持稀疏向量与 Query API 多级检索编排;
  • 适合:垂直搜索、RAG 中等规模(千万级内很从容)、对部署简洁性敏感的团队。

3. Weaviate:开箱即用的混合检索与向量化模块

  • 定位:Go 编写的开源向量数据库,最大特色是模块化架构——内置 text2vec 系列模块,接 OpenAI、Cohere、HuggingFace 的 Embedding 服务几乎零代码;
  • 检索:BM25 + 向量混合检索原生内置,融合策略开箱即用;原生多租户(Multi-Tenancy)支持,做 SaaS 每用户隔离知识库很顺手;
  • 适合:希望”存原文进去、自动向量化、混合检索直接用”的团队,GraphQL/REST API 风格对应用开发者友好。

4. Chroma:原型开发的第一块白板

  • 定位:为开发者体验而生的嵌入式向量数据库,pip install chromadb 后四行代码完成「建库—写入—查询」,LangChain、LlamaIndex 教程里的常客;
  • 形态:默认嵌入式(跑在进程内),也可以 Client/Server 模式独立部署;索引以 HNSW 为主;
  • 适合:Demo、课程实验、个人项目的快速验证。生产级的大规模与分布式能力相对薄弱(Chroma Cloud 在补齐)。社区常见的做法是原型阶段用 Chroma 快速验证,上线前再迁移到 Qdrant/Milvus 等生产级方案——好在语义检索这一层的抽象是相通的,迁移成本不高。
import chromadb

client = chromadb.Client()
col = client.create_collection("blog_docs")
col.add(documents=["向量数据库是 AI 应用的记忆中枢"], ids=["doc-1"])
print(col.query(query_texts=["什么是向量数据库"], n_results=1))

5. Pinecone:全托管 Serverless 的代表

  • 定位:闭源商业 SaaS,2023 年起全面转向 Serverless 架构,按用量计费,扩容、分片、索引维护全部不可见;
  • 能力:稠密 + 稀疏混合检索、命名空间多租户、元数据过滤齐备,与 LangChain/LlamaIndex 集成成熟;
  • 代价:不可自部署,数据出域,长期成本随规模线性增长;
  • 适合:没有运维团队、要快速上线并要 SLA 保障的商业项目。国内团队受网络与合规限制时需酌情考虑。

6. pgvector:Postgres 用户的最低成本起点

  • 定位:PostgreSQL 扩展,让”会不会 SQL”成为使用向量检索的唯一门槛。vector 类型最高支持 16000 维存储(建索引 2000 维内,halfvec 半精度可到 4000 维),另支持稀疏向量 sparsevec;
  • 索引:HNSW 与 IVFFlat;
  • 杀手锏:向量与业务数据同库——事务、JOIN、RLS 行级权限、备份全部复用现有 Postgres 设施;混合检索可以用全文检索 + 向量距离在一条 SQL 里完成:
CREATE EXTENSION vector;
CREATE TABLE docs (
  id        bigserial PRIMARY KEY,
  content   text,
  embedding vector(1024)
);
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops);

-- 向量召回 + 全文检索,RRF 融合排序(k = 60)
SELECT id, content,
  1.0 / (60 + ROW_NUMBER() OVER (ORDER BY embedding <=> $1)) +
  1.0 / (60 + ROW_NUMBER() OVER (ORDER BY ts_rank(to_tsvector('simple', content), $2) DESC)) AS rrf_score
FROM docs
ORDER BY rrf_score DESC
LIMIT 10;
  • 边界:千万级向量、高 QPS 场景下性能与资源开销会逐渐吃力(可用 pgvectorscale 等增强),超大规模仍需专业向量库。Supabase、Neon、RDS 全系支持。社区给新手的普遍建议是:除非量级明确会爆炸,否则从 pgvector 起步,不要过早引入新组件。

7. Elasticsearch / OpenSearch:搜索栈的自然延伸

  • 定位:成熟搜索引擎的向量能力补全。dense_vector 字段 + kNN 检索(Lucene HNSW),8.x 起支持 int8/int4 量化与标量量化调优;
  • 亮点:BM25 与 kNN 的混合检索(RRF 融合)是官方一等公民;分片、副本、监控、安全体系全部现成;
  • 适合:已经在用 ES 做日志或站内搜索的团队——不用新增任何组件,加个字段就把语义搜索带回家了。代价是 JVM 栈的资源开销偏大,纯向量场景性价比不如专业向量库。Elasticsearch 走源码可得许可(ELv2/SSPL/AGPL 多选),OpenSearch 为 Apache 2.0。

8. Redis:低延迟场景的记忆芯片

  • 定位:内存数据库的向量检索能力(Redis Stack / Redis 8),HNSW 与 FLAT 索引,查询延迟可以压到微秒~亚毫秒级;
  • 适合:Agent 会话记忆、语义缓存、实时个性化特征这类数据量不大但延迟极敏感的场景;向量与缓存、队列、会话状态共用一个 Redis,部署心智负担最小。内存成本高,不适合海量历史数据。

9. Faiss:绕不开的”引擎”(但不是数据库)

  • 定位:Meta 开源的向量检索库(MIT 许可),C++/Python,GPU 支持业界最强,IVF-PQ、HNSW 等索引实现是很多数据库的底层依赖;
  • 边界:没有服务化、没有持久化管理、没有元数据过滤和增删改的完整语义,过滤要自己写、分布式要自己搭;
  • 适合:离线大规模索引构建、推荐召回引擎自研、作为自建系统的检索内核。需要”数据库”时,选把 Faiss 包好的上层产品即可。

顺带一提:LanceDB(嵌入式、磁盘列式格式、多模态数据湖方向)、Vespa、腾讯云 VectorDB、MongoDB Atlas / 阿里云 AnalyticDB 的内置向量能力等,也都在各自生态里值得一看。2026 年的一个明显趋势是:向量能力正在从”独立品类”泛化为各类数据库的标配功能,SQLite-vec、DuckDB VSS 这类轻量方案也在把门槛降到个人开发者水平。


四、场景化选型参考

综合各方案的定位,可以得到一张社区共识度较高的决策清单:

你要不要自建?
├─ 不想运维,要 SLA ──────────────→ Pinecone / Zilliz Cloud(托管版)
└─ 自建
   ├─ 原型 / Demo / 课程 ─────────→ Chroma、Milvus Lite
   ├─ 已有 PostgreSQL,千万级以内 → pgvector(不够再上 pgvectorscale)
   ├─ 已有 ES/OpenSearch 集群 ────→ 直接用 kNN + RRF 混合检索
   ├─ 中等规模自建,资源敏感 ─────→ Qdrant
   ├─ 亿级以上 / 多租户 / 多模态 ─→ Milvus
   ├─ 会话记忆 / 语义缓存 ────────→ Redis
   └─ 离线索引 / 自研召回引擎 ────→ Faiss

再补充三条在各家文档与社区讨论中反复出现的建议:

  1. 别过早优化:向量检索这一层的抽象高度趋同(写入—Embedding—ANN 查询—过滤),从 pgvector/Chroma 迁到 Qdrant/Milvus 的成本,远低于一开始就背上一个运维负担更重的分布式集群;
  2. 过滤和混合检索比索引算法更重要:生产事故里,九成源于”该过滤的没过滤”或”专有名词没被 BM25 兜住”,而不是 HNSW 召回率差了 0.5%;
  3. 压测要用真实数据:召回率、QPS、内存占用高度依赖维度分布与数据量,各家官方 benchmark 只能当参考,动手前用自己 1 万条真实向量跑一遍最踏实。

五、总结

向量数据库的本质,是给 AI 系统补上了**“按语义存取记忆”**这块传统数据库从未覆盖的能力拼图:

  • 在 RAG 里,它是知识库底座,治大模型的幻觉与知识过时;
  • 在 搜索与推荐里,它是语义召回引擎,让”懂你”从口号变成基础设施;
  • 在 Agent 里,它是长期记忆的载体,让对话跨越上下文窗口的遗忘曲线;
  • 在 多模态与安全场景里,它是统一的相似度计算层。

选型主线可以浓缩为一句话:原型 Chroma、起步 pgvector、自建 Qdrant、规模化 Milvus、免运维 Pinecone、已有搜索栈直接 ES。工具会不断迭代(向量能力正在泛化成数据库标配),但「Embedding → 相似检索 → 过滤融合」这套范式,会是未来很多年 AI 应用工程的基本功。

回到我自己的出发点:RAG 选型时那个”心里没底”的问题,在补完这一课后有了答案——Milvus 对我的场景是合理起点,而它的 Standalone → Distributed 升级路径也留足了量级增长的空间。希望这篇全景梳理,也能帮你在这波基础设施浪潮里,快速找到适合自己项目的那个”记忆中枢”。

Share:

回看感悟累计回看 — 次

加载中…

Back to Blog

Related Posts

View All Posts »

文本向量化演进:从 Word2Vec 到现代 Embedding 模型

文本向量化是搜索、推荐与 RAG 共同的地基。本文快速回顾 one-hot、TF-IDF、Word2Vec 等经典方案的思路与局限,重点拆解现代 Embedding 模型的三大支柱:BERT 上下文表示、Sentence-BERT 句向量专用化与对比学习训练范式,并盘点 BGE、GTE、E5、OpenAI text-embedding-3 等主流模型与 MRL、指令前缀等关键技术。