product update13 мин чтения

Пять этапов, четыре артефакта: что Telli.sh на самом деле делает с записью встречи

Подробный разбор всего конвейера Telli.sh: живая запись или загрузка аудио, ИИ-транскрибация встреч с определением говорящих, перевод встреч в реальном времени на 44 целевых языка, ИИ-резюме в 10 форматах и заметка, которой можно поделиться. С честными ограничениями, точными ценами и разбором того, чего на самом деле требует точность транскрибации.

K
Ken Jo
#product-update#ai-meeting-transcription#meeting-transcription-accuracy#speaker-identification#real-time-meeting-translation#multilingual-meeting-notes#meeting-minutes-automation#ai-meeting-notes

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

Это сырьё. Этот текст — о том, что наша система с ним делает, этап за этапом: от момента, когда аудио начинает течь, до момента, когда вы вставляете ссылку в канал.

Сразу оговоримся, чтобы не пришлось догадываться: это продуктовый текст о Telli.sh, написанный командой, которая его строит. Мы публикуем такие тексты периодически, наряду с исследовательскими. Здесь мы постарались описать механику достаточно точно, чтобы скептически настроенный читатель мог проверить утверждения — настоящие названия моделей, настоящие цифры, настоящие ограничения вместо привычного тумана из слов «на базе ИИ».

Коротко:

  • Запись проходит пять этапов обработки и оставляет четыре отдельно сохранённых артефакта: сырую расшифровку, карту говорящих, очищенный сценарий и по одному резюме на каждый применённый формат.
  • Определение говорящих работает на pyannote/speaker-diarization-community-1 — по фрагментам, с переносом голосовых эмбеддингов вперёд, чтобы один и тот же человек сохранял одну и ту же метку с пятой минуты по пятидесятую.
  • Перевод принимает 44 языковых кода; сам интерфейс существует на 15 языках; резюме доступны в 10 встроенных форматах плюс любые пользовательские, задаваемые названием, инструкцией и списком разделов.
  • Бесплатный тариф — 60 минут в месяц без карты. Платные стоят 5, 8 и 10 долларов в месяц за 300, 500 и 1000 минут.

Восемь коллег стоят вокруг ноутбуков и проводят ежедневную планёрку в формате стендапа

Изображение: Klean Denmark, «Daily sprint meeting», Wikimedia Commons, CC BY-SA 2.0. Ровно та разновидность встреч, ради которой весь этот конвейер и существует.

Аудио входит двумя путями, и это не одно и то же

Точек входа ровно две, и различие между ними определяет всё, что происходит дальше.

Первая — живая запись. Браузер открывает AudioContext с жёстко заданной частотой дискретизации 16 000 Гц, загружает AudioWorklet и буферизует вход микрофона блоками по 4096 отсчётов: на 16 кГц это один пакет каждые 256 миллисекунд. Каждый блок переводится из 32-битного float в 16-битный целочисленный PCM и уходит по WebSocket на /ws/audio/{sessionId}. Второй сокет, /ws/session/{id}, несёт канал управления: смену языка, обновление контекста, команду SUMMARIZE и команду FINISH, которая закрывает сессию и записывает заметку.

