Skip to content

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的信息,请参阅此说明