ANN
用于存储向量嵌入的近似最近邻(ANN)索引配置。
backend
backend: faiss|hnsw|annoy|numpy|torch|pgvector|sqlite|custom
设置ANN后端。默认为faiss
。通过ann额外包可以获得更多后端。通过将此参数设置为完全可解析的类字符串来设置自定义后端。
特定后端的设置通过与后端同名的配置对象进行设置(即annoy、faiss或hnsw)。这些设置是可选的,如果省略则设置为默认值。
faiss
faiss:
components: 组件的逗号分隔列表 - 默认为小型索引的"IDMap,Flat"和较大索引的"IVFx,Flat",其中
x = min(4 * sqrt(嵌入数量), 嵌入数量 / 39)
自动计算省略时的IVF单元格数量(支持"IVF,Flat")
nprobe: 搜索探针设置(整数)- 默认为x/16(如上定义)
对于较大的索引
nflip: 与nprobe相同 - 仅用于二进制哈希索引
quantize: 以x位精度存储向量与32位精度(布尔值|整数)
true设置8位精度,false禁用,整数设置指定精度
mmap: 加载为磁盘索引(布尔值)- 以查询响应时间为代价换取较小的RAM占用,默认为false
sample: 用于模型训练的数据百分比(0.0 - 1.0)
减少较大(>1M+行)索引的索引时间,默认为1.0
Faiss支持浮点数和二进制索引。浮点数索引是默认的。二进制索引用于索引标量量化的数据集。
有关更多信息,请参阅以下Faiss文档链接。
hnsw
hnsw:
efconstruction: 用于init_index的ef_construction参数(整数)- 默认为200
m: 用于init_index的M参数(整数)- 默认为16
randomseed: 用于init_index的随机种子参数(整数)- 默认为100
efsearch: ef搜索参数(整数)- 默认为None且不设置
有关这些参数的更多信息,请参阅Hnswlib文档。
annoy
annoy:
ntrees: 树的数量(整数)- 默认为10
searchk: search_k搜索设置(整数)- 默认为-1
有关这些参数的更多信息,请参阅Annoy文档。请注意,Annoy索引在创建后无法修改,不支持更新/删除和其他修改。
numpy
NumPy后端是一个k近邻后端。它设计简单,适用于较小的数据集。
torch
后端支持相同的选项。唯一的区别是向量可以使用GPU进行搜索。
pgvector
pgvector:
url: 数据库URL连接字符串,或者可以通过ANN_URL环境变量设置
table: 存储向量的数据库表 - 默认为`vectors`
efconstruction: ef_construction参数(整数)- 默认为200
m: 用于init_index的M参数(整数)- 默认为16
pgvector后端将嵌入存储在Postgres数据库中。有关这些参数的更多信息,请参阅pgvector文档。有关如何构建URL连接字符串的更多信息,请参阅SQLAlchemy文档。
sqlite
sqlite:
quantize: 以x位精度存储向量与32位精度(布尔值|整数)
true设置8位精度,false禁用,整数设置指定精度
table: 存储向量的数据库表 - 默认为`vectors`
SQLite后端使用sqlite-vec将嵌入存储在SQLite数据库中。此后端支持在存储级别进行1位和8位量化。
有关如何在MacOS上运行此ANN的信息,请参阅此说明。