向量数据库基本概念、原理、算法与选型指南
本文深入解析向量数据库的核心原理,涵盖从 GPT Token 限制背景下的需求出发,介绍向量嵌入技术如何将非结构化数据转化为高维向量。详细阐述了相似性搜索算法如 K-Means、HNSW、LSH 及乘积量化 PQ 的实现机制与权衡。同时对比了欧几里得距离、余弦相似度等测量方法,探讨了元数据过滤策略。最后分析了分布式架构、安全性及 API 设计等选型要素,并列举了主流开源向量数据库与传统数据库扩展方案,为开发者构建 AI 应用提供技术参考。

本文深入解析向量数据库的核心原理,涵盖从 GPT Token 限制背景下的需求出发,介绍向量嵌入技术如何将非结构化数据转化为高维向量。详细阐述了相似性搜索算法如 K-Means、HNSW、LSH 及乘积量化 PQ 的实现机制与权衡。同时对比了欧几里得距离、余弦相似度等测量方法,探讨了元数据过滤策略。最后分析了分布式架构、安全性及 API 设计等选型要素,并列举了主流开源向量数据库与传统数据库扩展方案,为开发者构建 AI 应用提供技术参考。

向量数据库是 AI 应用基础设施中的关键组件,其核心在于高效存储和检索高维向量数据。随着大模型技术的发展,向量数据库在语义搜索、RAG(检索增强生成)等场景中扮演着重要角色。
过去几个月,人工智能领域经历了革命性变化,GPT-3.5/4 等大语言模型横空出世。然而,这些模型存在天然的限制,尤其是输入端上下文(tokens)大小的限制。例如 gpt-3.5-turbo 模型的限制约为 4K tokens(约 3000 字),这意味着使用者最多只能输入有限的内容给模型进行理解和推理。
有人可能会认为,既然 ChatGPT 有对话记忆功能,将文字拆分成多次输入即可解除限制。这种想法并不完全正确。GPT 作为 LLM 模型本身没有长期记忆功能,所谓的记忆只是开发者将对话记录存储在内存或数据库中,通过 Prompt 组合发送给模型。如果对话记忆超过 token 限制,模型就会遗忘之前的内容。这是目前 GPT 在处理复杂任务时无法克服的缺陷。
不同模型的 token 限制也不同,gpt-4 为 32K tokens,Claude 模型可达 100K tokens。虽然这能处理更长的上下文(如整本《哈利波特》),但响应速度会显著下降(例如处理 72K tokens 需 22 秒)。更重要的是,API 价格按 tokens 收费,输入上下文越多,成本越昂贵。在算力、成本和注意力机制未有重大突破前,绕过 GPT token 限制成为开发者的难题。
在 GPT 模型的限制下,向量数据库提供了一种解决方案。其核心思想是将文本转换成向量,存储在数据库中。当用户输入问题时,将问题转换为向量,在数据库中搜索最相似的向量和上下文,最后将文本返回给用户。
例如,对于客服培训资料或操作手册,可以先将所有内容转化为向量(Vector Embedding)。当用户提问时,将问题转化为向量,搜索最相似的几个上下文,返回给 GPT。这不仅减少了 GPT 的计算量,提高了响应速度,还降低了成本并绕过了 token 限制。
此外,向量数据库还可用于保存长对话记录。当提问时,将问题转化为向量对聊天记录进行语义搜索,找到最相关的'记忆'发送给 GPT,提高输出质量。
传统数据库基于 B Tree、倒排索引等实现精确匹配和排序(BM25、TF-IDF),适合关键字搜索,但对语义搜索较弱。例如搜索'小狗',无法得到'柯基'、'金毛'的结果,因为它们是不同词,传统数据库无法识别语义关系。
处理非结构化数据(图像、音频、视频)时,特征数量会快速膨胀,人工标注特征(Feature Engineering)变得困难。Vector Embedding 通过 AI 模型自动生成高维度向量数据,代表数据的不同特征。
这些向量包含语义信息,可存入向量数据库进行后续语义搜索。
区分不同事物通常通过识别不同特征来实现。例如区分狗的种类,可通过体型、毛发长度、鼻子长短等特征。每只狗对应一个多维坐标点,世间万物都可以用一个多维坐标系表示,在高维特征空间中对应一个坐标点。
相似性搜索(Similarity Search)即通过计算向量之间的距离来判断相似度。距离越近,特征越接近,相似度越高。
在海量的数据中找到和某个向量最相似的向量,直接比较计算量巨大,需要高效的近似最近邻(Approximate Nearest Neighbor, ANN)算法。主要思想是通过减少向量大小或缩小搜索范围来提高效率。
聚类算法可以将向量数据分成多个簇。搜索时先判断搜索向量属于哪个簇,再在该簇中搜索,减少搜索范围。
大规模数据集中,聚类算法内存占用大。PQ 通过量化(有损压缩)解决此问题。
在高维坐标系中,维度灾难会导致聚类中心数量指数级增长。PQ 将向量分解为多个子向量,对每个子向量独立进行量化。例如将 128 维向量分为 8 个 16 维子向量,分别聚类,大幅降低码本大小和内存开销。代价是搜索质量略有下降。
通过构建图结构实现近似最近邻搜索。节点相互连接,分层结构使得高层边缘长(快速搜索),低层边缘短(准确搜索)。
局部敏感哈希将相似向量映射到同一'桶'中。设计特殊的哈希函数,使位置越近或越相似的向量越容易碰撞。
衡量向量相似度主要有三种常见算法:
反映向量的绝对距离,适用于需要考虑向量长度的场景。 公式:d(A,B) = sqrt(sum((Ai-Bi)^2))
关注向量的方向,对长度不敏感,适用于高维向量相似性计算(如语义搜索)。 公式:cos(θ) = (A·B) / (|A||B|)
兼顾向量的长度和方向,计算速度快。 公式:A·B = sum(Ai*Bi)
开发者需根据数据特征和业务场景选择合适的算法。
实际业务中,往往需要通过元数据(如用户 ID、文档 ID)进行过滤。向量数据库通常维护两个索引:向量索引和元数据索引。
优化技术包括利用先进索引方法和并行处理,平衡搜索性能和筛选精度。
除算法外,选型还需考虑可用性、扩展性、安全性、开源情况及社区活跃度。
成熟向量数据库需支持分布式部署,具备分片和复制能力,保证高可用性和容错性。分区策略需考虑向量相似性以保证查询质量。
完善的权限控制、审计日志、监控和备份机制是生产环境必备要素。
良好的 API 和 SDK 设计直接影响开发效率。向量数据库作为新领域,易用性尤为重要。
| 向量数据库 | URL | GitHub Star | Language | Cloud |
|---|---|---|---|---|
| chroma | https://github.com/chroma-core/chroma | 7.4K | Python | ❌ |
| milvus | https://github.com/milvus-io/milvus | 21.5K | Go/Python/C++ | ✅ |
| pinecone | https://www.pinecone.io/ | ❌ | ❌ | ✅ |
| qdrant | https://github.com/qdrant/qdrant | 11.8K | Rust | ✅ |
| typesense | https://github.com/typesense/typesense | 12.9K | C++ | ❌ |
| weaviate | https://github.com/weaviate/weaviate | 6.9K | Go | ✅ |
除了专业向量数据库,传统数据库也可扩展向量搜索功能:
许多项目(如 LangChain 集成方案)已采用 pgvector 结合 Supabase 服务完成向量搜索。
本文介绍了向量数据库的基本概念、相似性搜索算法、相似性测量算法、过滤算法及选型建议。向量数据库是 AI 应用的重要基础设施,帮助开发者解决大模型上下文限制、语义理解及长期记忆等问题。在实际应用中,需根据具体场景权衡算法性能、内存消耗及系统架构,选择合适的数据库方案。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online