29 авг. 2025 г.·8 мин

Обновление эмбеддингов без остановки сервиса: blue-green

Практичные стратегии, как провести обновление эмбеддингов без остановки сервиса: blue-green, параллельные индексы, проверки качества и откат.

Обновление эмбеддингов без остановки сервиса: blue-green

Задача: обновить модель и эмбеддинги без простоя

Когда вы меняете модель эмбеддингов или пересчитываете векторные представления, ломается не один компонент, а вся цепочка. Векторный поиск начинает сравнивать новые векторы со старым индексом (или наоборот), и выдача становится непредсказуемой. Даже если сервис формально жив, пользователи быстро замечают: «раньше находило, а теперь нет».

Простой особенно опасен там, где поиск и подсказки - часть ежедневной работы. Это может быть внутренний поиск по регламентам, заявки в service desk, подбор похожих документов, ответы помощника в чате. Если такой инструмент недоступен хотя бы час, люди возвращаются к ручному поиску, дублируют запросы, растет нагрузка на поддержку и падает доверие к системе.

Типичные симптомы при неаккуратной замене модели или эмбеддингов:

  • Падает релевантность: в топе оказываются «похожие по словам», но не по смыслу документы.
  • Появляются пустые ответы: система ничего не находит там, где раньше находила.
  • Растут задержки: индекс прогревается, кеши сбрасываются, запросы начинают тормозить.
  • Резко меняется распределение результатов: одни и те же запросы дают «другой мир» без понятной причины.

Обновление затрагивает сразу несколько слоев: версию модели, пайплайн подготовки текста, процесс пересчета эмбеддингов, векторный индекс и сервис выдачи (например, с фильтрами по правам доступа и смешанным ранжированием: векторным и ключевым).

Проблема не только в том, что пересчет может идти часами или днями. Часто ломает несовместимость: старый индекс не умеет работать с новыми векторами, а новая модель по-другому «видит» текст. Поэтому цель выглядит так: сохранить доступность сервиса, получить предсказуемое качество и иметь быстрый откат, если после переключения что-то пошло не так.

В организациях с жесткими требованиями к непрерывности (например, госструктуры или банки, где инфраструктура часто развернута на локальном железе) нельзя просто «обновиться ночью и посмотреть». Нужны стратегии, которые позволяют обновлять модель и эмбеддинги параллельно работающей системе и контролировать эффект до того, как изменения увидят все пользователи.

Карта компонентов: что нужно версионировать

Чтобы обновляться без остановки сервиса, полезно сначала набросать простую карту потока. Ошибка чаще не в модели, а в том, что меняется один кусок, а соседние остаются старыми. В итоге система начинает отвечать странно.

Типичный путь запроса: исходные данные (документы и запросы) - модель эмбеддингов - векторный индекс - поиск ближайших соседей - (иногда) доп. ранжирование - ответ пользователю. Версию важно держать не только у модели, но у всего, что влияет на совместимость между шагами.

Что стоит версионировать явно:

  • Модель эмбеддингов (веса, имя/хэш версии) и режим работы (например, включена нормализация векторов или нет).
  • Токенизатор или словарь (даже небольшое изменение может сдвинуть представления).
  • Параметры построения эмбеддинга: размерность, тип данных (float32/float16), pooling, постобработка (L2-нормализация).
  • Настройки поиска: метрика расстояния (cosine/dot/L2), параметры индекса (например, число кластеров/графовых связей, efSearch), фильтры и правила дедупликации.

На практике удобно иметь одну «карточку версии» рядом с моделью и индексом: например, embedding_model=v3, tokenizer=v3, dim=768, metric=cosine, normalize=true, index_build=v3.1. Тогда любой эмбеддинг и любой индекс однозначно привязываются к набору настроек.

Критичные зависимости, о которые чаще всего ломаются миграции:

  • Размерность вектора. Если новая модель дает 1024 вместо 768, старый индекс не сможет принять такие векторы.
  • Метрика и нормализация. Cosine обычно предполагает нормированные векторы, а dot product часто ведет себя иначе.
  • Формат хранения. Переход на float16 или квантование может ускорить поиск, но меняет качество и распределение расстояний.

