Развертывание кода в продакшен: 31 сбой в прототипе, который уже продавали
Развертывание кода в продакшен: когда прототип уже продают, а он ещё не готов.

Статья разбирает реальный кейс: как команда получила голосовой ИИ-сервис, который «уже работал», и почему развертывание кода в продакшен потребовало не доработки, а полноценного исследования, от настройки детектора голосовой активности под русскую речь до пересборки архитектуры.
Голосовые ИИ-интервью на русском языке ломаются не там, где ждёшь: детектор речи путает паузу с концом реплики, а «быстрый прототип» снаружи выглядит как готовый продукт, хотя внутри нет ни логов, ни метрик, ни воспроизводимых тестов.
Материал основан на подробном разборе разработчика, который принял в работу голосовой сервис, навайбкоженный (то есть быстро собранный с помощью ИИ-инструментов) тимлидом-фронтендером. Сервис уже начали продавать, но задержки были слишком большими, ИИ-аватар замолкал при перебивании, качество транскрибации (перевода речи в текст) скакало, а логов и метрик синтеза и распознавания речи (TTS и STT) попросту не существовало. Вместо классического пути «требования, архитектура, разработка, прод» команда пошла от обратного: запускали то, что есть, находили конкретное ограничение, делали его воспроизводимым и только потом принимали архитектурные решения.
Почему «подкрутить настройки» превратилось в исследование?
Типичный пример: задача «бот иногда перебивает человека» выглядела как обычный баг. Есть VAD (Voice Activity Detection, детектор голосовой активности, он определяет, говорит сейчас человек или нет), надо подкрутить параметры. Но настройки оказались в конфликте друг с другом:
- Быстрая реакция бота приводила к тому, что он принимал за речь шум, эхо и даже собственный голос
- Низкая чувствительность означала, что бот не замечал, когда человек начинал говорить поверх него
- Короткая пауза заставляла бота перебивать длинный ответ, длинная превращала разговор в мучительное ожидание
В обычном вызове API (программного интерфейса) лишняя секунда может быть незаметна. В живом разговоре она ощущается мгновенно.
Как тестировали и что получилось?
Команда перестала крутить параметры вручную и начала собирать тестовые записи: обычная речь, длинные паузы внутри ответа, перебивания, шум, эхо.
На исходных настройках один из прогонов показал 31 преждевременное завершение реплики. После нескольких итераций осталось 5. Ноль тоже получался, но только с паузой ожидания в семь секунд. Разговаривать с таким ботом уже невозможно.
Дальше выяснилось главное: VAD вообще отвечает не на тот вопрос. Он определяет, есть ли сейчас речь, а команде нужно было понять, закончил человек отвечать или просто задумался. Так задача «подкрутить VAD» доехала до определения конца реплики (end-of-turn), многоступенчатого VAD и отдельных бенчмарков (тестовых наборов для измерения качества). Многоступенчатый VAD на тренировочных данных выглядел отлично, но на отложенном интервью результат разваливался. В прод это не поехало.
Что пришлось переделать в самом сервисе?
Работа шла почти вся по одному сценарию: чтобы сравнить разные системы распознавания и синтеза речи, сначала пришлось сделать так, чтобы их можно было менять. Отдельно измерить задержки. Понять, на каком этапе сервис ждёт.
Для редких зависаний понадобились логи. Для проверки очередного улучшения сначала собирали кейсы, на которых оно может сломаться. Большую часть кода разработчик просто удалял: он либо дублировал чужую работу, либо мешал понять, что происходит.
Требования и архитектура не были первым этапом. Они вытаскивались из уже работающего сервиса: нашли проблему, научились её повторять, поняли ограничение, и только после этого решили, что менять.
Что понадобится
- Тестовые аудиозаписи на русском: обычная речь, паузы, перебивания, фоновый шум
- Логирование TTS и STT: без метрик синтеза и распознавания речи любое сравнение провайдеров превращается в «поговорил и показалось»
- Возможность быстро менять провайдера распознавания и синтеза речи без переписывания всего сервиса
- Бенчмарки для VAD: набор записей, на которых вы измеряете число ложных срабатываний
- Время: это не доработка на пару дней, а цикл «баг, воспроизведение, исследование, решение»
Пошаговая инструкция
-
Зафиксируйте текущее состояние. Запишите 10 и более тестовых разговоров с ботом. Включите сценарии: длинный ответ с паузами, перебивание, фоновый шум, эхо.
-
Добавьте логирование. Каждый вызов STT (распознавание речи) и TTS (синтез речи) должен записывать задержку, текст и статус. Без этого развертывание кода в продакшен превращается в гадание.
-
Измерьте базовую линию. Прогоните тестовые записи через текущие настройки VAD. Посчитайте число преждевременных завершений реплики: это ваша отправная точка.
-
Разделите вопросы. VAD отвечает «есть ли сейчас речь», а вам нужен ответ «закончил ли человек мысль». Это разные задачи. Проверьте, не пытаетесь ли вы решить вторую, подкручивая первую.
-
Итерируйте на данных, не на ощущениях. Меняйте параметры, прогоняйте тот же набор записей, сравнивайте числа. Результат, который работает на тренировочных данных, обязательно проверяйте на отложенном наборе.
-
Упрощайте перед добавлением. Перед тем как подключать нового провайдера или менять архитектуру, удалите дублирующий и мёртвый код. По опыту автора исходного разбора, большая часть работы оказалась удалением, а не дописыванием.
-
Фиксируйте решения. Каждое изменение, которое прошло бенчмарк, записывайте с контекстом: какие данные, какие параметры, почему выбрали именно этот вариант. Иначе через неделю вы не вспомните, почему откатили предыдущий.
На практике команда из разбора получила 31 преждевременное завершение реплики на исходных настройках VAD. После сбора тестового набора (обычная речь, паузы, перебивания, шум) и нескольких итераций число упало до 5. При этом вариант с нулём ложных срабатываний давал паузу в семь секунд, что делало разговор невыносимым. Именно цифры, а не субъективное «вроде стало лучше», позволили принять решение: пять ошибок при живой паузе лучше, чем ноль ошибок при мёртвом ожидании.
Крутить параметры вручную без тестового набора. Без записей вы оптимизируете под последний разговор, а не под реальные сценарии. Особенно опасно для русской речи: паузы внутри ответа длиннее, чем в английском, и бот принимает их за конец реплики.
Путать «работает на демо» с «готово к продакшену». Сервис может вести осмысленный диалог и при этом не иметь ни логов, ни метрик, ни понимания суммарной задержки. Развертывание кода без этих данных означает, что вы обещаете клиенту качество, которое не можете измерить.
Пропускать проверку на отложенных данных. Многоступенчатый VAD из разбора отлично работал на данных, на которых его настраивали, но разваливался на новом интервью. Классическая ловушка переобучения (когда модель запоминает примеры вместо того, чтобы учиться распознавать паттерны).
Считать прототип прототипом, когда его уже продают. Как только клиент платит деньги, прототип становится неизвестной системой, которую надо исследовать, а не «чуть допилить».
Что делать с этим прямо сейчас?
Авторам Дзена и контент-мейкерам. Если вы планируете голосовые форматы с ИИ, знайте: на русском языке главная проблема не генерация текста, а определение конца реплики. Пауза, которую носитель русского делает, подбирая слово, бот трактует как приглашение говорить. Тестируйте на записях реальных разговоров, не на чистом тексте.
Разработчикам и техническим предпринимателям. Прежде чем обещать клиенту конкретные задержки, убедитесь, что вы можете их измерить. Логирование TTS и STT, это не «потом допилим», а условие честного разговора о качестве.
Маркетологам. Если ваш продукт использует голосовой ИИ, не продавайте демо как продукт. Разница между «поговорил с ботом и получил осмысленный ответ» и «бот стабильно работает при шуме, перебиваниях и паузах» может стоить репутации.
Этот кейс ценен не технической экзотикой, а честной фиксацией проблемы, которая сейчас массово повторяется. ИИ-инструменты позволяют за дни собрать сервис, который выглядит готовым. Бизнес начинает продавать, а разработчик обнаруживает, что внутри нет ни тестов, ни логов, ни понимания ограничений.
По моим наблюдениям, для русскоязычных голосовых сервисов ситуация сложнее, чем для английских: провайдеров STT и TTS с хорошим качеством русского меньше, а специфика речи (длинные паузы, интонационные конструкции) требует отдельной настройки VAD. Универсального решения пока нет, но подход «сначала данные и бенчмарки, потом архитектура» работает надёжнее, чем классическое проектирование вслепую.
Честная оговорка: автор исходного разбора сам признаёт, что не понял, лучше ли такой процесс, чем классический. Иногда работающий сервис экономит месяцы, иногда вся сложность переезжает на этап, когда продукт уже продан и отступать поздно.
Главный урок этого кейса укладывается в одну фразу: если прототип уже продают, перестаньте считать его прототипом и начните относиться к нему как к неизвестной системе, которую надо исследовать. Не «допилить», а понять.
Разберите свой контент-процесс с ИИ
Если вы используете нейросети для создания контента на Дзене и хотите перейти от экспериментов к системной работе, посмотрите наши инструменты
Попробовать dzen.guru
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Букмарклет для llama.cpp считает реальную скорость GGUF-моделей прямо на Hugging Face
Компания Hugging Face и открытый проект llama.cpp давно стали стандартом для тех, кто запускает языковые модели локально, но существующие калькуляторы скорости…

Контекст нейросети можно увеличить в разы: три метода без дообучения
Контекст нейросети (context window) определяет, сколько текста модель способна «видеть» за один раз, и когда он заканчивается, ответы становятся бессвязными, а…

ARC-AGI бенчмарк: 100% в тесте показывает силу кода, а не интеллект машины
Компания ARC Prize Foundation, основанная Франсуа Шолле, разработала серию бенчмарков ARC-AGI для проверки способности ИИ к обучению, и проекты, набирающие…
Комментарии