从语义检索到 RAG,再到多模态搜索,向量数据库已经成为 AI 应用时代的“新型搜索引擎”。这篇文章,我们不讲玄学,只讲实战。
一、为什么你总听人提“向量库”?
进入大模型时代之后,你会发现一个现象:原来的关键词搜索越来越跟不上需求了。比如你想做一个知识问答系统,用户问的是“请问年假最多能休几天”,而数据库里写的是“年假制度依据劳动法第三十八条规定,员工满一年可享受……”,这时候传统的关键词匹配根本抓不住语义。
这就是向量库出场的时刻。它能把文本、图片、音频、代码等各种内容转成“语义向量”,用“相似度”而不是“字面吻合”来做检索。这种检索方式,叫近似最近邻检索(ANN, Approximate Nearest Neighbor),而承载它的,就是我们说的向量数据库。
一句话总结:有了大模型,才有了对语义检索的需求;有了语义检索,才离不开向量库。
二、什么是向量检索?它到底靠什么在匹配?
我们以最常见的文本为例。
当你用一个嵌入模型(比如 text-embedding-3-small
)处理一句话时,它会返回一个维度可能是 384、768 或 1536 的向量。这个向量是一个稠密浮点数组,代表了这句话在语义空间里的位置。
比如:
“年假多少天” → [0.012, -0.345, ..., 0.021]
“请问我可以休几天年假” → [0.015, -0.342, ..., 0.025]
这两条语句在高维空间中“挨得很近”,所以我们说它们语义相似。
向量检索的核心问题就是:给定一个查询向量,快速在几百万甚至亿级数据中找到“最相近”的向量。这背后的算法,主要有几类:
🌟 向量检索核心算法三大类
算法类目 | 代表算法 | 适用场景与特点 |
---|---|---|
基于量化 | IVF、PQ、OPQ | 快速、占用小、准确率适中 |
基于图结构 | HNSW、NSG | 检索准确率高、适合复杂场景,但占用高 |
基于哈希 | LSH | 快速但效果差,适合低维+不太要求准确 |
-
IVF(倒排文件):先把向量聚类成多个中心点,查询时只搜索相关簇,速度快。
-
PQ(乘积量化):将向量拆成小片段,每个片段做量化编码,压缩存储。
-
HNSW(图检索):用一种层级小世界图连接所有向量,查得准但内存重。
一般来说,如果你想做文本语义搜索,或者构建一个 RAG 检索系统,选 PQ+IVF 或 HNSW 就很够用了。
三、常见向量库选哪家?FAISS vs Milvus vs …?
现在主流的向量库很多,但真正用得多的还是这两大派:轻量本地派(以 FAISS 为代表) 和 分布式企业派(以 Milvus 为代表)。
🏗 FAISS:Facebook 出品,工程师最爱的本地库
FAISS 全称 Facebook AI Similarity Search,是一个 C++ 写的、带 Python 接口的高效库。它支持 IVF、PQ、HNSW 等多种算法,适合在单机/单节点场景下快速构建索引。优点是轻、快、灵活,几百行代码就能构建一个嵌入检索系统。
适合场景:
-
自己本地训练嵌入 + 检索的小项目
-
单机文本数据库检索(10w~1000w)
-
原型验证、科研实验
缺点:
-
不自带 REST API(你得用 Flask 或 FastAPI 包一层)
-
不支持分布式/持久化/权限管理
-
存储依赖内存,不适合大规模部署
🛠 Milvus:专为大规模生产打造的向量数据库
Milvus 是 Zilliz 团队开源的向量数据库,支持亿级规模、分布式部署、冷热数据管理、混合索引、RESTful API、用户权限等功能,非常适合生产环境使用。底层检索算法也支持 IVF、HNSW、DiskANN 等,扩展性比 FAISS 强很多。
适合场景:
-
需要部署企业知识库、RAG 系统、AI 搜索引擎
-
支持亿级向量、分布式节点、云原生
-
与 PostgreSQL、S3 等存储系统联动
缺点是部署稍重,学习曲线相对更陡。但如果你要做一个团队级/企业级检索系统,Milvus 是非常靠谱的选择。
四、构建自己的语义检索系统:部署建议与经验谈
接下来聊聊实际落地。如果你现在手上有一批文本数据,想做一个“语义搜索+问答系统”,你可以这样搭建你的向量库 pipeline:
✅ 标准向量检索系统结构图
graph TD
A[原始文档] --> B[文本清洗 & 分段]
B --> C[嵌入模型] --> D[向量]
D --> E[向量库(FAISS/Milvus)]
E --> F[相似向量 Top-K 检索]
F --> G[大模型调用生成答案]
💡 实践建议
-
分段策略要合理:文本切分是影响检索质量的核心。建议用句级/段落级 + 滑动窗口的方式构建语料块。
-
嵌入模型选对很关键:别随便用小模型,
text-embedding-3-large
、bge-large
、E5
系列都不错。 -
向量归一化要统一:查询向量和库中向量都要 normalize,否则余弦相似度会失效。
-
别忘记元数据:除了向量本身,还要存原始文本、文档 ID、链接、时间等字段,用于结果解释与后处理。
-
Milvus 部署可用 docker-compose:轻量开发环境可直接跑,线上建议接入 Zilliz Cloud 或 Kubernetes。
-
结合 LLM 做 rerank 效果更稳:向量召回只负责“找可能相关的”,但排序和问答生成,最好还是交给大模型处理。
五、写在最后:向量库不是“数据库”,它更像“语义引擎”
很多初学者一开始把向量库当成 SQL 数据库去用,想着能不能搞个 select * from vector where title like '%年假%'
。但其实,向量库的本质是一种语义空间的索引系统,它无法直接理解字段、关系和条件,它理解的是“你这句话在语义上离谁最近”。
正因为如此,向量库是做 AI 系统的核心基建之一。无论是构建智能搜索、AI 助理、RAG 系统、AI 多模态检索,只要你涉及“理解”和“查找”的过程,向量库就一定在那背后默默支撑着。
如果你刚开始做向量检索项目,不妨从这里开始:
-
小项目就上 FAISS,轻便高效;
-
要做线上服务或大规模项目,直接上 Milvus 或 Weaviate;
-
嵌入模型选对了,质量能提升一个量级;
-
最后,别忘了搭配 LLM 做 rerank,语义系统的闭环才真正跑通。