DeepLake 向量库怎么用:建库、写入与相似度检索
DeepLake 是一个支持向量存储与相似度检索的数据集工具,用 Python 即可完成建库、写入和查询。
本文按实际使用顺序,从安装、建数据集、写入向量到相似度检索逐步操作,适合第一次接触 DeepLake、需要在本地快速验证向量检索的开发者。
安装与环境确认
DeepLake 通过 Python 包 deeplake 使用,建议在虚拟环境中安装,避免和系统里其他库冲突。
python3 -m venv deeplake-env
source deeplake-env/bin/activate
pip install deeplake
安装完成后先确认能正常导入:
python -c "import deeplake; print(deeplake.__version__)"
能输出版本号说明安装成功。
如果导入报错,先检查当前 python 和 pip 是否来自同一个虚拟环境:which python 和 which pip 的路径应位于 deeplake-env 目录下。
注意:DeepLake 的部分功能需要登录账号。
首次写入云端数据时,程序会提示输入 token,按提示完成激活即可。
仅本地使用、不涉及云端存储时,可先跳过账号步骤。
创建数据集并写入向量
DeepLake 的核心对象是数据集(dataset),它类似一张表,可以包含向量列和普通字段列。
下面在本地目录创建一个数据集,并写入几条带文本和类别的向量。
import deeplake
import numpy as np
ds = deeplake.empty("./my_vector_db", overwrite=True)
# 建表:embedding 是向量列,text 和 category 是普通列
ds.create_tensor("embedding", htype="embedding", dtype="float32")
ds.create_tensor("text", htype="text")
ds.create_tensor("category", htype="text")
# 写入 3 条示例向量,维度为 4
vectors = np.array([
[0.1, 0.2, 0.3, 0.4],
[0.9, 0.1, 0.0, 0.2],
[0.0, 0.0, 0.8, 0.9],
], dtype="float32")
ds.embedding.extend(vectors)
ds.text.extend(["苹果手机", "安卓手机", "平板电脑"])
ds.category.extend(["数码", "数码", "数码"])
写入时要注意两点:
- 向量维度必须一致:第一次写入的向量维度决定后续所有向量的长度,后写入的维度不同会直接报错。
htype="embedding"不要省略:它让 DeepLake 按向量方式处理该列,后续检索接口才能正常使用。
写入完成后可以查看数据集结构:
print(ds.summary())
输出中应能看到 embedding、text、category 三个张量,且向量条数为 3。
执行相似度检索
检索时传入一个查询向量,DeepLake 会按距离度量返回最接近的记录。
默认使用余弦距离,也可以在建张量时指定其他度量方式。
query = np.array([0.1, 0.2, 0.3, 0.4], dtype="float32")
result = ds.embedding.search(query, k=2)
print(result)
result 会返回与查询向量最接近的 2 条记录的索引和距离值。
拿到索引后,可以用它取回对应的文本:
for item in result:
idx = item["index"]
print(idx, ds.text[idx].data()["value"])
如果查询结果为空或距离明显异常,先从这三个方向检查:
- 查询向量维度是否与写入时一致,维度不一致时检索会报错或返回空结果。
- 距离度量是否前后统一:建张量时若指定了
distance_metric,检索时不要混用不同度量。 - 是否写入了空向量:空向量参与检索会影响结果,写入前过滤掉全零或空数组。
常见坑与使用边界
DeepLake 适合快速搭建带元数据的向量检索原型,但在生产环境中要提前考虑以下几点:
- 本地目录不要随意删除:数据集以文件形式保存在指定路径下,删除目录等于删除数据,操作前先确认路径。
- token 不要写进代码仓库:需要登录时,把 token 放在环境变量或本地配置中,避免提交到 Git。
- 大批量写入要控制批次:一次写入数万条向量时,建议分批
extend,避免内存占用过高导致进程被系统终止。 - 检索结果需要人工抽检:不同嵌入模型生成的向量语义质量不同,上线前用几条典型查询验证返回结果是否符合预期。
结果验证清单
完成上述步骤后,按下面几项确认环境可用:
deeplake.__version__能正常输出版本号。- 数据集目录
./my_vector_db存在,ds.summary()显示张量结构正确。 - 用与写入向量相同的查询能返回距离为 0 的记录。
- 换一条语义不同的查询向量,返回结果发生变化,说明检索接口在工作。
满足以上条件,说明 DeepLake 的安装、建库、写入和相似度检索流程已经跑通。
后续可在此基础上替换成真实嵌入模型生成的向量,并补充更多元数据字段。