Самые рискованные операции - те, которые сложно быстро откатить. Переиндексация занимает время и деньги, а переключение трафика мгновенно затрагивает всех. Поэтому «опасные» шаги лучше строить так, чтобы старая цепочка (модель + эмбеддинги + индекс + параметры поиска) продолжала жить параллельно и в любой момент могла снова принять трафик.

Выкладка без простоя: blue-green, canary, shadow

Главное правило - не заставлять сотрудников первыми «тестировать» новую версию в рабочее время. Для этого используют три подхода. Они отличаются тем, как вы подаете трафик на новую версию и как быстро можете вернуться назад.

Blue-green

Blue-green - это две одинаковые среды: «синяя» (текущая) и «зеленая» (новая). Вы поднимаете новую модель, новые эмбеддинги и все, что вокруг них, в отдельной среде, прогоняете проверки, а затем переключаете трафик одним переключателем (роутер, балансировщик, флаг).

Плюсы: быстрый откат (переключили обратно), понятная ответственность (в каждый момент активна ровно одна версия). Минусы: дороже по ресурсам, потому что нужно держать две полноценные копии.

Canary и shadow

Canary - это постепенное включение новой версии по доле трафика. Сначала 1-5% запросов, затем больше, пока не дойдете до 100%. Ошибки видны рано, а риск распределен.

Shadow - это «теневая» проверка. Новая версия получает копию запросов и считает ответы, но пользователям вы продолжаете отдавать ответы старой версии. Так можно собрать статистику на живых данных без влияния на опыт пользователей.

Обычно выбор выглядит так:

  • Blue-green - когда нужен быстрый откат и вы можете позволить себе двойные ресурсы.
  • Canary - когда важнее плавное снижение риска и вы готовы следить за метриками на каждом шаге.
  • Shadow - когда хотите проверить качество на реальных запросах, не меняя ответы для людей.
  • Canary + shadow - когда сначала сравниваете «в тени», а потом осторожно включаете часть трафика.

Практический пример: у внутреннего поиска по базе знаний новая модель стала лучше на «идеальных» тестах, но в реальности сотрудники пишут короткие запросы с опечатками. Shadow поможет увидеть, что новая версия чаще промахивается на таких запросах, не ломая рабочий день.

Чтобы любой из подходов был безопасным, заранее продумайте три вещи:

  • Четкий переключатель: один параметр, который меняет, куда идет трафик.
  • Быстрый откат: заранее проверенная команда или кнопка, без ручных правок.
  • Порог остановки: простое правило, когда вы прекращаете раскатку (например, рост ошибок или падение кликов по результатам).

Параллельные индексы: как мигрировать векторный поиск

Самый безопасный способ обновить векторный поиск - держать рядом два индекса. Старый индекс продолжает отвечать пользователям, а новый строится в фоне на новых эмбеддингах. Так вы снижаете риск «уронить» поиск для сотрудников.

Идея простая: пока трафик идет в индекс v1, вы создаете v2 и доводите его до того же покрытия данных. Переключение делается только тогда, когда v2 показывает сопоставимое или лучшее качество.

Dual write: как не потерять новые данные

Пока новый индекс строится, данные продолжают меняться: добавляются документы, обновляются карточки, появляются новые тикеты. Чтобы v2 не отстал, включают dual write: каждый новый или обновленный объект получает эмбеддинг и записывается сразу в оба индекса.

Здесь важен единый «контракт записи»: одинаковые id, одинаковые правила удаления и одинаковая нормализация текста. Это сильно упрощает проверку.

Backfill: догрузка истории и контроль прогресса

После включения dual write вы догружаете историю в v2 (backfill): все старые документы пересчитываются новой моделью и попадают в новый индекс. Следите не только за процентом готовности, но и за пропусками.

Практичный минимум для контроля:

  • счетчик обработанных объектов и оставшегося хвоста
  • доля ошибок по типам (таймауты, пустой текст, неверная кодировка)
  • выборочная сверка: есть ли id в v2 для «топовых» документов
  • время индексации и скорость догрузки

Чтобы не запутаться в версиях, задайте правила именования и не нарушайте их: например, search-index-v1, search-index-v2, плюс дата сборки или номер релиза в метаданных. Тогда переключение и откат будут однозначными.

