Базы данных
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 Scale | Hybrid Search | Ops Complexity | Стоимость |
|---|---|---|---|---|
| pgvector | ~5M vectors | Через pg FTS | Минимальная (PostgreSQL) | Дёшево |
| Pinecone | Млрд+ | Нет (только vector) | Zero (managed) | Дорого |
| Weaviate | 100M+ | Да (vector + BM25) | Средняя (k8s) | Open-source |
| Qdrant | 100M+ | Да (sparse+dense) | Средняя | Open-source |
| Redis VSS | 50M+ | Нет | Минимальная | Зависит от плана |
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?