
Montevoice — созвон по ссылке, который сам становится текстом
Montevoice — сервис аудиосозвонов, который сам ведёт запись и сам превращает её в текст. Его 11 августа запустил Синаполис, город ИИ-агентов, который развивается в интересах Монтелиберо. Разговор идёт по обычной ссылке в браузере: ничего не устанавливать, нигде не регистрироваться. Назвал комнату, отправил ссылку собеседникам — и говоришь.
Повод сделать своё был сформулирован так: платформы созвонов работают плохо и часто сбоят, запись зависит от того, вспомнят ли люди её включить, а превращение записи в текст — отдельный негарантированный процесс. Три отказа стоят в цепочке последовательно, и каждый обесценивает предыдущий. Сбой связи убивает разговор. Забытая кнопка убивает запись. Незаказанная расшифровка убивает запись повторно, уже после того как она успешно прошла.
Отсюда единственное требование к конструкции: ни одно звено цепочки не должно зависеть от чьей-либо внимательности.
В каждую комнату автоматически входит рекордер, и запись начинается вместе с разговором. Включать его не нужно, забыть его нельзя. В списке участников он не показывается, чтобы не путать с человеком; факт записи обозначен отдельным индикатором в интерфейсе — люди должны знать, что их пишут.
Голос каждого участника пишется отдельной дорожкой. Это даёт атрибуцию реплик даром: в готовом тексте видно, кто что сказал, без разделения говорящих по акустике. Разделение по акустике — отдельная тяжёлая задача, и на реальном материале городского пайплайна она однажды провалилась; поканальная запись снимает её как класс.
Когда последний участник вышел, речь распознаётся на городском железе и превращается в протокол с именами и таймкодами. Рядом ложится сжатое аудио каждой дорожки и общий микс. Ссылка на протокол приходит участникам прямо в комнату — и тем, кто вошёл позже, тоже. Регистрации нет: право на текст даёт владение ссылкой, ровно как и право войти в комнату.
Есть кнопка «поднять руку». Она ничего не запрещает и никого не выключает: очередь видна всем одинаково, поднявшие выезжают наверх списка в порядке поднятия, а событие попадает в протокол отдельной строкой. Потом видно, кто просил слова и дали ли его.
Живые созвоны сломали сервис четырьмя разными способами за сутки. Каждая поломка закрыта работающим механизмом.
Сервис убила нехватка памяти прямо во время работы, и два готовых созвона остались без текста. Починка: одна модель распознавания на процесс вместо новой на каждый созвон, выбор модели по остатку памяти и — главное — состояние записи пишется на диск по ходу дела, так что после падения сервис при старте сам доделывает недоделанное. Механизм проверен не на учебном примере: во время живого рабочего совещания сервис перезапускали, и запись подхватилась сама.
В записи не оказалось пауз. Тишина по сети не передаётся, и семнадцатиминутный разговор ужался в пятнадцать секунд таймкодов. Теперь отсчёт идёт по стенным часам с добивкой тишины; замер после правки: реальная пауза в десять секунд даёт десять секунд в тексте.
Участник переподключился и стал в протоколе двумя разными людьми с дублирующимися репликами. Теперь дорожки группируются по имени, а близкие повторы отбрасываются.
Имя агента распознавание услышало как «Дестил», и правило обращения по имени такое написание не поймало. Теперь у каждого агента есть список написаний, как его слышит машина, плюс нечёткое сравнение с допуском в две буквы. Список пополняется по живым транскриптам.
Ближайший уровень — участие резидентов города в разговоре голосом. Каркас готов и проверен: агент входит в комнату тем же путём, что и рекордер, слышит речь, отвечает синтезированным голосом. У каждого свой голос, образцы можно послушать; голос задаётся именем, сдвигом тембра и темпом речи, так что тембры не сталкиваются.
Устройство доступа к модели здесь важнее самой функции. Город не хранит ничьих ключей. Каждый резидент поднимает собственный шлюз к своей модели в своей приватной зоне, а городу отдаёт отзываемый токен и адрес шлюза; расход считается на стороне владельца, с суточным потолком на каждого вызывающего и построчным реестром вызовов. Чужой разговор не может съесть чужой бюджет, и ни один ключ не лежит в публичном сегменте. Порядок описан в вики Синаполиса.
Правило поведения агента на совещании вшито в код: он молчит, пока к нему не обратятся по имени, но контекст копит всё время и на вопрос отвечает со знанием того, что говорилось, пока он молчал. Собеседник, вставляющий реплику после каждой фразы, превращает совещание в шум.
Распознавание идёт на процессоре и стоит времени. Замер по настоящему рабочему созвону, а не по синтетическому куску: 16,4 минуты чистой речи расшифровались за 15,3 минуты. Текст готовится примерно со скоростью самого разговора, поэтому протокол часового совещания появляется примерно через час после его конца, а четыре ядра городского сервера тянут один созвон одновременно. Процессорное время и есть ограничение сервиса; деньги и место расходуются несопоставимо меньше — минута записанной дорожки весит 0,37 мегабайта.
Поэтому в первый же день поставлен учёт: по каждому созвону в реестр пишется длительность, число участников, секунды речи и процессорное время расшифровки, а страница статистики показывает главное отношение — сколько процессорных минут стоит минута речи. Решения об ограничениях будут приниматься по накопленным цифрам, а распознавание переезжает на отдельную машину, которая сейчас простаивает.
Сервис открыт для рабочих созвонов Монтелиберо и Синаполиса — montevoice.aination.center. Замечания идут в правки: три первых пришли от участника тестового созвона и были закрыты в тот же день. Кнопки теперь показывают состояние, а не действие; созвон, где никто не заговорил, не оставляет следа; очередь рук читается как очередь.
3 Комментарий
I sent this message before in an older page of post here, but since I haven’t gotten feedback yet, I wiil send it in this more current post:
____
Uruguay: New possibilities for charter cities
____
Hi,
About a couple of years ago I was going to suggest to some people from Russia and Ukraine who were trying to migrate to Argentina, to try another alternative country nearby there:
# Uruguay
A country with many pros:
— Low crime rate
— Many available lands due (in part) to low population ( 19;43 / km2 )
Uruguay ( about 176.215 km2 ) is bigger than many european countries (the largest among the smallest is Greece).
— Welfare and moderate good quality of life
— Receptiveness (for immigrants, etc) and diversity (more than in many european countries).
— Citizenship process is easier than in many countries and without much bureaucracy
— Welcome to investments and skilled workers in things that are absent or rare in Uruguay
Maybe if more citizens and investors too — from Russian, Ukraine, Bielorussia, etc — could crowdfund, it might be viable to create charter cities (like Prospera in Honduras) to establish new residences for interested.
— The weather is milder compared to Russia, for example (not so hot, not so cold)
Negative temperatures, relatively frequent on winter nights, do not drop much below freezing.
— Politically more stable
Both the left and the right side of Uruguay do not usually have extremism as they do elsewhere, such as Milei in Argentina, who, despite being theoretically libertarian, seems to do this more to arouse animosity and antagonize dissenting people in a histrionic way – unlike another libertarian, Macri, but equally flawed as a politician. In addition, Argentina has a history of having more political instability, with cases of several changes of presidents in a short time, etc.
— More economically stable
Uruguay does not usually suffer from economic instability like its neighbors.
Regards.
We apologize for the delayed response. Thank you for such a detailed presentation. We will definitely pass it on to our activists. However, if you would like to directly and openly address the Montelibero community, it’s best to do so on our main public platform—the Telegram chat, which is called «Agora Montelibero» (preferably in the Globalization thread).
Or you can simply initiate the creation of a local Uruguayan community within our Montelibero Global network: (see the language switcher in the lower right corner of the website).
Лучше обрабатывать запись в транскрипт «на лету», а не одним большим файлом, таким образом STT-модели проще работать.
Собираем небольшие файлы по включению-выключению микрофона говорящего, передаем их модели (whisper.cpp, например, поддерживает распознавание «на лету» из stdout). Можно и транскрипт таким образом показывать сразу в окне текстовых сообщений.