Три моих ИИ-проекта живут в проде от полугода до двух лет. Месяц назад я попробовал ответить, готов ли хоть один, и не смог.

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

Оказалось, что нет. Я не знал, сколько агент стоит в месяц. Точность ассистента последний раз мерили для версии, которой уже не существует. Каждый проект держится на том, что я помню, как он устроен.

Знакомая штука: проект живёт до вау-эффекта на демо, все хлопают, а дальше он не завершается и не умирает. Висит. У этого есть имя, demo-driven development, термин не мой. Болезнь массовая, MIT NANDA насчитали 95% корпоративных ИИ-пилотов без измеримого эффекта на P&L. К их методологии есть вопросы (выборка на интервью), но порядок величины сходится с тем, что я вижу вокруг.

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

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

Почему старое «готово» не работает

Сначала я думал, что дело в дисциплине. Не дожал, отвлёкся, ушёл в следующий проект.

Потом дошло. Я применяю к ИИ-системам definition of done от обычного софта: фича готова, когда работает для всех случаев. В детерминированном коде это нормально, там граница возможностей это баг, его чинят.

С LLM так не выйдет. Мой SQL-агент берёт 75% простых запросов и 30% сложных. Сколько итераций ни делай, «работает всегда» не будет, это свойство технологии. Требовать от вероятностной системы детерминированного DoD значит записать её в вечную бету навсегда. Не потому что лень доделать. Потому что «доделать» не определено.

Дальше цифры, которые меня успокоили. По S&P Global, в 2025-м 42% компаний свернули большинство ИИ-инициатив, годом раньше таких было 17%. Gartner среди причин называет слабый контроль рисков и неясную бизнес-ценность. Половина этого списка про одно и то же: неизвестно, что система делает на краю и кому она нужна.

Определение, к которому я пришёл: готовая ИИ-система это та, у которой граница возможностей проведена, записана и обслуживается. Умение всё делать в определение не входит.

Чек-лист

Рубрики готовности для ML придумали давно, у Google с 2017 лежит ML Test Score на 28 тестов. Мне нужен был вариант полегче, под LLM-фичи и на один вечер.

0. Гейт. Вы сами, без модели, отличаете правильный ответ от неправильного и можете объяснить как? Если нет, это не ИИ-проект, а молитва «зальём данные, оно само поймёт». Не поймёт. LLM автоматизируют то, что можно проверить, непроверяемое имитируют. Провалили гейт, вердикт красный независимо от остального.

  1. Точность измерена по классам задач и записана цифрами.

  2. Список того, чего система не умеет, существует и виден пользователям. Хватит плашки: «по вопросам X и Y бот не консультирует, зовите человека».

  3. На задаче вне возможностей система отказывает или эскалирует. Проверено вопросами-ловушками.

  4. Есть сигнал о тихих ошибках. Команда узнаёт о неверных ответах раньше пользователей.

  5. У системы есть владелец. Одно имя, а не «автор, когда вспомнит».

  6. Поменяли модель или промт, перегнали eval, записали дельту.

  7. Цена запроса и месяца известна, есть порог «дальше улучшать не окупается».

  8. Известно, кто пользуется и какую метрику это двигает.

К седьмому пункту приписка про цену потолка. Экономика ИИ-системы всегда подбита под конкретную модель. Прогоните eval на модели классом выше, прежде чем месяц докручивать харнес. Бывает, что потолок покупается деньгами, а вы пробиваете его головой.

Счёт простой: «да» балл, «частично» половина. 7–8 готово, система переживёт ваш отпуск. 4–6.5 граница оформляется, по моим планам это две-шесть недель. Ниже красная зона, система живёт ровно столько, сколько живёт энтузиазм автора.

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

Ядро промта аудита

Ты независимый аудитор ИИ-систем. Прогони проект по чек-листу DoD и заполни карточку. Ты не чинишь и не улучшаешь, только собираешь факты. Правила: каждый статус (да/частично/нет) подтверждай фактом, это файл, строка кода, запись в логе или цифра из БД; не нашёл доказательства = «нет», даже если «наверняка где-то есть»; не выдумывай цифры, что можно посчитать из логов за 10 минут, посчитай и пометь; чинить найденное по ходу запрещено, даже если чинится за 5 минут. По каждому из 9 пунктов дай: статус, доказательство, что нужно для «да», оценку трудозатрат в днях. Пункт 3 проверь сам: придумай 5 вопросов-ловушек вне типовых сценариев и прогони. В конце: счёт, вердикт, три факта, которые удивили, и план до зелёного с оценками.

Проект первый: внутренняя ИИ-платформа. 3.0 из 8

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

Счёт: шесть «частично», два «нет». Три вещи, которые меня зацепили.

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

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

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

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

Проект второй: SaaS для генерации контента. 1.5 из 8, гейт провален

