选择用于RAG的向量数据库:八种方案的对比分析
从规模、过滤功能、成本及运维方面对比Chroma、Milvus、Qdrant、Weaviate、pgvector、Pinecone、Turbopuffer和TiDB,同时分析向量RAG的不足之处。
选择用于 RAG 的向量数据库时,关键在于几个实际问题:数据规模、过滤功能、部署方式,以及您的团队能够承受的操作量。在详细说明之前先给出简短结论:Chroma 和 pgvector 适合小型项目;Qdrant 和 Milvus 是自托管生产环境的常用选择;Pinecone 则是全托管方案。如果您的系统中已存在 Postgres,使用 pgvector 不会额外增加成本;而如果您希望几分钟内就能搭建本地环境,只需通过一条 pip 命令即可安装 Chroma。
像Qdrant、Milvus和Weaviate这样的开源引擎在召回率和延迟方面能够与付费平台相媲美,而且每种引擎都提供免费的本地部署方案,同时也有可选的付费云服务。还有一个值得记住的数字:在实际测试中,将密集向量检索与稀疏BM25关键词搜索相结合,使得Recall@10指标从大约78%提升到了大约91%,这也是为何下面众多选项中都会出现混合搜索方式。
向量数据库是大多数生成式AI应用背后的检索层。它让企业能够将语言模型基于自身数据运行,从而确保答案的准确性并贴合特定领域需求。随着非结构化数据量的不断增加,检索能力成为影响质量的主要瓶颈,因此做好选择就需要了解索引算法、过滤机制以及相关基础设施的成本。
向量数据库的实际功能
向量数据库存储高维嵌入向量,并通过余弦相似度、点积或L2距离来判定存储的行与查询向量的接近程度,从而对它们进行排序。关系型引擎则通过匹配精确的词条来实现检索,而BM25算法则通过计算词项的重叠度来评分。对于“cheap automobile”这样的查询,向量搜索能够返回与“affordable cars”相关的文档,因为这两个短语在嵌入空间中位置相近。
不过这也存在一个问题:精确的k最近邻搜索每次查询的复杂度为O(N·d),当向量数量超过几十万时便不再实用。为了解决这一问题,向量数据库愿意牺牲一定的召回率,转而使用近似最近邻索引,这类索引能够在对数级时间内给出查询结果。
选择前的评估要点
那些跳过评估的团队往往会在实际应用中遇到瓶颈,有四个方面值得重点考察。
检索质量与延迟。Recall@K 可以显示系统在其前 K 个结果中找到真正最佳匹配的频率。召回率越高,意味着模型获得的都是最优质的信息。延迟以毫秒为单位,同样重要,工程师们通常关注 p95 或 p99 指标,因为它们反映了用户实际体验中的最慢情况。
元数据过滤。通常需要通过结构化属性来缩小查询范围。例如搜索“公司政策”时,可能只需检索特定日期之后或某个部门相关的文档。有效的过滤机制能将无关或未经授权的记录排除在结果之外。具备预过滤功能的数据库通常表现更好,因为它们会在向量搜索开始前就剔除不需要的记录,从而保障检索精度。
生态系统适配性。当数据库能与其他人工智能组件良好协同时,其实用性会大幅提升。LangChain和LlamaIndex的连接器可缩短构建可用RAG流程的时间。多种语言的客户端库以及对AWS、GCP等云平台的支持,决定了该系统融入现有企业软件的顺畅程度。
运营就绪性。这涉及系统是否能在高要求的实际生产环境中稳定运行:
- 可扩展性,即能够处理数十亿个向量及高并发查询流量。
- 多租户应用中用户之间的隔离机制。
- 符合SOC 2、HIPAA和GDPR等标准。
- 可观测性,便于监控搜索性能和资源使用情况。
免费及开源选项
开源引擎让您能够自行搭建基础设施,从而避免重复支付订阅费用。以下列出的引擎大致按性能从弱到强排序。
Chroma
Chroma 是一款为提升开发者效率而设计的嵌入数据库。它能让开发者最快地从空仓库构建出可用的 RAG 原型,许多人将其作为首选的向量存储工具。它非常适合黑客松、本地开发以及那些更注重便捷性而非分布式扩展能力的快速实验。
它的功能包括:一个简单的 Python API,可支持从临时的本地测试逐步过渡到持久的客户端-服务器模式;由 SQLite 提供支持的本地存储,无需配置数据库服务器;以及内置的嵌入函数,可在数据插入时自动将原始文本转换为向量,默认使用 all-MiniLM-L6-v2 等模型。它还能与 LangChain、LlamaIndex、OpenAI 和 Hugging Face 相连。
优点在于,安装只需简单的 pip install chromadb 操作,文本到向量的转换无需额外代码,且在本地运行时可完全掌控数据和基础设施。缺点则是它缺乏严格企业环境所需的安全性与多租户功能,当数据量超过几百万个向量时,其性能也无法与专为分布式系统设计的方案相媲美。
该核心数据库在 Apache 2.0 协议下免费提供,目前也有用于生产环境扩展的托管云版本。
Milvus
Milvus 是一种云原生的高度分布式向量数据库,将计算与存储分离。它专为那些需要处理海量数据——即数亿乃至数十亿个向量——的组织设计,在这类场景下扩展能力是必需而非可选的。
它的架构将数据节点、查询节点和索引节点分开。它支持多种索引类型,包括HNSW、IVF和DiskANN,因此可以根据特定硬件进行优化,同时还具备强大的GPU加速索引与搜索功能。节点可以随时添加或删除,而不会造成停机。
优点:数十亿级的数据集也能保持稳定性能,不会出现严重的p99延迟峰值;严格的节点隔离机制能让计算资源精确地分配到工作负载需要的地方;此外,其开源社区规模庞大,拥有丰富的文档和插件。缺点:基于Kubernetes的该系统需要投入大量的工程精力来进行部署、优化和运行,对于简单的RAG应用而言,etcd和Kafka这类额外的组件属于不必要的负担。
该引擎遵循Apache 2.0协议,可免费使用。其背后的公司Zilliz提供托管服务,价格从每月155美元起。
Qdrant
Qdrant 是一款用 Rust 编写的开源向量搜索引擎,其核心优势在于内存安全、高吞吐量以及出色的负载过滤功能。那些需要高速度与可靠性的团队往往会选择它,尤其是在需要丰富元数据过滤、自定义评分机制以及严格控制延迟的场景下,比如基于 RAG 的应用。
其底层采用名为 Gridstore 的 Rust 存储引擎,专为向量处理任务优化。该引擎支持组合式搜索设计,允许单个查询同时结合密集向量、稀疏向量以及元数据过滤条件。过滤操作会在 HNSW 遍历过程中于图结构内部完成,从而避免在搜索之后再进行过滤所导致的召回率下降问题。此外,Qdrant 还提供了 Qdrant Edge 版本,这是一种专为移动设备和机器人系统设计的轻量级嵌入式版本。
典型的p50延迟在4到5毫秒左右,即使在严格限制条件下也能保持较高的搜索精度,而且其许可证(Apache 2.0)属于宽松许可类型。不过也存在一些弊端:要为Rust核心代码做出贡献需要更高的学习门槛,而要获得最佳的HNSW搜索性能,则需要仔细调整内存和索引设置。
开源版本是免费的。Qdrant Cloud提供带有1GB存储空间的免费托管服务,同时还支持按使用量计费的集群服务。
Weaviate
Weaviate是一种专为人工智能设计的开源数据库,以类似图结构的数据对象为基础,将多种搜索方式和数据类型整合为统一的查询体验。当您需要成熟的混合搜索功能、对象间的复杂关联关系,以及内置在数据库中的人工智能工作流时,它是个理想的选择。
它原生融合了高精度相似度匹配与BM25关键词排序机制。向量化模块可连接OpenAI、Cohere和Hugging Face,为您自动完成文本向量化处理。数据存储在专为关系结构设计的类型化模式中,并具备多用户隔离与数据复制功能。
其优势在于减少了冗余代码,因为文本到向量的转换在数据库内部即可完成;可通过参数调节在精确的关键词匹配度与广泛的语义检索能力之间取得平衡;即便处理数亿条数据,也能保持毫秒级的稳定响应速度。缺点则是需要时间适应其类型化架构,且相比嵌入式方案占用更多资源。
该软件遵循BSD-3许可证,可免费使用。Weaviate Cloud提供无服务器托管服务,每月费用从45美元起。
PostgreSQL用的pgvector
pgvector 扩展将 PostgreSQL 转变为功能强大的向量存储引擎,能够将嵌入向量与常规事务数据一同存储。对于已使用 Postgres 且不愿再搭建另一套数据库的团队而言,这是最佳选择。
它为常规 SQL 模式添加了原生向量列类型,支持余弦相似度、L2 距离和内积运算,可构建 HNSW 和 IVFFlat 索引,并能在标准的 ACID 事务环境中执行相似度查询。
最大的优势在于无需承担独立系统的运营开销、安全审查及维护工作。现有的 Postgres 监控、备份和复制功能可直接沿用,元数据过滤只需在距离函数旁使用常见的 WHERE 子句即可实现。缺点则是内存占用更高,扩展性不如专为向量设计的引擎,而且当向量数量超过约 5000 万时延迟会明显上升,除非使用类似 pgvectorscale 的工具。
该扩展是免费且开源的。具体成本取决于您如何部署 Postgres。
付费及托管方案
托管数据库能降低维护难度,让团队能够专注于应用程序而非服务器本身。
Pinecone
Pinecone凭借无服务器、零运维的设计,隐藏了所有后端基础设施,从而大致定义了托管向量数据库这一类别。它适用于那些希望快速投入生产、而无需管理服务器、集群或索引参数的团队。
它完全以云SaaS形式运行,将读取、写入和存储层分开,使各层能够独立扩展;通过Pinecone Inference支持嵌入模型和重排序模型,并能处理密集向量、稀疏向量以及高效的元数据过滤。作为回报,用户无需处理任何基础设施相关的工作,也无需进行补丁更新或索引重建,同时还具备广泛的框架和云平台兼容性,以及在负载下仍能保持高性能的高可用性。
其缺点在于它是闭源系统,这意味着存在真正的供应商锁定问题;此外,对于需要大量读取和写入操作的工作负载,其按使用量计费的模式会导致费用迅速上升。
价格如下:免费的基础版(2 GB存储空间,100万次读取权限,仅支持AWS us-east-1区域);标准版每月最低费用为50美元,费用标准为每GB每月0.33美元,此外每100万次写入操作约需4至4.50美元,每100万次读取操作约需16至18美元;企业版每月最低费用为500美元;还有HIPAA合规附加服务,每月费用为190美元。
Turbopuffer
Turbopuffer是一种直接构建在云对象存储之上的无服务器搜索引擎,其核心优势就在于成本效益。对于那些需要管理大量命名空间且必须控制开支的多租户SaaS及AI产品而言,它是最佳选择。
它跳过传统磁盘直接在对象存储上搜索,可处理数十亿个向量且对命名空间没有上限,采用专为搜索优化的SPFresh索引,还能让写入操作立即反映在搜索结果中。与旧版托管服务相比,其存储和查询成本大幅下降,避免了因多租户设计而产生的按容器计费陷阱,标准套餐还具备SOC 2和HIPAA合规性。
不过,它的代码为闭源,发展历史比成熟的竞争对手较短,插件生态系统和集成功能也较为薄弱。计费完全基于使用量,标准套餐每月最低费用为64美元,大型命名空间的查询还能享受批量折扣。
TiDB向量搜索
PingCAP的TiDB Vector Search将分布式SQL数据库与自研的嵌入引擎相结合,使得大规模事务处理与语义检索能够在同一个可扩展系统中同时进行。当需要极高的水平扩展能力,同时还要对同一数据执行复杂的SQL过滤操作和向量搜索时,这种设计尤为实用。
该平台整合了嵌入存储与分布式SQL功能,在HNSW向量索引旁构建常规SQL索引,将查询分散到多个节点上以提高可用性,并支持混合搜索、精确关键词匹配以及向量相似度搜索。这样一来,就无需在应用数据库与独立的向量存储之间进行数据同步或处理流程传递,还能通过SQL连接实现高度过滤的多租户检索,且扩展时不会影响查询性能。
对于一个仅支持向量的轻量级RAG流程来说,这实在过于复杂了,而要彻底优化性能则意味着必须深入理解分布式SQL。
在TiDB Cloud Starter中,免费套餐是该类别中最慷慨的:每个集群拥有5 GiB的行存储空间、5 GiB的列存储空间以及5000万次请求单元,一个组织最多可创建5个集群。这样每月可免费获得25 GiB的行存储、25 GiB的列存储以及2.5亿次请求单元。超出部分,在us-east地区,每百万次请求单元需支付0.10美元,每GiB·月的行存储空间需支付0.20美元。
向量RAG的不足之处
向量搜索虽然功能强大,但仍存在一些缺陷,会影响其在企业环境中的使用精度。
- 上下文丢失。传统的向量RAG技术会将文档切割成小片段以适应上下文窗口的限制。这种机械式的处理方式会破坏复杂文档的结构,而小片段很容易失去与赋予其意义的标题或章节的关联。
- 精度不足。检索依赖于向量空间中的相似度,因此含义相近的术语或具有相似用词的产品名称容易混淆。错误的资料会被纳入提示词中,进而导致虚假信息的产生。
- 更新成本高昂。要更换为更好的嵌入模型,就需要对整个语料库重新进行嵌入处理,并从头构建大型索引,这会大幅增加计算成本和开支。
Graph RAG是一种可选方案。它将数据点视为节点,将关联关系视为边,而像Writer Knowledge Graph这样的工具则能保持文档之间的明确链接。这有助于实现多跳推理,减少幻觉现象,同时让团队只需更新单个事实,而无需重新嵌入所有内容。
实用的决策方法
从你已有的系统开始考虑。在存储量约为1000万向量的Postgres环境中,pgvector无需新增依赖即可完成任务,而pgvectorscale则可将处理能力提升到5000万甚至更高。在MongoDB上,可使用Atlas Vector Search。对于Elastic或OpenSearch,直接沿用现有版本即可,因为OpenSearch 3.0已大幅缩小了与其它系统的差距。在Redis中,则可利用Redis 8内置的向量功能及FT.HYBRID模式。
如果从零开始构建,需权衡以下三方面:
- 规模与处理能力。若需处理100万向量以内的原型开发,Chroma是合适选择;若需要自主托管且具备强大的过滤功能,Qdrant更为合适;面对数十亿级数据量或需GPU加速的场景,Milvus是最佳选择;而有合规性要求的托管式应用,则可选择Pinecone或Weaviate Cloud。
- 成本结构。在多租户场景下且多数租户处于闲置状态时,Turbopuffer能实现10到100倍的成本节省,不过冷查询的响应时间约为500毫秒;而对于需要处理5000万以上向量且负载可预测、对成本敏感的场景,pgvector搭配pgvectorscale更为合适。
- 推理需求。对于需要多跳查询、具备可解释性要求或需维护关系结构的场景,应引入Neo4j、Memgraph或FalkorDB等知识图谱系统,并将Graph RAG与向量数据结合使用,而非替代向量数据本身。
常见问题
如何为 RAG 构建向量数据库?先将文档分割成多个块,使用 OpenAI 或 BGE 等模型生成嵌入向量,再将这些向量存储在 Qdrant、Milvus 或 pgvector 等系统中并建立索引。对于完全本地部署的场景,则可在单台机器上运行 Chroma 或 FAISS,无需借助云端服务。
它的作用是什么?它是位于文档与大型语言模型之间的检索引擎,负责存储嵌入向量;在查询时,它会返回最相关的文档块,从而使模型能够基于具体的上下文而非仅凭记忆来回答问题。
应该选择哪种数据库?这取决于系统的规模和技术栈。对于中小规模应用,Chroma 和 pgvector 是最佳的免费选择;对于需要自托管的生产环境,Qdrant 和 Milvus 更为合适;而如果希望完全无需运维工作,Pinecone 则是最佳的选择。
向量在处理流程中是如何被使用的?嵌入模型将文本片段转换为高维向量,数据库负责存储这些向量。当有查询出现时,系统会通过近似最近邻搜索找到与查询向量最接近的向量,然后将对应的文本片段纳入提示词中。
是否必须使用向量数据库?并非如此,尽管它仍是行业默认选择。像PageIndex这样的无向量系统完全不使用嵌入技术,而是将文档转化为层次化树结构,让大语言模型通过目录结构来推理并找到答案。许多企业团队还会使用图数据库实现GraphRAG,通过明确的连接关系而非空间相似性来检索上下文。
RAG有哪七种类型?包括朴素RAG(先检索再生成)、检索并重排(常见的生产环境方案)、混合RAG(同时使用密集搜索和稀疏搜索)、多模态RAG(在同一个流程中处理文本、图像和音频)、图RAG(通过知识图谱遍历来处理关系型查询)、智能体RAG(LLM智能体为每个查询选择最佳检索策略)以及HyDE RAG(模型先草拟一个假设性答案,再据此进行检索)。
相关阅读
- 实用笔记:RAG中向量搜索的局限——余弦相似度及其应用——针对采用该模式的团队提供的实用笔记详细操作指南,包括相关契约、检查项以及可直接使用的代码片段。