Перейти к содержимому

Эмбеддинги и Vector DB

Эмбеддинг-модель превращает фрагмент текста, картинки или кода в вектор — набор чисел, в котором близкие по смыслу объекты оказываются рядом. Векторная база хранит эти векторы и умеет быстро находить ближайшие. Это основа семантического поиска: запрос «как ограничить доступ к админке для роли» находит документ, где написано «права роли редактора», хотя общих слов в них нет.

Без этого слоя RAG превращается в поиск по ключевым словам, а модель — в генератор ответов по памяти.

Порядок выбора чаще обратный тому, как обсуждают тему: сначала решают, чем считать эмбеддинги, и только потом — где их хранить. Смена модели означает полный пересчёт индекса, смена базы — перенос готовых векторов.

На что смотреть:

  • Домен и язык. Универсальная модель на русскоязычных регламентах или на коде ведёт себя иначе, чем на английском тексте из её обучения. Проверять надо на своих данных.
  • Размерность. Больше — не значит точнее: 1024–1536 измерений обычно достаточно, а рост размерности увеличивает индекс и стоимость.
  • Длина входа. Большинство моделей имеют лимит в 512–8192 токена; фрагмент длиннее лимита молча обрезается.
  • Согласованность. Запрос и документы должны считаться одной моделью и одной версией. Смешать версии — типичная ошибка при обновлении.
  • Мультиязычность. Если корпус двуязычный, нужна модель с поддержкой обоих языков, иначе просадка будет выглядеть как «модель тупит».
РешениеКогда подходит
PineconeНужен полностью управляемый сервис и быстрый запуск без эксплуатации
Qdrant, WeaviateНужен self-hosted контроль, гибкая фильтрация и hybrid search
Milvus / ZillizМасштаб до миллиардов векторов, отдельная инфраструктурная команда
pgvectorУже есть PostgreSQL и не хочется второй базы
Chroma, LanceDBПрототип, локальная разработка, встраивание в приложение

Практическое правило: выбирайте не лучшую векторную базу, а ту, которую команда сможет эксплуатировать. Отдельный кластер ради 50 тысяч чанков документации — обычно лишняя инфраструктура; pgvector рядом с рабочей базой закрывает тот же сценарий и упрощает бэкапы.

  • Hybrid search. Векторы плюс ключевые слова. Чистый семантический поиск плохо находит точные идентификаторы: wp_cache_get, артикулы, коды ошибок, имена функций. Как это устроено — в разделе Поиск и reranking.
  • Фильтрация по метаданным. Права, язык, версия документа, проект, дата. Фильтр после поиска по векторам деградирует: вы получаете «похожие, но недоступные» документы.
  • Multi-tenancy. Изоляция данных между клиентами и проектами на уровне запроса, а не после выдачи.
  • Обновление и удаление. Документы меняются; база должна уметь переиндексировать чанки, а не только добавлять.
документы → чанки → эмбеддинг-модель → векторы + метаданные → Vector DB
↑
запрос → эмбеддинг той же модели → поиск top-K → фильтр → контекст для модели

Два условия корректности: эмбеддинг-модель для запроса и для документов одна и та же, а метаданные заполняются при индексации, не при запросе.

  • Кто владеет индексом. Если чанки строятся вручную и разово, через месяц база отстанет от документации.
  • Есть ли план переиндексации. Смена модели эмбеддингов требует полного пересчёта — это часы и деньги, их стоит планировать.
  • Не хранится ли в векторах то, что нельзя. Персональные данные и секреты в эмбеддингах — та же утечка, что и в тексте. Заодно проверьте, не восстанавливается ли исходный текст из вектора: для чувствительных полей это реальный риск.
  • Хватает ли фильтрации. Разграничение доступа после поиска — источник утечек: недоступный документ уже попал в контекст модели.
  • Измеряется ли качество. Промахи семантического поиска не видны глазу; без набора вопросов сравнить модели и параметры нечем.