Самый молодой. Платформа учит партнёров компаний вести соцсети и генерирует им черновики постов. Ранний этап, но не бумажный, первые пользователи есть.

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

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

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

Но главное принёс стоп-лист. Единственная защита контента ловит слово «лечит» и пропускает «вылечила», потому что поиск подстрочный. Пять ловушек из пяти прошли насквозь. При этом дисклеймер «БАД, не является лекарственным средством» система клеит исправно. На выходе пост, который обещает излечение и выглядит юридически оформленным. Защита работает, просто ловит не то, и от этого результат опаснее, чем если бы её не было вовсе.

План до зелёного: четыре недели плюс пилот, первые четыре дня снимают гейт. Или закрыть проект, чек-лист делает и этот выбор видимым.

Проект третий: ассистент поддержки. 3.5 из 8

Самый зрелый по замыслу. Оператор получает черновик ответа клиенту и сам решает, отправить или переписать. Автономных ответов клиенту нет. За первую декаду двести с лишним подсказок, 571 юнит-тест, шесть детекторов безопасности.

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

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

Отметки операторов, главный сигнал качества, молчат 34 дня, оборвалось на стороне смежной системы. Детектор этой тишины построен и работает. Пишет ERROR в лог, потому что канала доставки алертов в проекте нет. Токены, как и в первом проекте, считаются и выбрасываются.

Владелец и экономика тут два полных нуля, и закрываются они за три дня без внешних зависимостей. Это сразу 5.5 и жёлтая зона, а алерты с перегоном набора дают 6.5. Дальше упирается в чужую команду, без сигналов операторов пользу не посчитать. Оговорюсь: это план из карточки аудита, а не отчёт о сделанном.

Что повторилось во всех трёх

Проект

Счёт

Гейт

Профиль

ИИ-платформа

3.0 ?

пройден

умная, но живёт на моей памяти

SaaS для контента

1.5 ?

провален

продукт обогнал свою инженерию

Ассистент поддержки

3.5 ?

пройден полностью

культура есть, операционки нет

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

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

Качества моделей в этом списке нет. Валится операционная половина, та, которую скучно делать и которую не покажешь на демо. Свой SQL-эксперимент я исследовал до копейки, потому что исследовать интересно. Прод не измерял, потому что измерять рутинно.

На уровне кода то же самое. GitClear в отчёте по 623 миллионам изменений насчитал рост на 47% за три года у конструкций, которые маскируют ошибки: широкие catch, safe-navigation, стабы. Код выглядит надёжным, потому что глушит сигналы тревоги. У меня то же самое случилось этажом выше, в ответах системы и в дисклеймере поверх опасного текста. GitClear продаёт метрики кода, поправку на это делайте, но причину они формулируют точнее меня: агенты сфокусированы на задаче и не делают побочных квестов. Закрыл тикет и ушёл.

Что я поменял у себя

Гейт и владелец до первого коммита. Новый ИИ-проект не стартует, пока письменно не отвечен вопрос «как мы отличаем правильный ответ» и не названо имя владельца. Два дня разговоров на старте дешевле, чем узнать про проваленный гейт через два года.

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

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

Красная система получает план или дату закрытия. Аудит прогоняет любой в команде за вечер, карточка обсуждается как обычное ревью, при передаче проекта работает как акт приёмки. Оформление границы это недели, не кварталы. Не хочется оформлять, значит закрываем и освобождаем голову.

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

И главное, ради чего я всё это писал. «Готово» для ИИ-системы это не событие, а состояние, которое обслуживается, пока система жива. Пункты про сигнал, пересмотр и владельца закрыть навсегда нельзя. Зато теперь понятно, что именно обслуживать и почём.

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

Ограничения

Чек-лист собран на моём опыте и трёх аудитах, это не стандарт индустрии, за полным вариантом идите в ML Test Score. Пункты в счёте равновесные, в жизни нет: отсутствие владельца убивает быстрее, чем отсутствие документа об ограничениях, так что счёт это грубая линза. Аудиты делал агент, местами по коду, к которому сам приложил руку, конфликт он задекларировал, но человек результаты не перепроверял. Для ресёрч-фаз и ранних стадий рамка строгая, самый молодой проект я прогнал через неё сознательно, чтобы посмотреть на дно шкалы. И выборка: три проекта одного руководителя, который решил проверить себя жёстче, чем проверял бы чужих.

Комментарии (3)


  1. n_cto Автор
    07.09.2026 06:21

    Чек-лист целиком в статье, ядро промта аудита под спойлером там же. Полная версия промта, с форматом карточки и правилами честности аудитора, лежит в закрепе канала: https://t.me/n_cto

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


  1. ulisma
    07.09.2026 06:21

    Требовать от вероятностной системы детерминированного DoD значит записать её в вечную бету навсегда.

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

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

    Но почему-то LLM стали применять именно там, где нужна предсказуемость и понятные алгоритмы.


    1. n_cto Автор
      07.09.2026 06:21

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

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

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