Ассистент для зумов, часть 6: полчаса тишины, которых не было в протоколе
Локальный ассистент для зумов потерял из протокола полчаса тишины: он вырезал паузу перед распознаванием и считал таймкоды по укороченному звуку. Все решения после паузы съехали на 30 минут, ссылки на запись вели не туда. Лечится картой времени: сегменты хранят исходные смещения, а долгие паузы попадают в протокол отдельной строкой.
🔎 1 час 10 минут против 1 часа 40: как заметили пропажу
Руководитель проекта открыл готовый протокол и споткнулся о первую строку. Длительность: 1 час 10 минут. В Zoom тот же созвон шёл 1 час 40 минут. Полчаса исчезли, и в тексте не осталось намёка, что они были.
Созвон шёл по проекту внедрения 1С:ERP: пять человек обсуждали обмен данными между учётной системой и сайтом. На 41-й минуте разработчик включил демонстрацию экрана и запустил тестовую загрузку каталога. Она шла полчаса. Команда молчала: кто-то отвечал в рабочем чате, кто-то смотрел на индикатор. Загрузка упала на одном из товаров, и остаток созвона ушёл на разбор ошибки и решение.
В протоколе значилось решение «заморозить обмен остатков до пятницы» с отметкой 0:42. Руководитель промотал запись до этой минуты и увидел бегущий индикатор загрузки и тишину. Реплика прозвучала на 1:12. Вместе с тишиной пропали полчаса таймкодов: всё, что сказали после паузы, в протоколе оказалось на 30 минут раньше, чем в записи.
сначала ассистент придумывал реплики
Первая версия ассистента тишину не резала. Запись целиком уходила в модель распознавания речи, и на пустых участках модель делала то, что умеют модели семейства Whisper: достраивала текст из ничего. В черновиках протоколов появлялись фразы вроде «Продолжение следует» и «Субтитры сделал…». Их никто не произносил, но выглядели они как реплики живых участников.
Мы добавили перед распознаванием шаг, который убирает участки без речи, — фильтр silenceremove из ffmpeg. Выдуманные фразы исчезли. Обработка ускорилась, потому что модель перестала гонять через себя пустые минуты. На обычных созвонах паузы короткие, сдвиг копится по секундам, и ссылка на минуту всё равно приводит рядом с нужной репликой. Полчаса молчания сделали ошибку видимой.
⏱ почему таймкоды съехали ровно на длину паузы
Возьмём два файла. Исходная запись длится 1 час 40 минут: разработчик запускает загрузку на 0:41, следующая реплика звучит на 1:11. Файл после ffmpeg длится 1 час 10 минут, паузы в нём нет, и две реплики стоят вплотную. Модель про исходник ничего не знает. Фразу, которую участник произнёс на 1:12, она записала на 0:42, и в протокол ушёл именно этот таймкод.
Формально сбоя не было. Ни одна программа не упала, лог чистый. Текст читался гладко. Но таймкод описывает файл, который слушала модель, а не разговор, который случился. Мы вырезали кусок и не записали, где именно, поэтому связь между двумя шкалами времени пропала. Заметили сбой только потому, что руководитель проекта сверил длительность.
💸 сколько стоит протокол, которому нельзя верить
Протокол нужен для споров. Заказчик пишет: «Мы не соглашались переносить сроки». Вы отвечаете: «Смотрите запись, 0:42». Он открывает запись, видит там бегущий индикатор и перестаёт доверять всем ссылкам в ваших протоколах. Дальше их приходится сверять вручную, то есть слушать созвон второй раз. Ради этого ассистента никто и не ставил.
Вторая цена — реплики, которых не было. «Субтитры сделал…» заметит любой читатель, но каждая такая строка подрывает доверие ко всему остальному тексту, включая настоящие решения.
Третья — данные. Запись созвона содержит голоса и имена сотрудников, а это персональные данные. 152-ФЗ требует хранить данные граждан РФ в базах на территории России, поэтому мы ставим ассистента локально, на сервере компании, без отправки записи во внешний сервис. Локальная установка снимает вопрос, куда уходит запись. Вопрос, можно ли верить протоколу, остаётся за вами.
🧪 четыре способа обращаться с паузой
Вот что каждая схема делает с полчасом тишины из нашей записи.
| Схема | Таймкоды после паузы | Что в протоколе на месте паузы | Главный риск |
|---|---|---|---|
| Вся запись без предобработки уходит в модель | Совпадают с записью | Выдуманные реплики вроде «Продолжение следует» | Фразы, которых никто не произносил |
| Вырезать тишину и склеить звук | Съезжают на длину паузы, у нас на 30 минут | Ничего, длительность занижена | Ссылки на запись ведут не туда |
| Вырезать тишину и хранить исходные смещения | Совпадают с записью | Строка «пауза 30 минут, речи нет» | Больше кода в сборке протокола |
| Человек сверяет протокол с записью | Совпадают после ручной правки | Всё, что заметил человек | Второй раз слушать созвон, поэтому сверяют не всегда |
Первая схема даёт выдуманный текст, вторая сдвигает время, четвёртая съедает часы, которые ассистент должен был сэкономить. Мы остановились на третьей. Она требует больше кода, зато протоколу можно верить.
как устроена карта времени
Вырезать паузу можно, забывать о ней нельзя. Ассистенту нужна карта времени: таблица, которая связывает минуты в укороченном звуке с минутами в исходной записи. Строится в пять шагов.
- ✓Детектор речи (VAD) размечает исходную запись и возвращает куски с речью: «с 0:00 до 0:41», «с 1:11 до 1:40». Всё между кусками считается паузой.
- ✓Каждый кусок уходит в распознавание отдельно, а рядом сохраняется его смещение — время начала в исходной записи.
- ✓Таймкоды, которые вернула модель, прибавляются к смещению. Реплика на первой минуте куска, начавшегося с 1:11, получает отметку 1:12.
- ✓Паузы дольше порога попадают в протокол строкой вроде «0:41–1:11, пауза 30 минут, речи нет».
- ✓Перед отправкой сумма кусков и пауз сверяется с длиной исходного файла. Если не сходится, протокол остаётся в черновиках с пометкой для человека.
какой порог паузы выбрать
Порог определяет, что считать паузой. Три секунды между репликами — обычное дыхание, в протокол их писать незачем. Две минуты без речи уже событие: люди ждут загрузку, читают документ, отвечают на другой звонок. Для начала мы взяли две минуты и подстраиваем под команду. Если ваши сотрудники молча читают договор с экрана, тишина у них часть работы, и протокол без неё выглядит короче встречи.
чего не увидит даже карта времени
Zoom тоже умеет вырезать паузу. Если ведущий поставил запись на паузу, этот отрезок в файл не попадает, и ассистент получает уже укороченную запись. Карта времени тут не поможет: в файле нет ни звука, ни следа паузы. Поэтому длительность протокола мы сверяем и с файлом, и с длительностью встречи в Zoom. Если цифры расходятся, в шапку протокола ложится строка «запись короче встречи на N минут». Читатель знает, что часть разговора в запись не попала, и не ищет её в тексте. Если запись разбита на несколько файлов, у каждого из них тоже нужно своё смещение.
четыре проверки на тестовой записи
Ошибку с таймкодами не видно на коротких тестах. Поэтому у нас есть отдельная запись с длинным молчанием посередине, и на ней проверяем:
- ✓длительность протокола равна длительности записи в Zoom;
- ✓две-три ссылки на минуту из протокола открывают запись перед нужной репликой;
- ✓в интервалах пауз нет текста, а паузы длиннее порога записаны строкой;
- ✓решение, прозвучавшее после паузы, стоит в протоколе на своей минуте, а не на минуте склеенного файла.
Провал любой проверки останавливает рассылку.
🛠 как поставить такой ассистент у вас
Ассистент собирается на вашем железе: запись, распознавание и сводка остаются внутри компании. Мы ставим и настраиваем контур, подбираем порог паузы под ваши созвоны и проверяем протоколы на записях с длинным молчанием, прежде чем отдавать вам. У нас протокол не уходит адресатам, пока длительность не сошлась с записью.
Поручения из протокола можно отправлять в 1С: доработка 1С добавит обработчик, который создаёт задачи по строкам протокола. Если системы, куда записывать поручения, у вас пока нет, начните с внедрения 1С: протокол без места, где живут задачи, остаётся текстовым файлом.
Работа сисадмина по установке и настройке считается по ставке 3800 руб/час. Число часов зависит от вашего железа и от того, куда должны попадать поручения, поэтому называем его после короткого разбора схемы. Разбор удобно начинать с одной вашей записи с длинной паузой: на ней сразу видно, что происходит с таймкодами.
❓ Частые вопросы
Почему в протоколе встречи есть фразы, которых никто не говорил?
Так ведут себя модели семейства Whisper на участках без речи: они достраивают текст из ничего, например «Продолжение следует». Лечится тем, что тишину убирают до распознавания. Но вырезанные паузы нужно вернуть в таймкоды через карту времени, иначе ссылки на запись съедут на длину паузы.
Как проверить, что таймкоды в протоколе не съехали?
Сравните длительность протокола с длительностью записи в Zoom: цифры должны совпасть. Затем откройте две-три ссылки на минуты из протокола и убедитесь, что запись начинается перед нужной репликой. Проверяйте на записи с длинным молчанием посередине: на коротких паузах сдвиг в секунды и не виден.
Нужно ли записывать в протокол паузы созвона?
Длинные нужно: от двух минут, порог настраивается. Строка «0:41–1:11, пауза 30 минут, речи нет» объясняет, почему решение после неё звучит без контекста, и удерживает длительность протокола равной длительности встречи. Секундные паузы между репликами в протокол не попадают: это дыхание, а не событие.
Можно ли держать ассистент для созвонов на своём сервере, чтобы запись не уходила наружу?
Можно. Запись, распознавание и сводка работают на сервере компании, во внешний сервис ничего не отправляется. Это упрощает вопрос с персональными данными по 152-ФЗ: в записи есть голоса и имена сотрудников. Установку и настройку считаем по ставке сисадмина, 3800 руб/час. Число часов зависит от вашего железа.
Можно ли отправлять поручения из протокола в 1С?
Да, для этого нужна доработка 1С: обработчик читает строки протокола с поручениями и создаёт по ним задачи. Исполнитель видит поручение там же, где работает с остальными задачами, и не ищет его в письмах. Объём работ зависит от конфигурации и нужных полей, поэтому часы называют после разбора вашей базы.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