Вторая — загрузка файла. Вы кладёте запись в окно загрузки, она уходит потоком в POST /upload, а ответ приходит построчным JSON — потоком, а не крутящимся индикатором, — чтобы интерфейс показывал реальный прогресс по названным шагам, а не выдуманный процент. Жёсткие ограничения стоит назвать честно: 500 МБ на файл, и селектор принимает только audio/*. Если встреча заперта внутри MP4-записи экрана, аудиодорожку придётся извлечь заранее. Сегодня мы этого за вас не делаем.

Оба пути сходятся в один ствол обработки. С первого этапа живая запись и загруженный файл обрабатываются одинаково.

Схема конвейера Telli.sh: живая запись и загрузка файла сходятся в распознавание речи, разделение говорящих, перевод и очистку, затем резюмирование, и каждый этап оставляет артефакт

Каждый этап сохраняет собственный вывод. Следующий этап ничего не перезаписывает.

Этапы 1 и 2: услышать слова, а потом выяснить, чьи они

Первым работает распознавание речи. В продакшене и пакетный, и потоковый путь используют модель Deepgram nova-3-general; в кодовой базе есть также полностью локальный путь на faster-whisper для self-hosted развёртываний, включаемый одной настройкой провайдера. Этот выбор значит меньше, чем принято думать, и причину мы разбирали подробно: лучшие речевые модели в независимых рейтингах сегодня укладываются примерно в 1,5 процентных пункта по частоте словесных ошибок. Движок больше не то место, где живёт разница в качестве.

Она живёт в определении говорящих.

Диаризация работает на pyannote/speaker-diarization-community-1. Деталь реализации, которая действительно важна, — как система обходится с длинными записями. Вместо того чтобы диаризовать файл целиком за один проход, конвейер обрабатывает аудио фрагментами и назначает говорящих сразу после каждого фрагмента, но при этом ведёт накопительный словарь голосовых эмбеддингов по каждому говорящему и переопределяет их относительно этого накопленного набора на каждом следующем фрагменте. Именно этот механизм не даёт случиться классическому сбою, когда в двухчасовой записи один и тот же человек тихо превращается из SPEAKER_00 в SPEAKER_03, а потом в SPEAKER_07.

Если сегмент перекрывает две реплики, метка достаётся той, с которой перекрытие больше, а при малом перекрытии решающим становится сходство эмбеддингов.

Метки приходят обобщёнными — SPEAKER_00, SPEAKER_01 — потому что модель не может знать, что SPEAKER_01 — это ваш директор по инженерии. Вы переименовываете их один раз в заметке, сопоставление сохраняется вместе с ней и затем применяется везде, включая экспорт и ссылки для доступа. Вот честное разделение труда: машина разделяет голоса, имена даёте вы.

Что на самом деле остаётся после каждого этапа

Правило проектирования, которого мы держимся: ни один этап не уничтожает вывод предыдущего. Вы всегда должны иметь возможность вернуться к тому, что было сказано на самом деле.

АртефактКем создаётсяЧто содержитДля чего нужен
Сырая расшифровкаЭтапы 1 + 2Дословные строки с отметками времени и меткой говорящего в каждойПроверить, что было сказано буквально; кликнуть по строке и перейти к аудио
Карта говорящихЭтап 2 (+ ваши правки)Соответствие меток именам в этой заметкеДелает читаемыми все остальные представления — работает в заметке, экспорте и по ссылке
Очищенный сценарийЭтап 4Каждый блок переписан в жирную строку темы плюс до 3 пунктовПросмотреть длинную встречу, не читая её
Переведённые строкиЭтап 3Перевод рядом с каждой исходной строкойПрочитать встречу, которая шла на неродном для вас рабочем языке
РезюмеЭтап 5По одному структурированному документу на каждый применённый форматТо, что вы действительно отправляете людям

В интерфейсе заметки это выглядит как три вида вкладок: История (сырая расшифровка), Сценарий (очищенная версия) и по вкладке на каждый сгенерированный формат резюме. Если аудио записи сохранено, сверху появляется плеер, и клик по любой строке расшифровки перематывает аудио на эту отметку времени.

Этап 3: в переводе значимое число — 44

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

Здесь работают два разных числа, и это не одно и то же число:

  • Для перевода принимаются 44 кода целевых языков. Это множество явно перечислено в конфигурации бэкенда и включает zh-TW отдельно от zh — что важнее, чем кажется, если вы работаете и с Тайванем, и с материковым Китаем.
  • 15 языков поддерживаются для самого интерфейса и для языка, на котором ИИ пишет ваше резюме: английский, корейский, японский, китайский, немецкий, французский, испанский, итальянский, португальский, русский, польский, вьетнамский, тайский, индонезийский и малайский.

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

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

Этап 4: этап, которого никто не просит и который нужен всем

Здесь описание переходит в мнение, и смягчать его мы не будем: очистка — самый недооценённый этап этого конвейера.

Дословная расшифровка человеческой речи почти нечитаема. Люди начинают фразу заново, обрывают её, четыре раза говорят «да-да, точно» и хоронят одно решение внутри девяноста секунд покашливания. Пословно точная расшифровка этого — всё те же девяносто секунд покашливания.

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

Одно ограничение в этом шаблоне заслуживает отдельного упоминания: модели предписано попадать в регистр услышанного и, в частности, не натягивать деловой тон совещания на непринуждённый разговор. Разговор в коридоре, отсуммированный как протокол совета директоров, — артефакт хуже, чем отсутствие резюме.

Результат мы называем сценарием: версия, которую можно прочесть одним взглядом, в одной вкладке от версии, которую можно цитировать в споре.

Этап 5: десять форматов резюме, потому что «резюме» — не одна вещь

Последний этап производит документ, который вы действительно отправляете. Попросить у LLM «резюме» — значит получить резюме ни о чём конкретном, поэтому формат здесь полноценный выбор, а не скрытое значение по умолчанию.

Встроенных форматов десять: ИИ-резюме (общее), Протокол встречи, Сводный отчёт, Конспект лекции, Проповедь / Выступление, Запись консультации, Итог звонка, Интервью, Заметки по идеям и Черновик презентации. У каждого своя структура разделов: протокол даёт обзор, обсуждаемые вопросы, решения и следующие шаги; черновик презентации даёт план, порядок слайдов, ключевые сообщения, заметки докладчика и следующие действия. Сами заголовки разделов локализованы по языкам, а не переводятся в момент генерации, — поэтому резюме на японском читается как японский документ, а не как переведённый английский.

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

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

Точность транскрибации — это стек, а не число

Если вы сравниваете инструменты этой категории, спорить стоит именно с этим разделом.

Индустрия публикует одно число — частоту словесных ошибок, — и это число перестало помогать выбирать между продуктами, потому что все сгрудились у пола. Мы разобрали этот аргумент подробно в тексте Точности STT недостаточно, включая случай, когда единственная потерянная частица «не» переворачивает решение, стоив при этом 0,016% бюджета точности.

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

Многослойная схема из пяти уровней точности: акустическая модель в основании, а выше — атрибуция говорящих, предоставленный контекст, очистка и человеческая проверка, при этом частота ошибок измеряет только основание

Частота словесных ошибок измеряет слой 1. Пригодность расшифровки решают слои со 2-го по 5-й.

Слой 3 — тот, которым пользователь управляет напрямую и который большинство пропускает. Перед записью или загрузкой можно задать блок контекста до 500 символов — тему, имена участников, коды продуктов, аббревиатуры — и приложить до 3 справочных файлов (PDF, изображение или текст), текст которых извлекается в браузере и сворачивается в тот же лимит. Этот контекст передаётся на этапы с ИИ.

Это не украшение. Имена собственные — одновременно самые информативные и самые редкие слова любой встречи: внутренние названия проектов, необычные фамилии, артикулы продуктов. Сказать системе заранее, что «Kestrel» — продукт, а «Рави» — человек, стоит пятнадцати секунд и снимает ошибки, которые иначе вы будете править руками десять минут. Если после этого текста вы измените ровно одну вещь — заполняйте поле контекста.

От нуля до заметки, которой можно поделиться, за одиннадцать шагов

Конкретно, от первого запуска до артефакта, которым можно поделиться:

  1. Зарегистрируйтесь. Бесплатный тариф — 60 минут в месяц без банковской карты, и он гоняет тот же самый конвейер, что и платные: это разница в квоте, а не в возможностях.
  2. Выберите путь: начните живую запись или откройте окно загрузки и положите туда аудиофайл (audio/*, меньше 500 МБ).
  3. Задайте языковую пару. Источник можно оставить на автоопределении; целевой язык решает, на каком языке выйдут перевод и резюме.
  4. Заполните поле контекста — тема, имена, аббревиатуры, до 500 символов. Приложите до 3 справочных файлов, если есть презентация или повестка.
  5. Выберите папку, если заметку нужно положить в конкретное место. Переместить можно и потом.
  6. Записывайте или дождитесь потока загрузки. В живой сессии расшифровка появляется по мере того, как люди говорят, а перевод втекает рядом, если задан целевой язык. Во время загрузки вы увидите названные шаги: распознавание речи, анализ, очистка, резюме, завершение.
  7. Завершите сессию. Это запускает управляющее сообщение FINISH, которое сбрасывает последний фрагмент, дожидается незавершённой очистки, сохраняет аудио, генерирует резюме и записывает заметку.
  8. Переименуйте говорящих. SPEAKER_00 один раз становится именем, и сопоставление расходится по всем представлениям и всем экспортам.
  9. Прочитайте вкладку Сценарий, чтобы понять, о чём была встреча; спуститесь в Историю и кликните по строке, чтобы услышать аудио ровно в этот момент, если что-то выглядит неверно.
  10. Сгенерируйте дополнительные форматы резюме, если одной аудитории нужен протокол, а другой — сводный отчёт.
  11. Поделитесь или экспортируйте. Ссылка доступна только для чтения, истекает через 7 дней и может нести необязательный пароль. Экспорт даёт Markdown или JSON — с резюме, очищенными блоками и полной расшифровкой в одном файле.

Загрузить запись, которая у вас уже есть

Сколько это стоит, в точных цифрах

Квота считается в минутах обработанного аудио, и только это разделяет тарифы.

ТарифМинут в месяцВ месяцВ годФактическая цена за 100 мин
Бесплатный60USD 0
Plus300USD 5,00USD 51,00USD 1,67
Pro500USD 8,00USD 81,60USD 1,60
Pro+1000USD 10,00USD 102,00USD 1,00

Столбчатая диаграмма, сравнивающая месячные минуты записи на тарифах Free, Plus, Pro и Pro Plus с указанием цен

Годовая оплата — это месячная × 12 × 0,85. С ростом тарифа цена минуты улучшается; конвейер остаётся тем же.

Шестьдесят бесплатных минут — это одна длинная встреча или три стендапа. Этого достаточно, чтобы ответить на единственный важный вопрос: получается ли заметка, которую вы действительно отправите? На вашем аудио, а не на демо вендора.

Записать следующую встречу вживую

Чего Telli.sh не делает

Продуктовый текст, который перечисляет только возможности, — это реклама. Вот вторая колонка.

Не принимает видеофайлы. Загрузчик принимает audio/*. Сначала извлеките аудиодорожку.

Не подключается к вашим звонкам. Нет бота, который набирает Zoom, Meet или Teams и сидит в списке участников. Вы записываете комнату, или звук со своего устройства, или загружаете файл после.

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

Не знает вашей лексики, пока вы её не назовёте. См. слой 3 выше. Необычные имена собственные — самый частый источник ошибок, а поле контекста — средство от них.

Метки говорящих начинаются обобщёнными. Ни одна система не угадает, что SPEAKER_01 — это Прия. Переименовать нужно один раз на заметку.

Ссылки для доступа ограничены по времени. Семь дней, потом ссылка умирает. Это осознанное значение по умолчанию для содержимого встреч, а не забытая функция — но означает и то, что такая ссылка не архив. Если нужна долговечность, экспортируйте Markdown.

Итог

Ранняя ошибка, которую мы допустили, — считать это продуктом для транскрибации. Это не так. Транскрибация — первый этап из пяти, и он ближе всего к тому, чтобы считаться решённым.

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

Если прямо сейчас у вас на компьютере лежит запись встречи, это единственный бенчмарк, который стоит запускать. У нас настройка заняла шестьдесят секунд и дала заметку, которую мы отправили четырём людям.

Начать живую сессию с переводом

Источники


Вернуться в блог