Пошаговый план миграции: от подготовки до переключения

Расчет ресурсов под два индекса
Поможем оценить CPU, GPU, диск и сеть для параллельной переиндексации.
Запросить расчет

Критично заранее разделить старую и новую версии и договориться, что именно считается успехом. Тогда переключение будет управляемой операцией.

1) Подготовьте новую версию как отдельный контур

У модели, пайплайна предобработки текста и формата вектора должна быть одна общая версия. Это защищает от ситуации, когда модель обновили, а токенизация или нормализация текста осталась старой, и качество «плывет» без понятной причины.

Заранее зафиксируйте, какие данные вы будете пересчитывать (все документы или только активные) и как будете маркировать объекты: document_id, версия эмбеддинга, время пересчета.

2) Постройте новый индекс параллельно и проверьте консистентность

Новый индекс поднимайте рядом со старым, не трогая прод. Сначала прогоните пересчет эмбеддингов в фоне, затем соберите индекс и проверьте базовые вещи: количество документов, долю пустых/битых векторов, совпадение метаданных.

Простой практичный тест: возьмите 50-100 типовых запросов сотрудников (по базе знаний, заявкам, политикам) и убедитесь, что новый индекс находит нужные документы, а не возвращает случайные.

Удобная схема работ в 4 шага:

  • Зафиксировать версию пайплайна и подготовить набор тестовых запросов (ручных и из логов).
  • Пересчитать эмбеддинги и собрать новый индекс в отдельной среде.
  • Подать запросы в старый и новый контур параллельно (shadow) или на малую долю пользователей (canary).
  • Переключить основной трафик, но оставить время и механизм для быстрого отката.

3) Запустите shadow/canary и соберите сигналы

Shadow удобен, когда важно не менять ответы пользователям, но сравнить качество и метрики «за кулисами». Canary полезен, если нужно увидеть реальное поведение: клики, время до нужного документа, число уточняющих запросов.

4) Переключение и окно для отката

Переключайте трафик быстро, но не удаляйте старый индекс сразу. Оставьте понятный «рубильник» для возврата: конфигурационный флаг, роутинг по версии, отдельный endpoint. Это снижает риск сорвать работу, если после миграции всплывет редкий, но важный кейс.

Контроль качества: что измерять до и после миграции

Миграции чаще ломаются не на переключении, а на тихой деградации качества. Поэтому базовую линию фиксируют до обновления и сравнивают после.

Начните с набора тестовых запросов, которые отражают реальные задачи сотрудников. Не «красивые» примеры, а то, что люди правда вводят: короткие фразы, опечатки, смешение русского и английского, внутренние названия. Практика: собрать 50-200 запросов из логов и добавить вручную 10-20 «больных» кейсов.

Офлайн проверка: качество без пользователей

Офлайн тесты помогают понять, что изменилось именно из-за модели и индекса. Для каждого тестового запроса зафиксируйте ожидаемые документы (или хотя бы «подходящие» варианты) и сравните старую и новую версию.

Обычно измеряют:

  • Доля запросов, где нужный документ найден в топ-1 или топ-5 (recall@k).
  • Средняя позиция правильного результата.
  • Стабильность: насколько часто ответы «прыгают» при одинаковом запросе.
  • Доля «пустых» ответов и доля нерелевантных ответов в топе.
  • Время поиска и время до первого результата.

Полезно вручную просмотреть 20-30 запросов: люди быстро замечают смысловые подмены, которые метрики иногда пропускают.

Онлайн сигналы: что видят пользователи

После включения новой версии смотрите на поведение, а не только на «точность». Если людям стало сложнее находить нужное, это проявится в кликах и времени.

Следите за кликами по результатам, временем до первого клика или до открытия документа, числом переформулировок, долей запросов без кликов, а также за ростом обращений в поддержку по теме поиска.

Заранее задайте пороги. Пример: релиз останавливается, если recall@5 падает больше чем на 2-3 п.п., доля запросов без кликов растет больше чем на 5% относительно базы, или время до результата ухудшается больше чем на 10-15%. Такие правила снимают спор «кажется стало хуже».

Наблюдаемость: метрики и алерты, чтобы не пропустить деградацию

