Руководство · fundamentals
Что такое векторная база данных? И когда она нужна
Векторная база хранит эмбеддинги и находит ближайшие к запросу совпадения. Это руководство объясняет, что это даёт, чего стоит и почему большинству команд она нужна позже, чем им кажется.
Что она хранит
Векторная база данных хранит эмбеддинги — списки чисел, представляющие смысл фрагмента текста, изображения или звука, — и быстро отвечает на один вопрос: какие из сохранённых элементов ближе всего к этому? Близость в этом числовом пространстве соответствует близости по смыслу, и поэтому запрос про «отменить мой тариф» способен найти документ с заголовком «завершение подписки», не разделив с ним ни одного ключевого слова. В этом вся ценность, а всё остальное — инженерия вокруг неё.
Почему обычного поиска недостаточно
Поиск по ключевым словам сопоставляет строки. Он отличен, когда пользователь набирает те же слова, что используют ваши документы, и проваливается, когда нет, — а в поддержке, документации и внутренних знаниях так бывает чаще всего. Семантический поиск закрывает этот разрыв. Он же добавляет новый сбой: он всегда вернёт ближайшие элементы, даже если релевантного нет вовсе, поэтому запрос о том, чего в вашем корпусе нет, вернёт наименее нерелевантное — с обнадёживающе выглядящей оценкой сходства. Явная обработка этого пустого случая и отличает поиск, который говорит «не знаю», от поиска, уверенно достающего не тот документ.
Как работает сам поиск
Сравнивать запрос с каждым сохранённым вектором точно и слишком медленно после нескольких сотен тысяч элементов, поэтому такие системы используют индексы приближённого поиска соседей — чаще всего HNSW, многослойный граф, по которому вы спускаетесь, чтобы дойти до почти лучшего ответа за малую долю времени. Слово «приближённый» здесь не украшение: вы обмениваете небольшую полноту на большую скорость, и параметры индекса управляют этим обменом. Техники сжатия уменьшают векторы дальше, потому что десять миллионов эмбеддингов полной точности занимают десятки гигабайт памяти.
Возможно, выделенная база вам не нужна
Эту часть вендоры пропускают. Postgres с расширением pgvector спокойно держит сотни тысяч векторов, оставляет эмбеддинги в базе, которую вы и так эксплуатируете и бэкапите, и позволяет фильтровать по арендатору, дате или праву доступа в том же запросе. Выделенная векторная база оправдывает себя на действительно большом масштабе, при очень высоком объёме запросов или когда нужны её специализированные возможности. Начинать с отдельной системы — значит эксплуатировать, защищать и синхронизировать два хранилища прежде, чем вы узнали, нужно ли это.
Что на самом деле определяет качество
Команды склонны списывать плохой retrieval на базу и менять базу, и это почти никогда не помогает. Качество извлечения задаётся выше по потоку: как вы делите документы на фрагменты, какую модель эмбеддингов используете и переупорядочиваете ли лучшие результаты более дорогой моделью перед использованием. Разбиение на фрагменты — самое влиятельное и меньше всего обсуждаемое: нарежете слишком мелко, и пассажи потеряют контекст, делавший их осмысленными; слишком крупно, и эмбеддинг усреднит несколько тем в вектор, который ни с чем не совпадает точно.
Операционная ловушка
Эмбеддинги от разных моделей несопоставимы. Смените модель эмбеддингов — и каждый сохранённый вектор станет бессмысленным относительно новых запросов, а значит нужен полный пересчёт всего корпуса: миграция, которую легко недооценить и невозможно сделать наполовину. Спланируйте её: фиксируйте, какая модель породила каждый вектор, и относитесь к смене модели как к миграции данных, а не к правке конфига.
Коротко
Векторная база — это специализированный индекс, а не источник истины. Держите документы там, где они живут, считайте векторы производным артефактом, который можно перестроить, и начинайте с базы, которую уже эксплуатируете. К выделенной системе переходите тогда, когда у вас есть измеренная причина, а не на старте.