Базы данных

Vector Databases для AI

ChatGPT Plus: когда ты задаёшь вопрос, система находит релевантные документы из огромной базы знаний за миллисекунды. Это vector search по миллиардам embeddings. Notion AI, GitHub Copilot, Cursor - всё использует vector DB для semantic code и document search. Это самая быстрорастущая категория БД в 2023-2025.

  • **Spotify**: vector embeddings 100 миллионов треков для музыкальных рекомендаций Discover Weekly
  • **Airbnb**: vector search для поиска похожих листингов по описанию и фотографиям
  • **Notion**: pgvector для AI Q&A по документам workspace - найти релевантные страницы без exact keywords

Embeddings: векторное представление смысла

Embedding - числовой вектор, представляющий смысловое содержание объекта (текста, изображения, аудио). Похожие по смыслу объекты имеют близкие векторы. OpenAI text-embedding-3-large создаёт вектор из 3072 чисел для любого текста. "Кошка" и "котёнок" будут ближе в пространстве, чем "кошка" и "автомобиль".

Зачем vector DB: обычные БД ищут по точному совпадению или range. Vector DB находит семантически похожее. RAG (Retrieval-Augmented Generation) - паттерн для AI: embedding вопроса -> найти похожие документы в vector DB -> отправить документы + вопрос в LLM -> ответ с контекстом.

Пользователь ищет "как войти в систему". Документ содержит "процедура аутентификации пользователей". BM25 full-text search найдёт совпадение?

Similarity Search

Similarity search: найти K ближайших векторов к запросу (K-Nearest Neighbors). Метрики расстояния: cosine similarity (угол между векторами, стандарт для text embeddings), L2/Euclidean distance (геометрическое расстояние), dot product. Brute force KNN: O(N*D) где D - размерность. При 100M векторов 1536-dim - слишком медленно.

Размерность curse: при >1000 измерений (dimensions) все точки становятся почти равноудалёнными - L2 расстояние теряет смысл. Cosine similarity работает лучше в высоких размерностях для semantic vectors. OpenAI embeddings: 1536 (ada-002) или 3072 (text-embedding-3-large) dim.

Таблица 10 миллионов векторов 1536 dim. Brute force KNN на каждый запрос. Оценить время при 100ms/10M операций.

ANN: Approximate Nearest Neighbors

ANN (Approximate Nearest Neighbors) - приближённый поиск ближайших соседей. Жертвуем точностью (recall) ради скорости. Recall@10 = 0.95: из 10 реальных ближайших соседей алгоритм находит 9.5 в среднем. Для большинства AI приложений 95% recall достаточен.

  • HNSW (Hierarchical Navigable Small World): многоуровневый граф, O(log N) поиск, высокий recall, лучший для in-memory
  • IVF (Inverted File Index): разбить на кластеры, искать только в ближайших кластерах; балансирует скорость vs accuracy vs память
  • LSH (Locality Sensitive Hashing): похожие векторы хашируются в один bucket; быстро, но recall ниже

Recall vs Speed trade-off: HNSW efSearch=16 = быстро, recall ~0.85. efSearch=200 = медленнее, recall ~0.99. В production обычно настраивают на recall 0.90-0.95 при P99 <10ms.

ANN поиск с recall=0.9 не находит 10% реальных ближайших соседей. Для RAG системы это проблема?

HNSW vs IVF: детали алгоритмов

HNSW строит иерархический граф: верхние слои - sparse connections (дальние прыжки), нижние - dense connections (точный поиск в районе). Поиск: начать с верхнего слоя, жадно следовать к ближайшему узлу, опуститься на слой ниже, повторить.

DiskANN (Microsoft) - vector index который хранит большинство данных на SSD, не в RAM. Позволяет индексировать миллиарды векторов без терабайт RAM. Используется в Azure AI Search. Recall ~0.95, latency 50-100ms (SSD vs RAM).

Приложение: 10M векторов, 8GB RAM, нужен recall 0.95+. Какой алгоритм?

pgvector vs Pinecone vs Weaviate

Выбор vector DB зависит от масштаба и операционной сложности. pgvector - PostgreSQL extension, идеален если данные уже в PostgreSQL. Pinecone - managed serverless, zero ops overhead, дорого. Weaviate/Qdrant - open-source с hybrid search (vector + keyword).

БДMax ScaleHybrid SearchOps ComplexityСтоимость
pgvector~5M vectorsЧерез pg FTSМинимальная (PostgreSQL)Дёшево
PineconeМлрд+Нет (только vector)Zero (managed)Дорого
Weaviate100M+Да (vector + BM25)Средняя (k8s)Open-source
Qdrant100M+Да (sparse+dense)СредняяOpen-source
Redis VSS50M+НетМинимальнаяЗависит от плана

Hybrid search - комбинация vector similarity и keyword matching. Weaviate: score = alpha * vector_score + (1-alpha) * bm25_score. При alpha=0.5 - равный вес. Лучше чем pure vector для queries с конкретными именами, датами, числами.

Vector DB полностью заменяет традиционный full-text search

Vector DB и BM25 full-text search дополняют друг друга. Vectors хороши для semantic similarity, BM25 - для exact terms, names, codes. Hybrid search (оба) даёт лучшие результаты.

Запрос "Python 3.12 asyncio" - BM25 найдёт точные технические термины лучше. "Как ускорить асинхронный код" - vector search найдёт семантически похожие документы лучше. Hybrid = лучший от обоих.

Стартап: RAG приложение, данные уже в PostgreSQL, 1M документов, небольшая команда. Что выбрать?

Итоги

  • **Embeddings**: числовой вектор = смысловое представление; близкие векторы = похожий смысл; основа semantic search и RAG
  • **ANN алгоритмы**: HNSW (лучший recall, больше RAM), IVF+PQ (сжатие для scale); recall 0.90-0.95 достаточен для RAG
  • **Выбор**: pgvector для PostgreSQL стека; Pinecone для zero-ops; Weaviate/Qdrant для hybrid search

Связанные темы

Vector databases - ключевой компонент AI архитектур:

  • Full-text Search — Hybrid search комбинирует vector + BM25; vector DB не заменяет, а дополняет
  • Polyglot Persistence — pgvector добавляет vector capabilities к PostgreSQL без отдельной БД
  • Индексы — HNSW и IVF - специализированные индексы для vector similarity search

Вопросы для размышления

  • Как построить RAG систему: embedding model, vector DB, retrieval, LLM. Какие компоненты выбрать для MVP?
  • Почему cosine similarity предпочтительнее Euclidean distance для text embeddings?
  • Hybrid search: как выбрать alpha (вес vector vs BM25) для разных типов queries?

Связанные уроки

  • qd-01-intro
Vector Databases для AI

0

1

Войти