Vector Database
向量数据库存储带有 ID 和元数据的嵌入,并为其建立索引,以便快速进行近邻搜索,是 RAG 和图像搜索的检索层。
向量数据库存储嵌入向量,也就是模型为文本、图像、音频或视频生成的数值向量,并为每个项目保存 ID 和元数据;它能够在数毫秒内从数百万或数十亿个项目中回答“哪些已存储向量与这个向量最接近?”这个问题。它将向量搜索索引与数据库功能结合起来,包括插入、更新和删除、按元数据筛选、持久化、访问控制以及跨机器复制。向量数据库为检索增强生成(RAG)、语义搜索和推荐系统提供检索步骤。
向量数据库的工作原理#
在写入流程中,嵌入模型(可以位于数据库外部,也可以内置于数据库中)会将每个项目转换为向量,数据库则将向量与 ID 及元数据载荷一并存储,例如源文件、日期、摄像头或客户信息。将查询与每个已存储向量进行比较虽然精确,但在大规模场景下速度很慢,因此数据库会建立近似最近邻(ANN)索引。HNSW会在分层图中将每个向量连接到其近邻,搜索时会沿图贪心遍历;倒排文件(IVF)索引通过k 均值聚类对向量分组,只扫描与查询最接近的簇;而向量量化方法(例如乘积量化)会将每个向量压缩到几个字节。在读取流程中,查询会使用同一个模型转换为嵌入向量,再通过余弦相似度、点积或欧氏距离等度量进行比较;数据库会返回排名前 k 的 ID、分数和载荷,许多系统还会将这些结果与关键字搜索结果合并,进行混合搜索。
本示例使用Chroma,这是一个在 Python 进程内存中运行的开源向量数据库:
import chromadb
# 内存客户端;chromadb.PersistentClient(path="db") 会将数据保存在磁盘上
client = chromadb.Client()
collection = client.create_collection("inspection_notes")
# Chroma 使用默认嵌入模型为每份文档生成嵌入向量并建立索引
collection.add(
ids=["n1", "n2", "n3"],
documents=[
"Hairline crack found near the weld on bracket B7",
"Paint scratch on the left door panel",
"Porosity in the weld seam of the frame rail",
],
metadatas=[{"line": "A"}, {"line": "B"}, {"line": "B"}],
)
# 将最近邻搜索限制在一条生产线上
results = collection.query(query_texts=["welding defects"], n_results=1, where={"line": "B"})
print(results["ids"][0], results["documents"][0])查询返回了注释 n3,即 B 线上的焊接气孔。元数据筛选会排除 A 线的裂纹注释,尽管它的文本与“焊接缺陷”同样接近。
向量数据库与相关系统的比较#
- FAISS等向量搜索库:提供进程内索引,包括 HNSW、IVF 和乘积量化,但不提供服务器、元数据存储或复制功能。多种向量数据库都以这些库为基础。
- 专用向量数据库:Pinecone 是托管服务,Milvus、Qdrant、Weaviate 和 Chroma 是开源项目;这些系统从一开始就围绕嵌入向量设计。
- pgvector等向量扩展:在 PostgreSQL 中添加带有 HNSW 和 IVFFlat 索引的向量列,让嵌入向量与关系型数据存放在一起。Elasticsearch、OpenSearch、MongoDB Atlas 和 Redis 也提供类似的向量字段,并与关键字搜索并存。
- 特征存储:根据实体键提供用于训练和推理的模型输入特征。特征存储按 ID 查找记录,而不是按相似度查找。
- 数据湖:存放图像和日志等原始文件,向量数据库通过 ID 或路径引用这些文件。
实际应用#
- AI 智能体的记忆:RAG 流水线和智能体会存储文档片段和过去的对话,以便大型语言模型按需检索。
- 零售视觉搜索:“查找相似商品”功能会为每张商品照片生成嵌入向量,并返回与购物者正在查看的商品最接近的项目。
- 异常检测:如果新样本的最近邻已存储项目都相距很远,就会将其标记为异常,例如某笔交易或某个传感器读数。
图像集合需要视觉模型来生成向量。Ultralytics YOLO26通过 model.embed() 提供此功能:它会对每张图像运行模型,并返回从倒数第二层池化得到的特征向量,可与图像路径和采集元数据一起存储,用于检测近重复图像或搜索相似图像。这类查找功能也是 Ultralytics Platform 中查找相似图像背后的实现方式。
容量规划与调优#
索引设置需要在召回率和推理延迟之间权衡:HNSW 的搜索范围(ef_search)和 IVF 探测的簇数量(nprobe)都会通过减慢查询速度来找到更多真正的近邻,因此团队会针对样本查询,将这些设置与精确搜索进行对比并调优。内存决定硬件成本。100 万个 768 维 float32 嵌入向量在计算任何索引开销前需要 3.07 GB(1,000,000 x 768 x 4 bytes);对向量进行 int8 标量量化可将内存占用降至 768 MB,而套娃嵌入还可以截断为更少的维度,进一步降低占用。










