1. 为什么 2026 年向量数据库成了硬通货
最近几个月,我陆续被身边不少朋友问到同一个问题:“AI 时代都讲究大模型,为什么你们做 RAG、做 Agent 的人,天天在折腾向量数据库?”或者说得更直接一点:“ai 智能体的企业知识库是存放在向量数据库中的吗?”
答案是:不完全是,但大概率是。企业做知识库,原始文档通常会放在对象存储或者企业内部网盘里,文档处理管线会把它们切成一段一段的 chunk,再交给 embedding 模型转成向量,最终这些“向量 + 原文 chunk + 元数据”的组合,才真正落进向量数据库。也就是说,向量数据库更像是知识库的“检索层中枢”,负责在你问出问题时,在毫秒级时间里从几十万甚至几亿条文本片段中找出最相关的那一批。
为什么 2026 年这件事格外重要?因为 Agent 开始大面积落地了。2025 年大家还在聊“能不能做一个 ChatBot”,到了 2026 年,更多人已经在做带工具调用、带多轮记忆、带私有知识约束的 Agent。Agent 的短期记忆可以做在会话里,长期记忆呢?企业专属知识呢?几乎都会落到向量检索上。所以向量数据库从“大模型周边组件”变成了“AI 应用基础设施”,这不是概念炒作,而是实实在在的工程需求。
这篇文章我就基于自己的使用经验,把 2026 年最值得学习的 10 个向量数据库系统性地盘一遍。不会只列官网宣传语,而是会讲清楚每一个适合什么场景、有什么坑、怎么选型。想入行 AI 工程的同学,或者已经在做 RAG/Agent 的开发者,都能直接对照自己的项目找答案。
2. 选型前先补课:看懂 5 个决定性维度
2.1 索引算法:不搞懂 HNSW 就是瞎选
所有向量数据库的核心差异,一半藏在索引算法里。你要理解一个朴素事实:向量检索不是“精确查找”,而是“近似查找”,英文叫 ANN(Approximate Nearest Neighbor),意思是找一个“足够接近”的集合,而不是全表扫描出数学上的最优点。
目前工业界最主流的算法是 HNSW(Hierarchical Navigable Small World),通俗点说,它通过多层图结构来加速搜索:上层图连接稀疏,用于快速跳到目标区域;底层图连接密集,用于精细找邻居。绝大多数向量数据库默认索引都是 HNSW 或它的变体,比如 Milvus 里的 Knowhere 索引库、Qdrant 的 HNSW、Chroma 的 HNSW 实现,底层思路殊途同归。
除了 HNSW,你还会看到 IVF(倒排文件)、DiskANN、PQ 量化等概念。IVF 的思想类似图书馆先按大类分架,再在架子上细找,训练速度快,但召回率调参比较麻烦;DiskANN 适合内存放不下的超大场景,主打一个“用磁盘换容量”,延迟会比纯内存高一个数量级,但成本低很多。
学习建议:先死磕 HNSW 的 M 和 efConstruction 两个参数。M 相当于每个节点最多连几个邻居,M 越大图越精细、内存越高;efConstruction 是构建时的搜索宽度,越大索引质量越好,但构建越慢。这两个参数直接决定“内存、召回率、速度”三角怎么平衡。
2.2 部署形态:云托管、开源自建、嵌入式,怎么取舍
向量数据库的部署方式可以粗略分成三派:云托管 SaaS、自建开源服务、嵌入式/插件。
云托管 Saa S 的代表是 Pinecone、Zilliz Cloud 这类服务,最大的优点是省心,网络、备份、扩容全是平台的事,缺点是你只能使用平台提供的 API 和配置项,对底层控制力弱,长期成本也不便宜。
自建开源服务的代表是 Milvus、Qdrant、Weaviate 这类,你需要自己部署容器、管理分布式组件、监控资源水位。优点是完全可控、数据不出内网,适合企业对数据主权有要求、或者数据量大到云服务费用吓人的场景。
嵌入式/插件的代表是 Chroma、LanceDB、pgvector 这类,它们直接嵌在你的应用进程里,或者以数据库扩展的形式存在,不用额外起一个服务。最典型的场景是开发环境、小规模生产、以及“我不想再维护一套中间件”的项目。
我的个人判断是:如果你的团队连 Docker 都用不熟,先别折腾自建;如果只是做 MVP 验证,就用嵌入式;如果已经有明确量级和数据隐私要求,再上开源服务或云托管。选型顺序一定是“场景 -> 部署能力 -> 功能”,不要反着来。
2.3 过滤、元数据与混合检索能力
很多新手只盯着“向量检索有多快”,却忽略了一个事实:真实业务里的检索,永远是“条件过滤 + 向量召回”一起做。
举例:一个电商知识库,用户问“今年新上架的红色夹克有哪些”,你的系统得先限定分类=夹克、上架时间=今年、颜色=红色,再做向量匹配。如果向量数据库不支持高效的标量过滤,你就只能先把整库向量拉出来再一个个判断,一旦数据量上来,延迟直接爆炸。
所以选型时要关注几个能力点:filter 语法是否灵活(支持 and/or/范围/嵌套)、过滤与向量检索是否走同一个索引(post-filter 还是 pre-filter)、有没有混合检索能力(向量 + BM25/全文检索的融合)。这里 Qdrant、Elasticsearch、Weaviate 都做得比较成熟,Chroma 的过滤能力弱一些,Pinecone 的过滤也有限制,数据量大时建议提前压测。
2.4 集成生态:LangChain / LlamaIndex / Spring AI 都要认
2026 年做 AI 应用,几乎没有人会裸写一个检索链路,大家都在用框架。LangChain、LlamaIndex、或者 Java 技术栈里的 Spring AI,都对各种向量数据库封装了统一的 VectorStore 接口。
这种封装带来一个好处:你的业务代码可以做到“换库不换业务逻辑”。举个例子,你在 Spring AI 里配置一个 ChromaVectorStore,后面数据量上来了要切到 Milvus,只需要改依赖和配置类,DAO 层的代码基本不用动。但也别因此忽略数据库本身的差异,因为框架封装的是 80% 的通用功能,剩下 20% 的过滤、索引、分区配置,往往是性能瓶颈所在。
另一个容易被忽视的生态项是 Embedding 模型的配合。很多向量数据库都有内置的 embedding 函数,比如 Qdrant 的 FastEmbed、Weaviate 的 modules,可以直接把文本变成向量。这种“库内嵌模型”的模式在原型阶段非常爽,但生产环境我更建议把 embedding 单独做成服务,因为模型的升级、回滚、缓存都要独立管理。
2.5 成本、规模与可观测性
最后但也很重要的一环是成本和规模。
成本分两层:内存成本和运维成本。HNSW 索引对内存的消耗不小,一个 768 维的 float 向量,单条大概 3 KB,1000 万条就有 30 GB 左右,这只是向量本身,还没算上索引的额外开销。所以做容量评估时,别只看样本集跑得多快,要按 1000 万、1 亿条量级去算内存。
运维成本看的是排查问题是否方便。有没有提供查询耗时、命中率、内存使用率的监控面板?能不能直接把大查询的日志拉出来?分布式模式下有没有清晰的分区机制?这些在 demo 里感受不出来,生产环境一出问题,没有可观测性的数据库能让你排查到崩溃。
我在生产环境选型时有一个“土办法”:把团队的真实数据集灌进去,分别测三个阶段——全量导入、并发查询、故障恢复。尤其是故障恢复,很多数据库在查询时表现很好,一断电、一重启,要么重建索引要半小时,要么主从数据不一致。这个测试千万不能省。
3. 第一梯队:大规模专用型选手
3.1 Milvus:开源社区里最能打的那个
Milvus 几乎是“开源向量数据库”这个品类的代名词。它脱胎于知源,后来捐给了 Linux Foundation,2024 年发布的 2.4/2.5 版本在性能和易用性上有了很大提升,到了 2026 年,Milvus 已经成为大部分中大型企业自建向量检索基建的第一选项。
Milvus 的特征是“重但是完整”。它的架构把数据分为四个部分:接入层(Proxy)、协调服务(Coordinator)、工作节点(Worker Node)、存储层(对象存储/元数据存储)。查询请求先到 Proxy,Proxy 再调度到对应的 query node,最后从对象存储里拿数据。这看起来复杂,但换来的是极强的扩容能力:数据量大了就加 query node,内存不够就横向扩展。
另外一个很多人没注意的点是 Milvus 使用 Knowhere 作为内部索引库,Knowhere 把 Faiss、HNSWLib、DiskANN 等索引算法包装了一层,你不需要关心底层具体实现,只需要在创建 collection 时指定 index type 和 metric type。正常情况下用默认参数就能跑得不错,但如果你想调到最优,还是得手动设置nlist、nprobe这些 IVF 系参数,或者 M、efConstruction 这些 HNSW 参数。
Milvus 的缺点也很明显:运维成本高。如果你用 Docker Compose 起一个 standalone,其实还好;一旦上了分布式模式,etcd、MinIO、Pulsar(或 Kafka)这些依赖组件都得自己维护。所以我的建议是:有专门的平台/运维团队,或者数据量已经大到单机扛不住,再上 Milvus。如果只是几十万条数据,用它反而是杀鸡用牛刀。
过去两年里,我见过很多团队把 Milvus 用得极其痛苦,不是 Milvus 不行,而是他们的数据量根本到不了需要分布式的级别。Milvus 的收益曲线是这样:数据量小于 100 万条时,它的复杂度会让你非常难受;到了几千万甚至上亿条时,它才是真正的王者。
3.2 Qdrant:Rust 派的全能战士
Qdrant 是我个人近两年最偏爱的向量数据库,没有之一。它用 Rust 写的,单机性能非常强,安装又是一个 Docker 镜像搞定,很适合作为“从原型到生产”的平滑过渡方案。
Qdrant 设计上最大的优势是 Payload 体系。它允许你在每一条向量上挂 JSON 形式的元数据,并且支持复杂的过滤查询,比如field > 2024 AND color IN ['red', 'blue']。最让我满意的是它的过滤执行策略:Qdrant 能根据过滤条件可选择性决定先过滤还是后过滤,这在真实业务里非常关键。
另外一个亮点是 Qdrant 提供的混合检索能力。它在 1.10 版本左右加入了稀疏向量支持,可以把 BM25 式的关键词权重表示成一个稀疏向量,和稠密向量一起检索,最后用 RRF(Reciprocal Rank Fusion)融合结果。这一个功能就让很多团队不需要再单独维护一套 Elasticsearch 来做关键词兜底。
Qdrant 也有自己的小坑。比如向量维度和距离函数(Cosine、Dot、L2)在创建 collection 时就固定了,后面不能改;另一个是它的索引参数更新虽然 API 层面支持,但生产环境随意改索引参数会触发全量重建,这个耗时在没有预演的情况下会让你抓狂。
在 2026 年,如果你所在团队没有那么大的数据量、又不想被云厂商绑定,我非常推荐把 Qdrant 作为默认选项。它没有 Milvus 那么重,功能却覆盖了绝大多数 AI 应用的需求,是典型的“平衡型选手”。
下面把这两个第一梯队选手做个快速对比:
| 维度 | Milvus | Qdrant |
|---|---|---|
| 开发语言 | Go/Java | Rust |
| 部署复杂度 | 高,分布式依赖多 | 低,单容器即可 |
| 最大擅长场景 | 亿级+分布式大规模 | 千万级内单机高性能 |
| 过滤/元数据能力 | 支持,语法灵活 | 很强,payload 支持极好 |
| 混合检索 | 支持(多路召回) | 原生稀疏向量支持 |
| 运维压力 | 较高 | 较低 |
| 适合团队 | 有平台/运维能力的中大型团队 | 中小团队、追求快速落地 |
总之还是那句话:没有最好的数据库,只有最适合你场景的数据库。数据量大到 Milvus 的复杂度值得承担,就选 Milvus;数据量在百万到千万级、又想快手上线,Qdrant 几乎不会让你失望。
4. 第二梯队:RAG 开发者的日常选择
4.1 Chroma:轻量入门的首选,别忽略它的表结构
每次有人问我“第一次做 RAG,向量数据库选什么”,我的答案几乎都是 Chroma。它不是性能最强的,但它是学习曲线最平滑的。
Chroma 的定位是嵌入式向量数据库,API 设计非常贴合 Python 开发者的直觉。装一个chromadb包,加几行代码,就能把文档切块、embedding、检索整条链路跑通。它还内置了默认的 embedding 模型,你甚至可以连 OpenAI 的 API 都不配,直接本地跑起来。
但很多开发者在用完 Chroma 之后会遇到一个疑问:添加一个集合后,数据目录里产生了 sqlite 数据库和一堆表,这些表到底是干嘛的?我拿 v0.5.x 的默认配置举过例子,最常见的表包括这些:
| 表名 | 大致作用 |
|---|---|
collections | 集合主表,记录集合 id、名称、配置等信息 |
collection_metadata | 集合的元数据,存 embedding 模型、向量维度等附加信息 |
embeddings | 核心向量表,存每个文本片段的 id、向量内容所属的 segment |
embedding_metadata | 向量对应的元数据,比如原文 chunk、来源文档、时间戳 |
segments | 索引分段表,相当于把一个集合分成多个数据分片管理 |
max_sequence_id | 内部自增序列,用于保证 ID 生成不冲突 |
embedding_fulltext_search | 全文检索的 FTS 表,Chroma 用 SQLite 自带的 FTS5 做了关键词检索 |
这些表的关联关系可以这样理解:collections.id指向多个segments,也就是一个集合在物理上分成若干段;每个segment里有若干embeddings;每一条embedding在embedding_metadata里存配套元数据;当你做全文检索时,embedding_fulltext_search会帮你快速命中候选 id,然后再回到embeddings里取向量。了解这个结构后,你排查“为什么我删了集合但磁盘空间没变小”“为什么查询特别慢”这类问题会更有方向。
Chroma 的局限也是明显的:单机、数据量大了会吃力,过滤查询能力比较弱,也没有内置的高可用方案。所以我的建议是:拿它做原型、做学习 demo、做个人知识库完全没问题,但企业级生产环境,尤其是并发和多租户场景,建议尽早切换到 Qdrant 或 Milvus。
4.2 Weaviate:GraphQL 与原生模块化
Weaviate 的名字可能没有 Milvus 那么响,但它的设计理念很特别。它更像是一个“AI 原生的数据库服务”,内置了向量化模块、生成式搜索模块,甚至可以直接在库里调用大模型做 RAG。
Weaviate 使用 GraphQL 作为查询语言,这是它的特色也是学习门槛。刚上手时你会觉得多此一举,但用久了会发现 GraphQL 的表达力很强,可以在一次请求里完成过滤、向量召回、NearText 语义查询、以及返回结果的字段裁剪。
它的另一个卖点是模块化。你想用 OpenAI 的 embedding,配置一个模块;想用 Hugging Face 的模型,再配置一个模块。而且 Weaviate 还支持多租户,自带对象存储和 HNSW 索引,部署形态允许单机模式,也支持 Kubernetes 集群模式。再加上它和 LangChain、LlamaIndex 的集成比较成熟,很多做知识库产品的中型团队会选择它。
Weaviate 的缺点在于,如果你习惯了 SQL 或普通 NoSQL 的表达范式,GraphQL 的调试过程会比较别扭;另外它的写路径比读路径重,高频写入场景(比如日志型数据)不是它的强项。换句话说,Weaviate 更适合“数据量稳定、查询语义丰富、需要把 AI 能力和检索深度耦合”的产品。
4.3 pgvector:PostgreSQL 用户的“最小成本”升级
不懂工程的人可能会觉得向量数据库多高深,但对 PostgreSQL 用户来说,它就是一个扩展插件而已。pgvector这个扩展,直接让 PostgreSQL 支持了 vector 类型和 ANN 索引。
如果你的团队已经在用 PostgreSQL,业务数据天然就在库里,这时候遇到向量检索需求,最省事的方式不是再引入一个新数据库,而是装一个 pgvector。你可以让业务字段和向量字段存在同一张表里,用 SQL 语法完成检索和过滤,事务、权限、备份体系全部复用原有能力。这种“最小成本升级”对很多传统企业项目来说,是政治上和技术上都最稳妥的方案。
pgvector 目前支持 HNSW 索引和 IVFFlat 索引。IVFFlat 适合数据量不大、构建速度优先的场景;HNSW 延迟更稳定、召回率更好,但建索引时占用内存更高。查询语句看起来是这样的:
SELECT id, content, embedding <=> $1 AS distance FROM documents WHERE category = 'note' ORDER BY embedding <=> $1 LIMIT 10;这里<=>表示余弦距离,也可以用<->表示 L2 距离。注意 pgvector 默认不支持“过滤后再向量检索”的原生优化,它是先算出距离再过滤(或者先粗筛再算),数据量到几百万后性能可能明显下降。
所以 pgvector 的定位很清晰:适合几百万量级以内、不想引入额外组件、团队本来就熟悉 PostgreSQL 的项目。一旦你的向量数达到千万级,或者查询并发很高,就不要再硬撑了。
4.4 Elasticsearch:老检索玩家的新路线
很多企业早就有 Elasticsearch,当年是拿来做日志检索、商品搜索的。随着 AI 项目启动,大家发现 Elasticsearch 在 8.x 之后已经原生支持稠密向量检索,如果你原本就在用 ES,完全可以直接在这个老伙计身上开启向量检索功能。
ES 的向量检索核心有两个:dense_vector字段类型和 HNSW 索引。你可以建一个 mapping 时声明type: dense_vector,指定维度,然后利用knn查询选项完成召回。最舒服的是,你可以在同一个查询 DSL 里做“关键词 + 向量”的混合检索,再用rank_feature或者 RRF 把两种结果合并。这意味着你不需要在 ES 和向量数据库之间同步两份数据。
代价是什么?性能。ES 的向量检索和 Milvus/Qdrant 这种专业选手比,同样量级下延迟通常更高,内存占用也更夸张。另外,ES 的元数据过滤和 BM25 都很强,但它的强项不是高并发低延迟的向量召回,而是“把向量能力塞进原有搜索架构”的便利性。
对于已经重度依赖 ES 的团队,我特别不建议动不动就“上一套新数据库”。先用 ES 自带的向量能力跑一版,等真到了瓶颈再迁移也不迟。这比一开始就建一个分布式 Milvus 集群要务实得多。
5. 第三梯队:托管服务、文档库与缓存派
5.1 Pinecone:不想运维就直接选它
Pinecone 是云托管向量数据库里知名度最高的一家。它最大的价值不是性能参数多好看,而是帮你把“维护分布式系统”这件事完全抹掉了。你注册账号、建 index、拿 API key,然后把向量传上去,剩下的扩缩容、故障恢复、索引优化,全都不用管。
对于初创公司或大厂里的创新业务团队,Pinecone 的按量付费模式很有吸引力:几十万条向量时成本很低,业务量起来后再升级到更大的 pod。它的 API 设计也很简洁,Python 版的客户端非常易用,和 LangChain/Spring AI 的集成都不用动脑子。
不过 Pinecone 有两个“暗面”。第一,它是完全托管,数据离开自己的 VPC,很多对数据安全敏感的企业过不了合规这一关;第二,它的高级功能(比如自定义索引参数调优、对底层物理资源的掌控)几乎没有,遇到性能问题只能提工单。2026 年的趋势很明显:企业一旦数据量稳定,会从 Pinecone 迁回开源自建。我身边已经有好几个朋友从 Pinecone 迁到了 Qdrant 和 Milvus。
5.2 MongoDB Atlas Vector Search:顺手而为的文档向量化
MongoDB 在 2022 年就推出了 Atlas Vector Search,到了 2024/2025 之后,这个能力已经被整合为 Atlas 平台的默认组件之一。如果你的业务数据本来就在 MongoDB,向量的引入会让你产生一种“知识库和业务数据终于合体了”的爽感。
Atlas Vector Search 支持在同一个文档里既存业务字段又存向量字段,并且提供$vectorSearch聚合管道操作符。你可以先用业务字段做 pre-filter,再进行 HNSW 检索,返回结果时还能顺便做聚合统计,这是很多独立向量数据库做不到的。
但 Atlas 本身是一个付费云服务,自建 MongoDB 并不包含 Vector Search(自建版虽然有一些实验特性,但不建议生产使用)。所以这个选项基本是“人在 MongoDB Atlas,顺便做向量检索”的场景,不太适合为了向量检索特意迁到 MongoDB 的用户。
5.3 Redis Stack:查询很快,但别太当真
Redis 在 2022 年发布了 Redis Stack,内置了RediSearch模块,支持向量检索。它的优势是极快的响应速度和极简的运维模型,很多已经用 Redis 做缓存的团队,顺手就把向量也存进去了。
我用 Redis Stack 做过一次 POC,最直观的感受是:导入快、查询快、代码少。如果数据量在百万条以内,它的延迟和 Qdrant 不相上下。但真正到了生产级规模,Redis 的短板就暴露了:内存成本非常高昂(它本来就是纯内存数据库),持久化和恢复机制比专业向量库弱,向量检索的过滤能力也比较基础。
所以我的定位是:Redis Stack 适合在线推荐、会话记忆、实时去重这类“低延迟、可容忍偶发丢失、数据量可控”的场景,不适合当作企业知识库的核心存储。
5.4 LanceDB:嵌入式向量库的轻量担当
LanceDB 是这两年崛起的一个嵌入式向量数据库,底层基于 Lance 列式格式。它的理念是“向量检索不是一个数据库问题,而是一个数据文件问题”,把数据集当作文件来管理,不需要服务器进程。
好处很明显:轻、快、易嵌入。你在 Python 脚本里pip install lancedb,然后指定一个本地目录,一个数据库就“活”了。它还支持多模态数据,因为 Lance 格式本身就是为大规模非结构化数据设计的,图像、视频、文本都能以统一格式存储。
LanceDB 目前的局限是生态不如 Milvus/Qdrant 成熟,分布式和高可用方案需要自己搞,过滤查询的表达式能力也偏简单。它特别适合本地数据分析、边缘计算场景,以及单机数据科学工作流。如果你的项目是给客户做私有化部署,LanceDB 这种“不需要额外起服务”的优势会非常明显。
6. 新人学习路线与调优避坑
6.1 我的建议学习顺序
很多刚入门的朋友问我,这 10 个数据库是不是都要学一遍?当然不是。我建议按这条路线走:
先选一个最轻的,我推荐 Chroma,用一周时间把“文档切块 -> embedding -> 入库 -> 检索 -> 过滤”全流程跑通,重点理解集合、文档、向量、元数据这些概念。然后切换到 pgvector 或者 Qdrant,把同一个流程再实现一遍,对比它们在索引、过滤、参数配置上的差异。这时候你对“向量数据库”的认知就已经超过大多数只会调 LangChain API 的人了。
接着补 HNSW 和 IVF 的原理,不用写源码,但要能说出 M、efConstruction、nlist、nprobe 这几个参数分别影响什么。然后选一个数据集,比如 100 万条文本向量,分别灌进 Milvus 和 Qdrant,用真实数据测 recall 和延迟。到这里,你已经具备在生产环境选型和调优的基本能力。
至于 Spring AI、LangChain 这些框架,放在最后学。因为框架是在帮你封装细节,如果你连底层数据模型都没建立起来,遇到 bug 时根本不知道是框架的问题还是数据库的问题。
6.2 HNSW 参数怎么调
HNSW 的参数调优是向量数据库工程里最常被问到的内容。我直接给一套可复用的经验值:
M:默认通常是 16,推荐范围 8-64。M 越大,索引图越稠密,召回率越高,但构建时间和内存都会上升。对于千万级数据,我一般从 16 起步,先测试 32,再对比召回率提升是否值得额外内存。efConstruction:默认一般是 200 左右。它影响建索引时的搜索宽度,越大索引质量越好,但构建越慢。我的习惯是固定 M 后,efConstruction 从 100 开始翻倍,观察召回率增长曲线,通常到 200-300 之后收益会明显递减。- 查询时的
efSearch(很多库叫ef):这个不是建索引时的参数,而是每次查询时传的搜索宽度。efSearch 越大,查询越慢、召回越好。生产环境我会先给一个设置界面,让 QA 在延迟和召回率之间找到一个可接受的平衡点。
一个常见误区是:为了追求高召回率,无脑把 efSearch 调到很大。实际上,如果你的召回率低是因为 chunk 切得不好、embedding 模型不适合领域,那么再怎么调 efSearch 都是白费。我见过太多团队花一周疯狂调参数,最后发现问题是文档切块时把一句话切成两半了。先排查数据质量,再调参,顺序不要搞反。
6.3 几个容易踩的坑
第一个坑是距离函数选错。很多教程默认用余弦距离,但有些 embedding 模型在训练时使用的是点积或欧氏距离,混用时召回会非常差。选距离函数前,先翻一下你 embedding 模型的说明文档。如果实在不确定,把同一批向量分别用余弦和点积跑一遍,看结果差距大不大。
第二个坑是“只存向量,不存原文”。有同学为了省空间,只在库里放向量和 id,原文存在别的系统里。结果每次检索都要回源查一次原文,延迟直接翻倍。我建议检索链路里就把原文 chunk 放进元数据字段,这样一次查询就能返回全部内容,代价只是多占一点存储空间。
第三个坑是高维向量性能暴跌。很多新项目一上来就用 3072 维的 embedding 模型(比如 OpenAI 新模型),数据量一大,内存和延迟都下不来。针对这种情况,要么降维(比如用 PCA 从 3072 降到 1024),要么直接用支持量化压缩的数据库。1056 维和 3072 维的差别,在千万级数据量上就是“能跑”和“跑不动”的区别。
第四个坑是忽略了 embedding 升级带来的“脏数据”。只要换了 embedding 模型,旧向量和新向量算出来的距离就没有可比性了。但很多团队直接在原集合里灌新向量,结果新旧数据混合,检索质量严重下降。正确做法是给向量数据打上 model_version 标签,并在检索时强制过滤为当前版本,或者干脆在升级时全量重建索引。
最后分享一个实际体会
这几年帮团队做过不少次向量数据库选型,我最深的体会是:不要迷信排行榜,也不要迷信“用了某种数据库就显得高级”。真正决定 RAG 和 Agent 上限的,永远是你的数据处理流程、chunk 策略、embedding 模型质量和检索后的重排逻辑。向量数据库只是“承重墙”,但它不需要比别的墙更漂亮,只需要足够稳、足够适合你家的结构。
如果让我给 2026 年想入场的人一句建议:先用 Chroma 跑通全流程,再用 Qdrant 做一版接近生产的系统,最后按数据增长情况决定要不要上 Milvus。这条路径我已经带好几批人走过了,踩坑最少,成长最快。