Пилотное тестирование shadow и canary
Организуем shadow и canary на реальных запросах, не ломая работу пользователей.
Начать пилот

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

Что измерять: от железа до поведения пользователей

Соберите метрики так, чтобы можно было сравнить старую и новую версию рядом: одинаковые панели, одинаковые окна времени, раздельные метки по версии модели и индекса.

Минимальный набор:

  • Технические метрики: p95 задержка по ключевым эндпоинтам, доля 5xx и таймаутов, CPU/GPU загрузка, память, очереди на обработку.
  • Метрики векторного поиска: время поиска и подготовки запроса, размер индекса и темп роста, процент пустых результатов, доля запросов с очень низким скором.
  • Сигналы качества на потоке: CTR по подсказкам, доля переформулировок, среднее число попыток до клика, доля отказов.
  • Бизнес-сигналы: обращения в поддержку, жалобы в чатах, рост ручных операций.

Важно договориться о базовой линии: какие значения считаются нормой именно для вашей нагрузки. Без этого алерты будут либо молчать, либо шуметь.

Алерты: что должно срабатывать автоматически

Хороший алерт отвечает на вопрос «нужно ли будить дежурного прямо сейчас». Делайте их простыми и привязанными к влиянию на пользователей.

Примеры правил, которые часто спасают миграции:

  • p95 задержка выросла на X% относительно blue за последние 10-15 минут.
  • Доля пустых результатов превысила порог и держится Y минут.
  • Ошибки 5xx или таймауты превысили порог, плюс выросли ретраи.
  • Резкий рост использования памяти или падение свободного места на узлах индекса.
  • Сработал «бизнес-стоп»: всплеск обращений или отмен действий в интерфейсе выше нормы.

Чтобы алерты не были слепыми, добавьте контекст в уведомление: версия модели, версия индекса, регион, процент трафика, и последние изменения (переключение, прогрев, ребилд).

Пример: после включения green на 20% трафика p95 задержка не изменилась, но процент пустых результатов вырос с 1% до 6%. Часто это означает проблему в пайплайне эмбеддингов (другая нормализация, неверный язык, не тот энкодер) или в фильтрах поиска. Такой алерт должен вести к действию: остановить рост трафика, вернуть пользователей на blue или временно направить часть запросов на старый индекс.

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

Частые ошибки и ловушки при обновлении эмбеддингов

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

Технические несостыковки, которые ломают поиск

Первая ловушка - несовместимость размерности векторов. Модель могла перейти, например, с 768 на 1024 измерения, а индекс или клиентский код все еще ожидает старый формат. В лучшем случае это упадет с ошибкой, в худшем - тихо начнет отдавать мусор.

Вторая - несоответствие метрики расстояния и настроек нормализации. Если раньше использовали cosine и нормализованные векторы, а в новой версии переключились на dot product или L2 без пересмотра параметров, качество может просесть резко и без очевидной причины. Опасно и то, что разные векторные базы по-разному трактуют «cosine»: иногда это отдельная метрика, иногда это dot product + обязательная нормализация.

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

Ошибки планирования и контроля

Недооценка времени переиндексации почти гарантирует пиковые проблемы. Переиндексация нагружает CPU, диск и сеть, а еще создает очереди в пайплайне. Если параллельно идут рабочие запросы, можно получить и деградацию качества (из-за таймаутов), и деградацию скорости.

План отката часто бывает формальным: «вернемся назад, если что». Нужны конкретные стоп-сигналы и действия. Например:

  • качество упало ниже порога (клики, ручная оценка топ-5)
  • p95 задержки поиска выросла в 2 раза и держится 15 минут
  • доля пустых ответов или ошибок превысила X%
  • нагрузка на базу/очередь вышла за безопасный лимит

Отдельная ловушка - не проверить клиентов, которые кешируют результаты или держат долгие соединения. После переключения часть пользователей может еще минуты работать на старой версии, и вы получите смесь поведения, которую трудно диагностировать.

Практичный пример: вы обновляете поиск по внутренним инструкциям для инженеров и службы поддержки. Если новая модель стала лучше находить длинные регламенты, но хуже - короткие названия деталей и артикулы, сотрудники начнут копировать запросы, открывать больше страниц и чаще дергать коллег. Это заметят раньше, чем вы увидите «средний скор».

