Veni AI
Технологии баз данных

Векторные базы данных и системы поиска по эмбеддингам

Подробное руководство по технической архитектуре векторных баз данных, алгоритмам поиска по эмбеддингам, HNSW, IVF-индексации и корпоративным приложениям семантического поиска.

Veni AI Technical Team12 Ocak 20256 dk okuma
Векторные базы данных и системы поиска по эмбеддингам

Векторные базы данных и системы поиска по эмбеддингам

Векторные базы данных — это специализированные базы данных, оптимизированные для хранения и выполнения поиска похожих объектов в пространствах высоких размерностей. Они являются фундаментальным компонентом современных AI-приложений, особенно систем RAG (Retrieval-Augmented Generation).

Что такое векторная база данных?

В то время как традиционные базы данных оптимизированы для точных запросов, векторные базы данных фокусируются на поиске Approximate Nearest Neighbor (ANN).

Ключевые концепции

Эмбеддинг: Числовое векторное представление данных (текст, изображение, аудио).

"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)

Поиск по схожести: Нахождение векторов, наиболее близких к вектору запроса.

query_vector → Top-K most similar vectors

Метрики расстояния:

  • Cosine Similarity: Направленная схожесть.
  • Euclidean Distance (L2): Геометрическое расстояние.
  • Dot Product: Скалярное произведение векторов.

Метрики схожести: подробный разбор

Cosine Similarity

cos(A, B) = (A · B) / (||A|| × ||B||)

Диапазон значений: [-1, 1]

  • 1: То же направление (идентичны).
  • 0: Ортогональны (несвязаны).
  • -1: Противоположные направления.

Применение: Сходство текстов, семантический поиск.

Euclidean Distance (L2)

d(A, B) = √(Σ(Aᵢ - Bᵢ)²)

Диапазон значений: [0, ∞) Применение: Сходство изображений, кластеризация.

Dot Product

A · B = Σ(Aᵢ × Bᵢ)

Применение: Эквивалентно cosine для нормализованных эмбеддингов.

Алгоритмы индексирования

1. Brute Force (Flat Index)

Сравнение запроса со всеми векторами в базе данных.

Сложность: O(n × d)

  • n: Количество векторов.
  • d: Размерность.

Преимущество: 100% точность.
Недостаток: Очень медленно для больших наборов данных.

2. IVF (Inverted File Index)

Сужение пространства поиска путем разбиения векторов на кластеры.

Алгоритм:

  1. Создание центроидов с помощью K-means.
  2. Присвоение каждого вектора ближайшему центроиду.
  3. Во время поиска просматриваются только ближайшие nprobe кластеров.
1Parameters: 2- nlist: Number of clusters (typically √n) 3- nprobe: Number of clusters to search 4 5Trade-off: Higher nprobe → higher accuracy, lower speed.

3. HNSW (Hierarchical Navigable Small World)

Графовый подход и наиболее популярный метод сегодня.

Структура:

1Layer 2: o-------o-------o (sparse) 2 | | | 3Layer 1: o-o-o---o-o-o---o-o-o (medium) 4 | | | | | | | | | 5Layer 0: o-o-o-o-o-o-o-o-o-o-o-o (dense)

Параметры:

  • M: Максимальное число связей для каждой ноды.
  • ef_construction: Количество кандидатов при построении индекса.
  • ef_search: Количество кандидатов при выполнении запроса.

Преимущества:

  • Очень быстрый поиск: O(log n).
  • Высокие показатели recall.
  • Поддержка динамического добавления/удаления.

4. Product Quantization (PQ)

Уменьшение использования памяти путем сжатия векторов.

Метод:

  1. Разделить вектор на M под-векторов.
  2. Отобразить каждый под-вектор на один из K центроидов.
  3. Сохранить ID центроидов вместо исходных компонент вектора.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x

5. Scalar Quantization (SQ)

Преобразование представления Float32 в Int8.

