1. 向量数据库概述:为什么需要向量数据库
大家好,我是老赵。做数据架构十几年了,从最早的关系型数据库到后来的NoSQL,再到今天要聊的向量数据库,我算是亲眼看着这个领域一步步演变过来的。
说实话,我第一次接触向量数据库是在2019年。当时一个推荐系统项目,用户画像维度爆炸,传统方案根本扛不住。嗯,从那以后我就开始认真研究这个方向了。
1.1 为什么需要向量数据库
先问一个问题:传统数据库能存"苹果"这个词,但能理解"苹果"和"梨"之间的相似度吗?
不能。传统数据库只能做精确匹配或者简单的模糊查询。但现在的AI应用,比如大模型、推荐系统、图像搜索,它们处理的数据本质上是语义信息,而不是关键字。
举个例子:
- 用户搜索"红色跑车",你希望返回的不仅是带"红色跑车"标签的图片,还应该包括"法拉利""保时捷911"这类语义相近的结果
- RAG系统中,用户问"怎么修复漏水的水龙头",你需要从知识库中找到最相关的维修文档,而不是只匹配"漏水"两个字
这些场景的核心需求是什么?语义相似度搜索。而向量数据库,就是专门为这个需求设计的。
核心观点:向量数据库不是要取代传统数据库,而是填补了"非结构化数据语义检索"这个空白。我见过太多团队试图用Elasticsearch硬扛向量搜索,结果召回率和延迟双双翻车。
1.2 向量数据库与传统数据库的区别
这里我直接画个对比表,大家看得更清楚:
| 维度 | 传统数据库(MySQL/PostgreSQL) | 向量数据库(Milvus/Qdrant) |
|---|---|---|
| 数据模型 | 结构化数据(行、列、表) | 向量嵌入(浮点数数组) |
| 查询方式 | 精确匹配、范围查询、JOIN | 近似最近邻(ANN)搜索 |
| 索引结构 | B+树、哈希索引 | HNSW、IVF、PQ |
| 相似度度量 | 不支持(或只能简单排序) | 余弦相似度、欧氏距离、内积 |
| 扩展性 | 垂直扩展为主,分库分表复杂 | 原生分布式,水平扩展 |
| 典型场景 | 事务处理、报表、CRUD | 语义搜索、推荐、去重 |
说白了,传统数据库擅长回答"有没有",向量数据库擅长回答"像不像"。我有个客户曾经把1000万条商品数据塞进MySQL做余弦相似度计算,结果一次查询要跑30秒。换成向量数据库后,同样的数据量,延迟降到了50毫秒以内。
避坑提醒:我曾经见过一个团队,把向量数据库当关系型数据库用,在上面做事务操作。结果数据一致性搞得一塌糊涂。记住:向量数据库不是万能的,它只解决"相似度搜索"这一个问题。
1.3 核心应用场景
聊完概念,咱们看看实际落地。我挑三个最典型的场景来讲:
1.3.1 RAG(检索增强生成)
这是目前最火的方向。大模型虽然能说会道,但有个硬伤——知识截止日期和幻觉问题。RAG的解决思路很简单:
- 把企业文档切分成段落,每个段落生成向量嵌入
- 用户提问时,把问题也转成向量
- 在向量数据库中搜索最相关的3-5个段落
- 把这些段落作为上下文,喂给大模型生成答案
我去年帮一家金融公司做智能客服,他们之前用纯大模型方案,客户问"去年第三季度的财报数据",模型经常胡编乱造。后来上了RAG架构,召回率从62%提升到了94%。
个人经验:RAG系统的瓶颈往往不在大模型,而在向量检索的召回质量。我建议在embedding模型选择和索引参数调优上多花时间,这比换更大的LLM划算得多。
1.3.2 推荐系统
传统推荐系统怎么做?协同过滤、矩阵分解,说白了就是算用户和物品的"共现关系"。但向量数据库给了我们一个新思路:
- 把用户行为序列编码成用户向量
- 把物品属性编码成物品向量
- 直接在向量空间里找"最像"的物品
这样做的好处是什么?冷启动问题大幅缓解。新物品只要属性描述到位,向量就能找到它的"同类",不需要等用户行为积累。
我记得有个电商客户,用向量召回替换了原来的协同过滤后,新品的曝光率提升了3倍,GMV增长了12%。当然,这不是说协同过滤没用,而是向量召回可以作为"召回层"的一个强力补充。
1.3.3 图像检索
这个场景最直观。你想想看,传统图像搜索靠什么?靠人工打标签。一张图片要打十几个标签,费时费力,而且"一图胜千言",标签永远无法完整描述图像内容。
向量数据库的做法是:
- 用CNN或ViT模型把图像编码成向量
- 把向量存入数据库
- 搜索时,用目标图片的向量去"找最像的"
这里有个关键点:向量编码的质量直接决定搜索效果。我踩过这个坑——一开始用ResNet50的倒数第二层输出做向量,结果搜出来的图片在颜色上很像,但语义上完全不相关。后来换成CLIP模型,语义对齐就好多了。
下面这张图,是我总结的向量数据库核心知识体系:
总结一下我的看法:向量数据库不是某个新潮的技术玩具,它是AI基础设施中不可或缺的一环。从RAG到推荐系统,从图像检索到异常检测,只要涉及"语义理解"和"相似度搜索",向量数据库都是最优解。
当然,选型的时候要冷静。我见过不少团队一上来就上向量数据库,结果发现业务场景根本不需要语义搜索,用Elasticsearch就能搞定。所以,先搞清楚你的场景是不是真的需要"语义相似度",再决定要不要上向量数据库。