Чтобы избегать таких ловушек, заранее фиксируйте совместимость (размерность, метрика, нормализация), не смешивайте версии в одном индексе, планируйте переиндексацию как отдельную нагрузку и держите быстрый откат с понятными порогами остановки.

Короткий чеклист перед переключением

Контур 24/7 с наблюдаемостью
Настроим мониторинг, алерты и поддержку 24/7, чтобы деградации качества не проходили незаметно.
Запросить

Перед финальным переключением важно убедиться, что вы контролируете не только модель, но и все, что вокруг нее. Большинство сбоев случается из-за мелочей: другой токенизатор, индекс собрали не теми параметрами, не готовы лимиты, нет быстрого отката.

Что должно быть готово до переключения

Проверьте, что версии зафиксированы и понятны всем участникам. В карточке релиза (или простом документе) укажите: версию модели, версию токенизатора, схему препроцессинга текста и версию индекса. Если менялись параметры эмбеддингов (размерность, нормализация, язык), это тоже должно быть записано.

Убедитесь, что новый индекс построен полностью и прошел проверку на контрольных данных. Речь не только о «индекс собрался без ошибок», а о том, что результаты поиска на заранее выбранных запросах выглядят ожидаемо. Желательно иметь набор из 50-200 «эталонных» запросов и документов, которые отражают реальную работу сотрудников.

Проверьте режим безопасного запуска: canary или shadow. В canary часть трафика идет в новую связку, а в shadow новая связка получает копию запросов без влияния на ответы. В обоих случаях должен быть дашборд с понятными метриками, чтобы за 5 минут увидеть проблему.

Что обязательно для отката

Откат должен быть таким же простым, как переключение. Если для возврата нужно «вручную пересобрать индекс» или «откатить несколько сервисов в правильном порядке», это уже отдельная операция.

  • Готов переключатель трафика (быстро вернуть старую версию без деплоя)
  • Старый индекс сохранен и доступен (не удален и не перезаписан)
  • Заданы лимиты нагрузки для нового контура (QPS, таймауты, размер очередей)
  • Описан критерий отката (рост ошибок, падение качества, рост задержки)

Проверка на сценариях сотрудников

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

Если вы работаете в организации с требованиями к надежности и поддержке 24/7 (как это бывает в госструктурах, медицине или финансах), такой чеклист лучше сделать обязательным.

Пример сценария и следующие шаги

Сценарий: корпоративный поиск по документам и заявкам

Есть внутренний портал, где сотрудники ищут по политикам, договорам, инструкциям, а также по заявкам в службу поддержки. Поиск основан на эмбеддингах: пользователь вводит запрос, система находит похожие по смыслу фрагменты и показывает результаты. Команда хочет перейти на новую модель, потому что текущая хуже понимает короткие запросы вроде «сброс пароля» или «отчет по закупкам».

Задача - провести обновление так, чтобы сервис оставался доступным, а качество не провалилось на типовых запросах.

Как провести обновление без риска

Практичный путь: параллельный индекс + shadow, затем canary. Старый и новый контуры живут рядом и сравниваются на реальных запросах без влияния на пользователей до момента уверенности.

Типовой план:

  • Поднимите новый индекс параллельно старому и начните пересчет документов в фоне, с версионированием модели и настроек.
  • Включите shadow: пользователей обслуживает старый индекс, а новый получает те же запросы «в тени» и пишет результаты и метрики в логи.
  • Выберите 20-50 типовых запросов (по ролям и отделам) и заведите простой «эталон»: что считается хорошим ответом и какие документы должны быть в топе.
  • Запустите canary: 1-5% трафика (или одна группа пользователей) получает результаты из нового индекса, остальные остаются на старом.
  • После стабильных метрик увеличьте долю и переключите основной трафик, оставив быстрый откат.

Между шагами заложите паузу на проверку. Скорость миграции почти всегда менее важна, чем контроль качества.

Как поймать проблему на ранней стадии

Частая ситуация: по общим метрикам все «нормально», но релевантность падает по нескольким критичным сценариям. Например, новый индекс начинает поднимать красивые, но не те документы, а по запросам поддержки хуже находит ответы по конкретным продуктам или регламентам.

