在 ChatGPT
等大型语言模型(LLM)爆发的今天,开发者们逐渐意识到一个关键问题:大模型本身并不存储知识,它们需要外部存储系统来扩展记忆能力。这就是向量数据库( Vector Database
)越来越受关注的原因。
本文将深入探讨向量数据库的核心原理、与大模型的协作机制,以及开发者需要掌握的相似性度量方法。
传统数据库通过精确匹配和索引来检索数据,而向量数据库则专门设计用于处理高维向量数据,支持基于相似性的模糊查询。其核心技术包括:
128维
到 2048维
的密集向量HNSW
(Hierarchical Navigable Small World)、IVF(Inverted File Index)等# 典型向量数据库使用示例(以FAISS为例)
import faiss
import numpy as np
d = 768 # 向量维度
nb = 100000 # 数据库大小
nq = 10 # 查询数量
# 随机生成示例数据
np.random.seed(1234)
xb = np.random.random((nb, d)).astype('float32')
xq = np.random.random((nq, d)).astype('float32')
# 构建索引
index = faiss.IndexFlatL2(d) # 使用L2距离(欧氏距离)
index.add(xb)
# 查询
k = 5 # 返回最近邻数量
D, I = index.search(xq, k) # D是距离,I是索引
大模型通过神经网络将离散的符号(文字、图片等)转换为连续的向量空间表示。例如:
这些向量间的几何关系反映了语义关系,这正是向量数据库发挥作用的基础。
即使如 GPT-4
的 32K
上下文窗口,也难以容纳专业领域的所有知识。向量数据库实现了:
数学定义:
L2(x,y) = √Σ(x_i - y_i)²
几何解释:在多维空间中两点间的直线距离。当向量经过 L2
归一化后:
||x||² = Σx_i² = 1
此时 欧氏距离
与 余弦相似度
存在单调关系:
L2(x,y)² = 2 - 2*cos(x,y)
数学定义:
cos(x,y) = (x·y)/(||x||*||y||)
几何解释:向量间夹角的余弦值,完全忽略向量长度(模),只关注方向。
场景 | 推荐度量 | 原因 |
---|---|---|
文本语义搜索 | 余弦相似度 | 关注语义方向而非文本长度 |
图像特征匹配 | 欧氏距离 | 像素级特征差异重要 |
推荐系统(user-item) | 需实验确定 | 取决于用户偏好是绝对评分(欧氏)还是相对偏好(余弦) |
向量已归一化 | 二者等价 | 数学上可以相互转换 |
import numpy as np
def euclidean_distance(a, b):
return np.linalg.norm(a - b)
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# 示例向量
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
print("欧氏距离:", euclidean_distance(v1, v2))
print("余弦相似度:", cosine_similarity(v1, v2))
Hierarchical Navigable Small World
是当前最流行的 ANN
算法之一,其核心思想:
优势:
O( log n )
倒排文件( IVF
)与乘积量化( PQ
)的结合:
// FAISS中的IVF-PQ配置示例
faiss::IndexIVFPQ index(
quantizer, // 量化器
dimension, // 向量维度
nlist, // 聚类中心数
m, // 子量化器数量
8 // 每子向量比特数
);
数据库 | 优势 | 适用场景 |
---|---|---|
Pinecone | 全托管服务,简单易用 | 快速原型开发 |
Weaviate | 内置ML模型,多模态支持 | 复杂语义搜索 |
Milvus | 高性能,分布式架构 | 大规模生产环境 |
Chroma | 轻量级,专注LLM集成 | 本地开发测试 |
Qdrant | Rust编写,高性能 | 需要极致延迟的场景 |
检索增强生成(Retrieval-Augmented Generation)的典型实现:
关键优化点:
向量数据库作为大模型的"外部大脑",正在重塑AI应用的架构设计。理解其核心原理和实现细节,将成为AI工程师的必备技能。无论是选择现成方案还是自建系统,都需要根据具体场景在精度、速度和成本之间找到平衡点。