1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Сравнение популярных векторных баз данных 5 6### Pinecone 7 8**Особенности:** 9- Полностью управляемый облачный сервис. 10- Автоматическое масштабирование. 11- Фильтрация по метаданным. 12- Изоляция пространств имён. 13 14**Использование:** 15```python 16import pinecone 17 18pinecone.init(api_key="xxx", environment="us-west1-gcp") 19index = pinecone.Index("my-index") 20 21# Upsert 22index.upsert(vectors=[ 23 {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "tech"}} 24]) 25 26# Query 27results = index.query(vector=[0.1, 0.2, ...], top_k=10, filter={"category": "tech"})

Weaviate

Особенности:

  • Открытый исходный код.
  • Встроенная векторизация.
  • Поддержка GraphQL API.
  • Гибридный поиск (векторный + ключевые слова).

Qdrant

Особенности:

  • Написан на Rust для высокой производительности.
  • Богатые возможности фильтрации.
  • Индексация полезной нагрузки (payload).
  • Поддержка распределённого развертывания.

Milvus

Особенности:

  • Ускорение на GPU.
  • Мультивекторный поиск.
  • Time travel (версионирование).
  • Архитектура, нативная для Kubernetes.

ChromaDB

Особенности:

  • Удобен для разработчиков и прост в установке.
  • Режимы in-memory + persistent.
  • Подход Python-first.
  • Идеален для прототипирования.

Таблица сравнения

ОсобенностьPineconeWeaviateQdrantMilvus
ХостингCloudBothBothBoth
МасштабируемостьAutoManualManualAuto
Гибридный поиск
Поддержка GPU--
ЦенообразованиеPer vectorFree/PaidFree/PaidFree/Paid

Фильтрация и метаданные

Предфильтрация vs Постфильтрация

Предфильтрация:

  1. Сначала применяется фильтр по метаданным.
  2. Выполняется векторный поиск в отфильтрованном наборе.
  • Преимущество: Быстрее.
  • Недостаток: Возможная потеря полноты (recall).

Постфильтрация:

  1. Выполняется поиск Top-K × множитель.
  2. К результатам применяется фильтр по метаданным.
  3. Возвращаются финальные Top-K.
  • Преимущество: Лучшая полнота.
  • Недостаток: Медленнее.

Гибридный поиск

Комбинация поиска по ключевым словам (BM25) + векторного поиска:

final_score = α × vector_score + (1-α) × keyword_score

Оптимизация производительности

Параметры индекса

Оптимальные настройки HNSW:

1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100

Пакетная обработка

1# Плохо: вставка по одному 2for vec in vectors: 3 index.upsert([vec]) 4 5# Хорошо: пакетная вставка 6index.upsert(vectors, batch_size=100)

Пул соединений

1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallel connections 6)

Пример корпоративной архитектуры

1┌─────────────────────────────────────────────────────┐ 2│ Application │ 3└──────────────────────┬──────────────────────────────┘ 45┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 1213┌──────────────────────▼──────────────────────────────┐ 14│ Vector Database Cluster │ 15│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 16│ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ 17│ └─────────┘ └─────────┘ └─────────┘ │ 18└─────────────────────────────────────────────────────┘

Мониторинг и наблюдаемость

Ключевые метрики

  • Задержка запросов (p50, p95, p99)
  • Recall
  • QPS (Queries Per Second)
  • Размер индекса
  • Использование памяти

Пороги оповещений

1alerts: 2 - name: high_latency 3 condition: p99_latency > 200ms 4 severity: warning 5 6 - name: low_recall 7 condition: recall < 0.9 8 severity: critical 9## Заключение 10 11Векторные базы данных являются незаменимыми компонентами современных AI‑приложений. С правильным выбором базы данных, стратегией индексирования и оптимизациями вы можете создать высокопроизводительные системы семантического поиска. 12 13В Veni AI мы предлагаем корпоративные решения для векторного поиска. Свяжитесь с нами, чтобы обсудить ваши требования.

İlgili Makaleler