Самый заметный сигнал - просадка качества по типовым запросам: больше кликов на нерелевантные результаты, рост переформулировок, падение доли «успешных» сессий (когда сотрудник находит нужное за 1-2 попытки). Поэтому shadow-логи и ручной прогон контрольных запросов перед расширением canary часто спасают релиз.

Следующие шаги

Чтобы такие обновления не превращались в разовый подвиг, закрепите процесс:

  • Введите обязательные версии: модель, параметры эмбеддинга, схема индекса и набор контрольных запросов.
  • Автоматизируйте переиндексацию и переключение, чтобы откат занимал минуты, а не часы.
  • Договоритесь о стоп-условиях для canary (какие метрики и на сколько могут ухудшиться).
  • Запланируйте ресурсы под параллельные индексы и нагрузку на пересчет заранее.

Если обновление упирается в инфраструктуру (ресурсы под два контура, надежность хранения, мониторинг, поддержка 24/7), иногда проще привлечь системного интегратора. В Казахстане этим, в том числе, занимается GSE.kz (gse.kz): у них есть опыт поставки локально произведенных серверов S200 и построения инфраструктуры для корпоративных ИТ-систем, где простои недопустимы.

FAQ

Почему нельзя просто обновить модель эмбеддингов и оставить старый индекс?

Чтобы не сравнивать новые векторы со старым индексом. Когда модель меняется, меняется и «геометрия» пространства: похожие документы оказываются в других местах, а старый индекс ранжирует их неправильно. В итоге релевантность падает, даже если сервис формально работает.

Что именно нужно версионировать при обновлении эмбеддингов?

Версионируйте не только веса модели, но и всё, что влияет на совместимость: токенизатор, размерность вектора, тип данных, нормализацию и метрику поиска. Удобно держать одну «карточку версии», чтобы любой вектор и индекс однозначно привязывались к одному набору настроек.

Какие несовместимости чаще всего ломают миграцию?

Самый частый и болезненный сбой — несовпадение размерности вектора, из‑за которого индекс не принимает данные или начинает работать некорректно. На втором месте — несоответствие метрики и нормализации (например, раньше был cosine с нормализацией, а стало иначе), из‑за чего качество резко меняется без явной ошибки.

Чем blue-green отличается от canary на практике?

Blue-green — это два полностью отдельных контура, и переключение трафика происходит одной настройкой, поэтому откат быстрый. Canary — это постепенное включение новой версии на небольшой доле запросов, чтобы поймать проблемы рано и не затронуть всех сразу.

Зачем нужен shadow-режим и когда он лучше canary?

Shadow прогоняет реальные запросы через новую версию «в тени», но пользователям продолжает отдавать ответы старой версии. Это полезно, когда вы хотите проверить качество на живых данных и увидеть ошибки пайплайна, не рискуя рабочим процессом пользователей.

Как обновить векторный поиск через параллельные индексы без простоя?

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

Что такое dual write и почему без него новый индекс отстанет?

Потому что пока вы строите новый индекс, данные продолжают обновляться. Dual write означает, что новые и изменённые документы одновременно записываются в оба индекса по одному и тому же контракту идентификаторов и правил удаления, иначе новый индекс будет «отставать» и сравнение качества станет нечестным.

Какие минимальные проверки качества сделать до переключения трафика?

Начните с 50–200 реальных запросов из логов и добавьте несколько «проблемных» примеров вроде коротких фраз, опечаток и смешения языков. Сравните, попадает ли нужный документ в топ‑1 или топ‑5, как часто появляются пустые ответы, и не ухудшилось ли время ответа.

Какие метрики и пороги стоит использовать как стоп-сигналы в canary?

Заранее задайте простые стоп‑правила, которые привязаны к пользователям: рост доли пустых результатов, рост ошибок и таймаутов, заметное ухудшение задержки, ухудшение кликов или рост переформулировок. Если порог сработал, заморозьте раскатку и верните трафик на старый контур одной командой.

Какие ошибки чаще всего допускают при обновлении эмбеддингов без простоя?

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

Обновление эмбеддингов без остановки сервиса: blue-green | GSE