К содержимому
MoranaLabs.
Research4 мин чтения0 просмотров

Постмортем: RAG тихо галлюцинировал на проде 6 недель. Faithfulness 0.92→0.71 

Модель прошла приемку на идеальном golden set, а через месяц юристы принесли нам заключение с выдуманными статьями закона. Разбираем, как HNSW-индекс сломал релевантность, почему графана показывала 99.9% аптайма, и как мы построили online-eval для закрытого контура.

0xReality

- alert: HighLatency expr: rate(http_request_duration[5m]) > 2.0 — вот так выглядит абсолютная слепота в production-среде. Когда вы мониторите on-prem RAG-систему в закрытом контуре исключительно инфраструктурными дашбордами, вы не управляете качеством. Вы просто следите за тем, чтобы генератор чуши работал без перебоев с минимальной задержкой. Этот постмортем: RAG тихо галлюцинировал на проде 6 недель — faithfulness упал 0.92→0.71, и uptime это не показал. Мы прозевали момент, когда нейросеть начала изобретать юридические прецеденты, потому что видеокарты гудели ровно, а 152-ФЗ и ФСТЭК категорически запрещают нам стримить логи во внешние облачные сервисы для аналитики.

Как мы до этого докатились? Релиз-кандидат был идеальным, никто не ждал подвоха. Приемка шла на вылизанном golden set из восьмисот сложных контрактов и нормативных актов. Метрика faithfulness — степень того, насколько генерация LLM опирается исключительно на извлеченные из базы факты — держалась на железобетонном уровне 0.92. Мы выкатили систему на edge-кластер, подписали акты и пошли пить кофе.

Первая неделя: полет нормальный, запросы идут. Вторая неделя: заказчик штатно заливает в векторную базу 3000 новых корпоративных политик. Третья неделя: ответы становятся чуть более обтекаемыми, но явных жалоб нет. Пятая неделя: дрейф корпуса достигает критической массы. При этом метрики рисуют идеальную картину: зеленые 99.9% доступности и 450 миллисекунд Time To First Token. Шестая неделя: взрыв. Юристы приносят распечатанное сгенерированное заключение, где модель уверенно ссылается на несуществующий пункт свежего постановления. Почему мы узнаем о деградации качества RAG от разъяренного пользователя с претензией на столе, а не из PagerDuty? Да потому что мы мониторили железо, а не смысл.

Золотой датасет на приемке оценивает статику. В проде векторная база живет, пухнет и меняется каждый день. При добавлении тех 3000 новых юридических документов в нашем пайплайне поплыл алгоритм чанкинга. Новые плотные тексты семантически пересеклись со старым пулом контрактов, образовав огромные монолитные зоны в векторном пространстве. В HNSW-индексе радикально изменилась плотность кластеров. Никто, естественно, не пересчитал критический параметр ef_search под возросший объем. Алгоритм поиска ближайших соседей просто не успевал пробиться через новые слои графа за заданное время.

В результате этап retrieval начал вытаскивать не самые релевантные куски, а те, что тупо быстрее находились алгоритмом аппроксимации на верхних слоях. Действительно релевантные параграфы просто вытеснились из top-k контекста, передаваемого в промпт. Что делает большая языковая модель, когда в системном промпте ей жестко приказывают «отвечай как эксперт», но не дают нужного факта? Она спасает ситуацию единственным доступным математическим способом — уверенно и правдоподобно врет, опираясь на веса своей претрейн-базы.

Наш изолированный контур усугубил проблему: готового внешнего мониторинга от SaaS-вендоров у нас нет, API для online-eval закрыто корпоративным файрволом, а свой пайплайн непрерывной оценки мы не построили. Оправдывались тем, что инференс и так жрет слишком много GPU-памяти.


Постмортем: RAG тихо галлюцинировал на проде 6 недель — что мы внедрили

Теперь мы на собственной шкуре знаем, почему RAG врет под нагрузкой. Метрик latency недостаточно, online-eval должен работать прямо поверх потока запросов в реальном времени. Мы полностью пересобрали архитектуру и развернули жесткий контур оценки, который крутится локально рядом с основным пайплайном:

  • LLM-judge на сэмпле прод-трафика: мы подняли отдельную легковесную модель, которая асинхронно прогоняет 5% реальных логов запросов и ответов, замеряя метрику faithfulness. Если скор падает ниже 0.85 — срабатывает алерт.
  • Citation-grounding hard-fail: перед выдачей ответа пользователю запускается легковесный кросс-энкодер. Он построчно проверяет, что каждый сгенерированный факт имеет прямую, математически доказуемую ссылку на исходный чанк. Нет ссылки — генерация блокируется на корню с отбивкой «Недостаточно данных».
  • Алерт на падение retrieval-recall: логируем распределение косинусного расстояния в выдаче базы. Если средний скор возвращаемых документов деградирует — это прямой сигнал к перестройке HNSW-индекса.
  • Human-in-the-loop на критичных доменах: для запросов с тегами юридических рисков ответы с низким confidence score принудительно падают в очередь на ручную верификацию.

Golden set на этапе приемки — это не гарантия качества. Это лишь подтверждение того, что ваша система могла работать в идеальных условиях ровно один день в прошлом. Без семантического онлайн-мониторинга любой внедренный RAG деградирует молча, накапливая ошибки, пока они не выстрелят. Единственный способ не получить иск от регулятора за тихое вранье нейросети — развернуть независимый eval-контур прямо на том же железе, где крутится инференс. Планируете катить LLM в зарегулированный сектор — начните с аудита того, как вы собираетесь ловить дрейф.

  • #HNSW
  • #LLM monitoring
  • #online-eval
  • #on-prem
  • #RAG
ПоделитьсяTelegramX
рассылка

Новые статьи — на почту

Лонгриды про ML в проде, edge и компьютерное зрение — сразу после выхода.

Канал в Telegram: morana.log

Без спама. Нажимая «Подписаться», соглашаетесь с обработкой персональных данных

бесплатный pdf-гайд

Edge AI или облако: когда тащить нейросеть на железо

Признаки, фреймворк выбора и прикидка экономии — короткий PDF-гайд на почту.

PDF · 5 страниц · без спама. Нажимая «Получить», соглашаетесь с обработкой персональных данных

Читать дальше
— заявка

Опишите задачу  ответим как инженеры. 

Оставьте имя и Telegram — остальное обсудим. Без брифов на 40 слайдов и звонков по три раза.

Отвечаем за пару часовотвечает инженер, а не отдел продажNDA по запросу

Сюда напишем — это быстрее всего

Или сразу написать в Telegram

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