向量数据库已成为AI应用程序堆栈的核心组件,特别是用于检索增强生成(RAG)。以下是它们实际上是什么以及它们真正有帮助的情况。
什么是向量数据库
向量数据库存储并搜索在高维空间中表示为数值向量(嵌入)的数据。核心操作不是”查找这条确切记录”(像关系数据库那样)或”查找包含此关键词的记录”(像全文搜索引擎那样),而是”查找与此查询向量最相似的记录”。向量如何创建:嵌入模型(OpenAI text-embedding-3-small、Cohere embed-v3、Google text-embedding-004)将文本(或图像、音频)转换为通常384到3072维的数值向量。语义相似的内容产生相似的向量——”automobile”和”car”在空间中产生接近的向量,即使它们不共享任何字符。相似性搜索:向量数据库使用近似最近邻(ANN)算法——HNSW(分层可导航小世界)是最常见的——来查找最接近查询向量的K个向量。”近似”很重要:精确的最近邻搜索需要将每个存储的向量与查询向量进行比较(O(n)时间),这对于大型数据集来说太慢了。ANN以小幅精度损失换取数量级的速度提升。为什么这对AI很重要:语言模型有固定的上下文窗口——你无法将整个知识库填入提示。RAG通过将知识存储为嵌入、在查询时检索最相关的块,并仅将这些块包含在提示中来解决这个问题。向量数据库是检索引擎。
主要选择
Pinecone:托管云向量数据库——无需管理基础设施;强大的托管产品但专有。Weaviate:开源,可自托管或云;内置混合搜索(向量+BM25关键词)。Qdrant:开源,基于Rust,快速;强大的过滤能力;可自托管或云。Chroma:开源,Python原生,设计用于嵌入应用程序——在原型设计和较小部署中很受欢迎。Milvus:开源,为大规模生产设计;可以处理数十亿个向量。pgvector:一个添加向量相似性搜索的PostgreSQL扩展——当你已经使用PostgreSQL且不想添加另一个基础设施组件时的实用选择。Redis Vector(以前的Redis Stack):将向量搜索添加到Redis——如果Redis已经在你的堆栈中,则适合。pgvector的情况:对于大多数中小型RAG应用程序,pgvector是务实的选择。你在现有Postgres数据库中获得向量搜索,无需新服务,具有完整的SQL过滤,且无额外基础设施成本。专用向量数据库的情况:当你需要:十亿规模的向量存储;在极高查询量下毫秒以下的延迟;无需自托管Postgres的托管基础设施;或pgvector不暴露的高级ANN调整选项时。
向量数据库何时真正有帮助(何时没有)
明确的优势:对大型文档集合(内部wiki、客户支持知识库、法律文档)的语义搜索;基于语义相似性而非协同过滤的产品推荐;大规模内容去重(查找近似重复文档);以及RAG系统的检索组件。在没有好处的情况下增加复杂性:如果你的数据集少于100,000条记录,全文搜索引擎(Elasticsearch、Postgres全文搜索)甚至简单的LIKE查询可能完全足够;如果你的搜索主要基于关键词而不是语义,倒排索引搜索比向量搜索更快、更精确;如果你只需要与单个文档聊天,将其切片并填入上下文比构建检索管道更简单。常见错误:因为向量数据库现代而添加它,而不是因为问题需要语义相似性搜索。语义相似性对正确的问题确实强大;对于精确查找和结构化查询,它比关键词搜索差。



