{/ Эта страница автоматически передается из навыков SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}

Фейсс

Библиотека Facebook для эффективного поиска по сходству и кластеризации плотных векторов. Поддерживает миллиарды векторов, ускорение на GPU и различные типы индексов (Flat, IVF, HNSW). Используется для быстрого поиска k-NN, крупномасштабного векторного поиска или когда нужен чистый поиск по сходству без метаданных. Лучше всего подходит для высокопроизводительных приложений.

Метаданные навыки

Источник Опционально — установка: hermeskills installofficial/mlops/faiss
Путь необязательные навыки/mlops/faiss
Версия 1.0.0
Автор Исследование оркестра
Лицензия Массачусетский технологический институт
Зависимости faiss-cpu, faiss-gpu, numpy
Платформы Linux, MacOS
Теги RAG, FAISS, Поиск по сходству, Векторный поиск, Facebook AI, Ускорение графического процессора, Миллиардный масштаб, K-NN, HNSW, Высокая производительность, Крупный масштаб

Справочник: полный SKILL.md:::информация

Ниже приведено полное определение навыков, которые Hermes загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навыки активны.

FAISS — Эффективный поиск по сходству

Библиотека Facebook AI для поиска по сходству векторов в миллиардном масштабе.

Когда использовать FAISS

Используйте FAISS, когда: - Нужен быстрый поиск по сбору больших наборов векторов (миллионы/миллиарды) - Требуется ускорение графического процессора - Чистое векторное сходство (без фильтра по метаданным) - Критическая высокая пропускная способность и обеспечить задержку. - Пакетная/офлайн обработка эмбеддингов

Метрики: - 31 700+ звезд на GitHub - Мета/исследование искусственного интеллекта в Facebook - Обработка миллиардов векторов - C++ с привязками к Python

Используйте альтернативы вместо этого: - Цветность/Сосновая шишка: нужна фильтрация по метаданным. - Weaviate: нужны полноценные функции базы данных. - Раздражать: проще, функций меньше.

Быстрый старт

Установка

# Только CPU
pip install faiss-cpu

# Поддержка GPU
pip install faiss-gpu

Базовое использование

import faiss
import numpy as np

# Создание примера данных (1000 векторов, 128 измерений)
d = 128
nb = 1000
vectors = np.random.random((nb, d)).astype('float32')

# Создание индекса
index = faiss.IndexFlatL2(d)  # L2 расстояние
index.add(vectors)             # Добавление векторов

# Поиск
k = 5  # Найти 5 ближайших соседей
query = np.random.random((1, d)).astype('float32')
distances, indices = index.search(query, k)

print(f"Ближайшие соседи: {indices}")
print(f"Расстояния: {distances}")

Типы индексов

1. Квартира (точный поиск)

# L2 (евклидово) расстояние
index = faiss.IndexFlatL2(d)

# Внутреннее произведение (косинусное сходство, если нормализовано)
index = faiss.IndexFlatIP(d)

# Самый медленный, самый точный

2. ЭКО (инвертированный файл) — быстрое приближение

# Создание квантизатора
quantizer = faiss.IndexFlatL2(d)

# IVF индекс с 100 кластерами
nlist = 100
index = faiss.IndexIVFFlat(quantizer, d, nlist)

# Обучение на данных
index.train(vectors)

# Добавление векторов
index.add(vectors)

# Поиск (nprobe = количество кластеров для поиска)
index.nprobe = 10
distances, indices = index.search(query, k)

3. HNSW (Иерархический Новый Южный Уэльс) — лучшее качество/скорость

# HNSW индекс
M = 32  # Количество соединений на слой
index = faiss.IndexHNSWFlat(d, M)

# Обучение не требуется
index.add(vectors)

# Поиск
distances, indices = index.search(query, k)

4. Продуктовое квантование — экономия памяти

# PQ уменьшает память в 16-32 раза
m = 8   # Количество субквантователей
nbits = 8
index = faiss.IndexPQ(d, m, nbits)

# Обучение и добавление
index.train(vectors)
index.add(vectors)

Сохранение и загрузка

# Сохранение индекса
faiss.write_index(index, "large.index")

# Загрузка индекса
index = faiss.read_index("large.index")

# Продолжение использования
distances, indices = index.search(query, k)

Ускорение ГПУ

# Один GPU
res = faiss.StandardGpuResources()
index_cpu = faiss.IndexFlatL2(d)
index_gpu = faiss.index_cpu_to_gpu(res, 0, index_cpu)  # GPU 0

# Несколько GPU
index_gpu = faiss.index_cpu_to_all_gpus(index_cpu)

# В 10-100 раз быстрее CPU

Интеграция с LangChain

from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

# Создание векторного хранилища FAISS
vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())

# Сохранение
vectorstore.save_local("faiss_index")

# Загрузка
vectorstore = FAISS.load_local(
    "faiss_index",
    OpenAIEmbeddings(),
    allow_dangerous_deserialization=True
)

# Поиск
results = vectorstore.similarity_search("query", k=5)

Интеграция с LlamaIndex

from llama_index.vector_stores.faiss import FaissVectorStore
import faiss

# Создание индекса FAISS
d = 1536
faiss_index = faiss.IndexFlatL2(d)

vector_store = FaissVectorStore(faiss_index=faiss_index)

Лучшая практика

  1. Выберите правильный тип индекса — Flat для <10K, IVF для 10K-1M, HNSW для качества.
  2. Нормализовать для косинуса — Используйте IndexFlatIP с нормализованными векторами.
  3. Используйте графический процессор для больших наборов данных — в 10-100 раз быстрее.
  4. Сохраняйте обученные индексы — обучение затратно.
  5. Настраивайте nprobe/ef_search — баланс скорости/точности.
  6. Следить за памятью — PQ для больших наборов данных
  7. Пакетные запросы — лучшее использование графического процессора

Производительность

Тип индекса Время строительства Время поиска Память Точность
Квартира Быстро Медленно Высокий 100%
ЭКО Среднее Быстро Средняя 95-99%
HNSW Медленно Очень быстро Высокий 99%
ПК Среднее Быстро Низкая 90-95%

Ресурсы