Полез на Хабр за примером реализации semantic search — и обломался. Первая ссылка вела на статью 2022 года, где упоминалась библиотека, которая с тех пор три раза поменяла API. Вторая — на репозиторий с кодом, где всё сломано начиная с третьего шага. Третья — на чей-то пост, где автор хвалил инструмент, который бросил через месяц.
Знакомая история? У меня с векторными базами данных примерно так. Походил по граблям — и решил разложить по полочкам, что к чему, пока сам не забыл.
Зачем вообще нужны векторные базы
Классическая база данных хранит строки. Ты ищешь «iphone 15 pro» — и получаешь товары, где эта строка встречается. Всё. Поиск по точному совпадению или его вариациям.
Векторная база делает другое. Она переводит текст, картинку, звук в массив чисел — вектор. И позволяет искать «айфон, но не айфон, а что-то вроде айфона» — семантически похожее. На этом построены RAG-системы, рекомендательные движки, поиск по изображениям.
Три инструмента, которые всплывают в любом разговоре на эту тему: Pinecone, Weaviate и pgvector. Попробовал все три в боевых условиях. Делюсь честным сравнением.
Pinecone — когда не хочешь думать про инфраструктуру
Pinecone — это managed-сервис. Ты не разворачиваешь сервер, не настраиваешь репликацию, не думаешь про бэкапы. Создал индекс — и работает.
Порог входа минимальный. За двадцать минут у меня был работающий semantic search на python-клиенте. Документация внятная, SDK нормально сделан. Масштабируется сам — добавил данных, сервис сам решает, куда их положить.
Обратная сторона: это облако, и облако стоит денег. Бесплатный tier есть, но с ограничениями по объёму и количеству индексов. Для хобби-проектов ок, для продакшена — считай. Плюс vendor lock-in. Ты привязан к их API, к их формату индексов. Если завтра цены вырастут или сервис схлопнется — миграция будет болезненной.
Использовал Pinecone для прототипа RAG-бота. Быстро, удобно, без танцев с бубном. Для MVP — отлично. Для долгоиграющего проекта — десять раз подумал бы.
Weaviate — гибкость и open source
Weaviate тоже managed-сервис, но с важным отличием: есть полностью open-source версия, которую можно развернуть у себя. Docker-compose, Kubernetes — без проблем.
Что понравилось: встроенные модули. Weaviate умеет сам векторизовать данные через OpenAI, Cohere или локальные модели. То есть не нужно отдельно гонять text-embedding — база берёт это на себя. Для быстрого прототипирования экономит часы.
Есть гибридный поиск — когда одновременно ищешь по векторам и по ключевым словам. Получается что-то вроде «найди документы, похожие по смыслу и содержащие слово X». В Pinecone такое тоже можно, но там это отдельная интеграция.
Модульная архитектура — можно подключить генеративные модели прямо внутрь базы и получать ответы, не выходя из Weaviate. Если строишь что-то сложнее поиска по векторам — это ценно.
Из минусов: Weaviate сложнее, чем Pinecone. Больше настроек, больше подводных камней. Разворачивать open-source версию и обслуживать её — это уже работа. Управляемый сервис Weaviate Cloud тоже платный, но дешевле Pinecone на сопоставимых объёмах.
Для проекта, где нужна гибкость и возможность развернуть у себя, Weaviate выигрывает. Для «мне надо быстро и без головной боли» — Pinecone удобнее.
pgvector — когда у тебя уже есть Postgres
И тут на сцену выходит pgvector — расширение для PostgreSQL. Добавляешь его в существующую базу — и получаешь векторный поиск внутри своей привычной базы.
Главное преимущество — не надо поднимать отдельный сервис и думать про синхронизацию данных между Postgres и векторной базой. У тебя и так есть пользователи, заказы, документы в Postgres — вектора лежат рядом.
Для стартапа с ограниченным стеком это идеально. Один Postgres вместо Postgres плюс ещё один сервис. Меньше сущностей — меньше головной боли.
Но есть ограничения. Postgres — не специализированная векторная база. Индексы (HNSW, IVFFlat) работают неплохо, но на больших объёмах специализированные решения быстрее. Ты выигрываешь на удобстве, проигрываешь на производительности при масштабировании.
Если данные до нескольких миллионов векторов и нет желания платить за managed-сервис — pgvector более чем достаточно. Для данных на десятки миллионов и выше — уже стоит смотреть в сторону Pinecone или Weaviate.
Что в итоге выбрать
Вот моя шпаргалка, составленная граблями.
Бери Pinecone, если нужно быстро запустить MVP, нет желания разбираться в инфраструктуре, а бюджет позволяет платить за облако.
Бери Weaviate, если хочешь гибкость и возможность развернуть у себя, нужны встроенные модули для векторизации и генерации, строишь что-то сложнее простого поиска.
Бери pgvector, если у тебя уже есть Postgres, данные не миллионного масштаба, хочешь минимизировать количество сервисов в стеке.
Честный совет: не выбирай по статьям в интернете. Поставь каждый, покрути на своих данных, померяй скорость и потребление памяти. Один и тот же инструмент может показывать разные результаты на разных объёмах и типах данных.
Я в итоге для своего проекта остановился на связке pgvector для основного хранилища и Weaviate для сложных запросов, где нужен гибридный поиск. Комбинировать — нормально. Не обязан выбирать что-то одно.
Если есть вопросы по конкретному кейсу — пиши в комментариях, разберёмся вместе.
