向量数据库
向量数据库是把文本、图像等数据转换成数字列表(向量、嵌入)存储起来,并能快速找出与问题“含义相近”的数据的数据库。
工作原理
首先,AI 模型把文档或图像转换成一串称为嵌入的数字列表。含义越相近的数据,这些数字列表之间的距离就越近。向量数据库先把这些向量存储起来,再用同样的方式把提问也转换成向量,然后找出最接近的若干向量并返回。数据量非常大时,很难逐一比较,因此通常使用“近似最近邻搜索”,牺牲少量准确度来大幅提升速度。在此基础上,再加上像普通数据库那样的增、改、删以及条件(元数据)过滤功能,就是向量数据库。
发展历程
向量数据库的核心是“快速找到相近向量的方法”,相关研究一直在稳步积累。2016 年 Malkov 和 Yashunin 的 HNSW 论文提出了一种新的搜索方式:把数据连接成多层图,在上层大步移动,在下层精细查找。2017 年 Johnson、Douze、Jégou 的论文通过高效利用 GPU,使得在 10 亿规模的向量中也能找到相似项,并将其公开。这项研究延续为主要由 Meta AI Research 开发的开源库 Faiss。此后,把这类搜索技术与存储、管理功能结合起来的专用向量数据库,以及在现有数据库(例如 Postgres)中加入向量搜索的扩展,都在被一并使用。
为什么重要
LLM 不了解训练内容之外的公司内部文档或最新信息,因此先检索所需资料再一并交给模型的 RAG 方式被广泛使用。此时,负责找出与提问相关的文档片段的就是向量数据库。即使用词不完全一致,只要含义相近也能找到,所以问“退款方法”也能找到“退货流程”文档。它还被用作 AI 智能体记住以往对话或工作记录的“长期记忆”存储。
注意事项
由于是近似搜索,偶尔会漏掉最接近的结果,需要在速度和准确度之间调整设置。搜索质量在很大程度上取决于使用哪种嵌入模型以及如何切分文档(分块),而不是向量数据库本身。基于含义的搜索在产品编码或专有名词等需要精确匹配用词的场景中可能表现较弱,因此常常配合混合了关键词搜索的混合搜索,或对结果重新排序的重排序器一起使用。如果数据量不大,不用专用向量数据库,仅靠现有数据库的扩展功能也可能就足够了。
示例
假设一家公司要做一个根据公司内部规章文档回答问题的聊天机器人。把文档按段落切分并做嵌入后存入向量数据库,员工提问时就能找出最相关的几个段落,一并交给 LLM。这时可以选择使用 Pinecone 这样的专用服务;如果已经在用 Postgres,也可以安装开源扩展 pgvector,把向量和现有数据放在一起存储和搜索。自己搭建搜索引擎时,也会使用 Faiss 这样的库。
相关术语
参考资料
- Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs (2016)
- Billion-scale similarity search with GPUs (2017)
- What is a Vector Database & How Does it Work? Use Cases + Examples | Pinecone
- Vector database - Wikipedia
- GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres · GitHub
- Home · facebookresearch/faiss Wiki · GitHub