Зачем нужна векторная база данных
Поймите ограничения полного перебора при поиске сходства, принцип работы алгоритмов приблизительного поиска ближайших соседей, таких как HNSW, и задачи, которые решают векторные базы данных в рабочей среде.
«Зачем нужна векторная база данных» — бесплатный урок AI Engineering Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Engineering Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Engineering Academy содержит 4 уроков всего.
Ограничения поиска в памяти
Семантический поиск с помощью NumPy хорошо работает для небольших корпусов, но у него есть фундаментальная проблема масштабирования: при каждом поиске просматривается каждый вектор. При 1 миллионе документов каждый запрос требует 1,5 миллиарда умножений чисел с плавающей точкой и занимает сотни миллисекунд. Более того, все векторы должны помещаться в RAM.
Промышленным системам ИИ нужен поиск по миллионам документов менее чем за 50 мс. Именно это и призваны обеспечивать векторные базы данных.
Приближённый поиск ближайших соседей
Алгоритмы Approximate Nearest Neighbor (ANN) жертвуют небольшой долей точности ради значительного повышения скорости. Вместо проверки каждого вектора алгоритмы ANN используют интеллектуальные структуры индексов, чтобы пропускать большие части пространства поиска.
На практике ANN возвращает действительно ближайшего соседа более чем в 95% случаев и работает в 100–1000 раз быстрее точного поиска. Для RAG такой компромисс почти всегда оправдан.
Как работает HNSW
HNSW (Hierarchical Navigable Small World) — ведущий алгоритм ANN, используемый Pinecone, Weaviate, Qdrant и pgvector. Он строит многоуровневый граф, в котором каждый узел соединён с ближайшими соседями. Поиск начинается на верхнем разреженном уровне, переходит в приблизительную область, а затем спускается на плотный нижний уровень для повышения точности.
HNSW обеспечивает отличную скорость запросов (логарифмическую относительно размера набора данных) и высокую полноту поиска, но требует предварительного построения индекса.
Что добавляют векторные базы данных
Векторная база данных — это нечто большее, чем индекс ANN. Она также предоставляет:
- Фильтрацию по метаданным — извлечение только тех векторов, для которых
category='finance'илиdate > '2024-01-01' - Постоянное хранение — данные сохраняются после перезапуска и могут превышать объём RAM
- Операции создания, чтения, обновления и удаления — вставку, обновление и удаление отдельных векторов
- Изоляцию пространств имён — отдельные коллекции для разных клиентов или окружений
- Горизонтальное масштабирование — распределение миллионов векторов по шардам
Фильтрация по метаданным на практике
Фильтрация по метаданным позволяет ограничить извлечение релевантным подмножеством до запуска поиска ANN. Например, в многопользовательской системе RAG Вы можете фильтровать по tenant_id, чтобы пользователи видели только собственные документы. Без фильтрации по метаданным пришлось бы создавать отдельный индекс для каждого клиента.
Это одна из важнейших возможностей, отличающих векторные базы данных от простых библиотек ANN, таких как FAISS.
# Conceptual example — Pinecone query with metadata filter
results = index.query(
vector=query_embedding,
top_k=5,
filter={
'tenant_id': {'$eq': 'acme_corp'},
'document_type': {'$in': ['invoice', 'contract']},
'date': {'$gte': '2024-01-01'}
},
include_metadata=True
)FAISS: высокопроизводительная библиотека ANN
FAISS (Facebook AI Similarity Search) — это библиотека ANN с открытым исходным кодом от Meta и самый быстрый вариант для поиска с ускорением на GPU. Это не полноценная база данных: в ней нет постоянного хранения, метаданных и встроенного обслуживания запросов.
FAISS идеально подходит, когда Вам нужна максимальная пропускная способность на одной машине, а постоянное хранение Вы организуете самостоятельно. Chroma, Weaviate и pgvector используют FAISS или HNSW внутри.
import faiss
import numpy as np
d = 1536 # dimension
n = 10000 # number of vectors
# Build a flat (exact) index as a baseline
index = faiss.IndexFlatIP(d) # Inner Product = dot product
# Add random vectors (pretend these are embeddings)
vectors = np.random.randn(n, d).astype('float32')
faiss.normalize_L2(vectors) # normalize for cosine sim
index.add(vectors)
query = np.random.randn(1, d).astype('float32')
faiss.normalize_L2(query)
scores, indices = index.search(query, k=5)
print('Top 5 indices:', indices[0])
print('Top 5 scores:', scores[0])Векторные базы данных и традиционные базы данных
Традиционные базы данных SQL, такие как PostgreSQL, оптимизированы для точного поиска и запросов по диапазону структурированных данных. Они не предназначены для поиска ближайших соседей в пространствах высокой размерности. Даже с расширением pgvector обычный PostgreSQL работает медленнее специализированных векторных баз данных на больших корпусах.
Однако pgvector — отличный выбор, если Ваше приложение уже работает на PostgreSQL, а корпус содержит менее нескольких миллионов документов, поскольку это позволяет не добавлять ещё один компонент инфраструктуры.
Управляемые и самостоятельно размещаемые варианты
Векторные базы данных делятся на две категории:
- Управляемые (serverless): Pinecone, Weaviate Cloud — инфраструктурой не нужно управлять, оплата взимается за запросы и хранилище, масштабирование происходит сразу
- Самостоятельно размещаемые: Qdrant, Chroma, Weaviate с открытым исходным кодом, pgvector — полный контроль и более низкая стоимость при масштабировании, но резервное копирование, обновления и масштабирование выполняете Вы
Для проектов на ранней стадии начните с управляемого сервиса, чтобы быстро продвигаться вперёд. Рассмотрите самостоятельное размещение, когда ежемесячные расходы превысят 200–300 долларов.
Типы индексов: Flat, IVF и HNSW
Разные типы индексов предлагают разные компромиссы:
- Flat: точный поиск без приближения, медленный при масштабировании, но без потери точности — подходит для базового сравнения производительности
- IVF (Inverted File): разделяет векторы на кластеры и ищет только в ближайших кластерах — работает быстро, но требует настройки
nlistиnprobe - HNSW: основан на графе, обеспечивает лучшее соотношение полноты поиска и скорости для большинства нагрузок и используется по умолчанию в большинстве промышленных баз данных
Квантизация для уменьшения объёма памяти
Квантизация векторов сжимает каждое 32-битное число с плавающей точкой в векторе до меньшего количества битов, значительно уменьшая использование памяти ценой небольшой потери точности:
- FP32: 1536 измерений × 4 байта = 6 КБ на вектор
- FP16: 3 КБ на вектор — сжатие в 2 раза при пренебрежимо малой потере точности
- INT8: 1,5 КБ на вектор — сжатие в 4 раза, снижение полноты поиска примерно на 1%
Для 10 миллионов векторов квантизация INT8 уменьшает объём памяти с 60 ГБ до 15 ГБ, что определяет, поместятся ли данные в RAM.
Когда переходить от NumPy к векторной базе данных
Рассмотрите переход от поиска в памяти с помощью NumPy к векторной базе данных, если:
- Ваш корпус превышает 50 000 документов, и задержка запросов увеличивается
- Вам нужна фильтрация по метаданным (по дате, пользователю, категории и т. д.)
- Вам нужно постоянное хранение, сохраняющее данные после перезапуска приложения
- Нескольким сервисам или пользователям нужно совместно использовать один и тот же индекс
- Вам нужно обновлять или удалять отдельные документы без повторной индексации всего набора
Быстрая проверка
Проверьте, насколько хорошо Вы усвоили концепции инженерии ИИ из этого урока.
Итоги урока
В этом уроке Вы узнали, что поиск методом полного перебора с помощью NumPy не масштабируется за пределы десятков тысяч документов, HNSW обеспечивает быстрый приближённый поиск ближайших соседей, перемещаясь по иерархическому графу, а векторные базы данных добавляют фильтрацию по метаданным, постоянное хранение и операции создания, чтения, обновления и удаления поверх индексов ANN. Далее мы настроим Pinecone — самую популярную управляемую векторную базу данных — и проиндексируем первые документы.
Часто задаваемые вопросы
Урок «Зачем нужна векторная база данных» бесплатный?
Да — полный текст урока «Зачем нужна векторная база данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Engineering Academy, подпишись на CoddyKit PRO. Курс AI Engineering Academy содержит 4 уроков всего.
Чему я научусь в уроке «Зачем нужна векторная база данных»?
Поймите ограничения полного перебора при поиске сходства, принцип работы алгоритмов приблизительного поиска ближайших соседей, таких как HNSW, и задачи, которые решают векторные базы данных в рабочей… Ты практикуешь AI Engineering Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Engineering Academy?
Предыдущий опыт не требуется. AI Engineering Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Зачем нужна векторная база данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Engineering Academy?
Да. Каждый урок AI Engineering Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужна векторная база данных
- Начало работы с Pinecone
- pgvector: эмбеддинги в PostgreSQL
- Выбор и сравнительное тестирование векторных хранилищ