· 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再补充三条在各家文档与社区讨论中反复出现的建议:
- 别过早优化:向量检索这一层的抽象高度趋同(写入—Embedding—ANN 查询—过滤),从 pgvector/Chroma 迁到 Qdrant/Milvus 的成本,远低于一开始就背上一个运维负担更重的分布式集群;
- 过滤和混合检索比索引算法更重要:生产事故里,九成源于”该过滤的没过滤”或”专有名词没被 BM25 兜住”,而不是 HNSW 召回率差了 0.5%;
- 压测要用真实数据:召回率、QPS、内存占用高度依赖维度分布与数据量,各家官方 benchmark 只能当参考,动手前用自己 1 万条真实向量跑一遍最踏实。
五、总结
向量数据库的本质,是给 AI 系统补上了**“按语义存取记忆”**这块传统数据库从未覆盖的能力拼图:
- 在 RAG 里,它是知识库底座,治大模型的幻觉与知识过时;
- 在 搜索与推荐里,它是语义召回引擎,让”懂你”从口号变成基础设施;
- 在 Agent 里,它是长期记忆的载体,让对话跨越上下文窗口的遗忘曲线;
- 在 多模态与安全场景里,它是统一的相似度计算层。
选型主线可以浓缩为一句话:原型 Chroma、起步 pgvector、自建 Qdrant、规模化 Milvus、免运维 Pinecone、已有搜索栈直接 ES。工具会不断迭代(向量能力正在泛化成数据库标配),但「Embedding → 相似检索 → 过滤融合」这套范式,会是未来很多年 AI 应用工程的基本功。
回到我自己的出发点:RAG 选型时那个”心里没底”的问题,在补完这一课后有了答案——Milvus 对我的场景是合理起点,而它的 Standalone → Distributed 升级路径也留足了量级增长的空间。希望这篇全景梳理,也能帮你在这波基础设施浪潮里,快速找到适合自己项目的那个”记忆中枢”。
回看感悟累计回看 — 次
加载中…