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

Векторні бази даних і системи пошуку за вбудовуваннями

Вичерпний посібник з технічної архітектури векторних баз даних, алгоритмів пошуку за вбудовуваннями, HNSW, індексування IVF та корпоративних застосувань семантичного пошуку.

Veni AI Technical Team12 Ocak 20255 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ᵢ)

Випадки використання: еквівалентно косинусній подібності для нормалізованих ембеддингів.

Алгоритми індексації

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-native архітектура.

ChromaDB

Особливості:

  • Зручний для розробників і легкий у налаштуванні.
  • Режими in-memory + persistent.
  • Орієнтований на Python.
  • Ідеальний для прототипування.

Порівняльна таблиця

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

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

Пре-фільтрація vs Пост-фільтрація

Пре-фільтрація:

  1. Спочатку застосовується фільтр метаданих.
  2. Виконується векторний пошук у відфільтрованому наборі.
  • Перевага: Швидше.
  • Недолік: Можлива втрата точності.

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

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

Гібридний пошук

Комбінація Keyword (BM25) + Vector search:

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# Poor: Singular insert 2for vec in vectors: 3 index.upsert([vec]) 4 5# Good: Batch insert 6index.upsert(vectors, batch_size=100)

Пул з’єднань

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

Приклад архітектури рівня Enterprise

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 Rate
  • 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