Назад к подготовке

In-memory движок векторного поиска: что важно в реализации

Нужно устно спроектировать простой in-memory векторный поиск: add, search top-K, cosine similarity, stats. На что обратить внимание?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

Короткий ответ

Хранить id -> vector, нормализовать vectors для cosine, проверять размерность, искать top-K через heap или сортировку, отдельно вести stats и ошибки контракта.

Полный разбор

Для маленького in-memory search достаточно словаря id -> vector и линейного скана по всем векторам. Если cosine similarity используется часто, vectors лучше нормализовать при добавлении, тогда score превращается в dot product. Нужно проверять одинаковую размерность, пустой индекс, duplicate id и top_k больше размера индекса.

Для top-K на малом N можно отсортировать все scores. Для большого N лучше держать min-heap размера K. Если требования растут, линейный in-memory поиск заменяется ANN-индексом: HNSW, FAISS, ScaNN или vector DB.

Stats лучше не смешивать с бизнес-логикой: count vectors, dimension, number of searches, average latency, maybe top score distribution. Важно явно определить, что возвращает search: ids, scores, metadata, порядок и поведение при равных score.

Теория

Даже простая Python-задача про векторный поиск проверяет контракт, edge cases и понимание cosine/top-K.

Типичные ошибки

  • Не нормализовать vectors и получить неверный cosine.
  • Не проверять dimension mismatch.
  • Сортировать весь индекс там, где нужен bounded heap.