Внутри четырех конвейеров перевода, которые обеспечивают работу InterMIND
Внутри четырех конвейеров перевода, которые обеспечивают работу InterMIND
Старая страница /product/overview/how-it-works на mind.com устарела на несколько крупных релизов. Она описывает единый «движок перевода» так, как это делают большинство страниц поставщиков — одна большая стрелка от «вы говорите» к «они слышат». Эта картина была упрощением уже два года назад. Сегодня она неверна.
На самом деле InterMIND использует четыре отдельных конвейера перевода, каждый из которых решает свою проблему с помощью отдельного движка, отдельного бюджета задержки и отдельного уровня качества. У них общий выбор языка. Но у них не общий движок.
Это обновленный ответ на вопрос «как это работает».
Сопутствующий материал: «Сколько языков вы поддерживаете?» охватывает то, что каждый конвейер охватывает (24 / 21 / 30 / 6). Этот пост рассказывает, что каждый конвейер делает — и почему он является отдельным механизмом.
Почему «один движок для всего» — ложь
Платформа для онлайн-встреч должна выполнять как минимум четыре задачи одновременно, и они тянут в несовместимых направлениях:
- Голосовой перевод в реальном времени — звук на входе, переведенный звук на выходе, менее одной секунды, каждый зритель на своем языке. Жесткое ограничение — задержка.
- Текст чата в реальном времени — короткие сообщения, быстро, с сохранением правок, цитат и HTML-структуры.
- Общие заметки в реальном времени — совместный набор текста по символам, со структурной иерархией (списки, заголовки, чекбоксы), которая должна сохраняться при переводе.
- Асинхронные файлы документов — 40-страничный PDF, добавленный в чат. Нет бюджета задержки. Жесткое ограничение — точность — форматирование, таблицы, номера страниц, шрифт.
Можно создать один гигантский вызов LLM, который попытается выполнить все четыре задачи. Мы пробовали. Он плохо справляется со всеми четырьмя. Бюджет задержки для голоса означает, что модель не может думать; бюджет точности для документов означает, что модель должна. Правка чата требует диффа на языке зрителя; 40-страничный PDF требует сохранения формата, что не может обеспечить ни одна модель потоковой передачи токенов.
Поэтому мы используем четыре. Вот каждый из них.
Конвейер 1: Голосовой перевод в реальном времени
Проблема: Участник говорит по-французски. Другой участник присоединился на немецком, третий на бразильском португальском, четвертый на японском. Каждый должен слышать говорящего на своем языке, в своем ухе, с задержкой, достаточно короткой, чтобы поддерживать зрительный контакт.
Бюджет: Менее секунды от начала до конца. Что-либо дольше ~1,2 секунды, и разговор прерывается — люди начинают говорить поверх перевода, и встреча смещается к «давайте просто переключимся на английский».
Как на самом деле перемещается аудио
Несколько моментов, которые стоит отметить:
- ASR работает в браузере говорящего, а не на центральном сервере. Мы используем Mind SDK локально; это экономит время на передачу данных и предоставляет нам расшифровку исходного языка с минимально возможной задержкой до начала перевода.
- Перевод не является единым вещанием. Мы поддерживаем пул соединений WebSocket к нашему движку перевода, по одному на каждый целевой язык, присутствующий в комнате. Если три участника выбрали немецкий, немецкий использует одно соединение. Если никто не выбрал арабский, соединение с арабским не открывается. Пул отключает неактивные соединения через пять минут. Вот почему встреча на четырех языках стоит столько же, сколько встреча на сорока языках, вплоть до того, кто фактически присутствовал — мы никогда не переводим на языки, которые никто из участников не слушает.
- Синтезированная речь индивидуальна для каждого зрителя. Каждый участник получает свою собственную переведенную звуковую дорожку, смешанную с видео оригинального говорящего. Они не смотрят мастер-версию «переведенной встречи» — они смотрят ту же самую встречу, с их личным аудиоканалом, переведенным на выбранный ими язык. Вот почему два человека в одной физической комнате могут подключить наушники и слышать разные языки.
Почему это важно, когда встреча идет не по плану
Во время 40-минутного звонка на восьми языках все может ломаться интересными способами: отключаются WebSocket-соединения, ASR временно неправильно транскрибирует имя собственное, сеть одного участника начинает работать с перебоями. Архитектура выше позволяет нам изолировать сбои: сбой аудио у одного зрителя не влияет на остальных семерых, потому что движок перевода изначально никогда не производил «единственный перевод» — он производил восемь, параллельно, и только пострадавший должен восстановиться.
Сам движок наш, размещен на нашей собственной инфраструктуре. Мы не направляем голосовой перевод в реальном времени через сторонние LLM общего назначения. Бюджет задержки исключает их; требования к хранению данных исключают их для регулируемых клиентов, которым это действительно важно.
Что мы публикуем о качестве голоса: /benchmark ежемесячно запускает производственный голосовой конвейер на предложениях FLORES-200 для каждой опубликованной языковой пары. Указан судья (основной Gemini 2.5 Flash, резервный Claude Sonnet 4). Полное распределение — медиана, p10, p90, мин, макс, размер выборки — находится на странице. См. методологию, чтобы узнать, что эти числа измеряют, а что нет.
Конвейер 2: Перевод чата в реальном времени
Проблема: Каждое сообщение чата на встрече, переведенное для каждого участника на его собственный язык, по мере отправки. Плюс правки — и правки должны выглядеть как правки, а не как повторный перевод.
Бюджет: Быстро, но не менее секунды. Сообщение чата может появиться на другом языке за полсекунды, и это никого не будет волновать. Что волнует людей, так это правильность перевода и осмысленность правок.
Что на самом деле делает конвейер чата
Каждое сообщение проходит через тот же движок перевода, который использует голосовой конвейер — но с разной предварительной и последующей обработкой:
- HTML-структура сохраняется. Чат поддерживает форматированный текст (абзацы, списки, цитаты, полужирный шрифт, курсив). Мы преобразуем его в обычный текст для модели, переводим, затем снова оборачиваем результат в исходные теги. Модель никогда не видит HTML — она видит чистую прозу.
- Цитаты переводятся независимо. Если вы отвечаете на сообщение и цитируете его, блок
[QUOTE]…[/QUOTE]и новое содержимое переводятся как отдельные единицы, чтобы модель не могла их перепутать. - Длинные сообщения разбиваются на части. Мы разделяем по границам абзацев по 1000 символов на часть. Каждая часть является отдельным вызовом перевода. Мы не подаем модели романы длиной в 4000 символов за один раз — режимы отказа (усечение, потерянные абзацы, обрывы предложений) слишком неприглядны.
- Перевод «ленивый». Мы используем IntersectionObserver: сообщение переводится только тогда, когда оно прокручивается в область видимости зрителя. Переключение языков в долгосрочном канале раньше приводило к повторному воспроизведению каждого вызова API перевода из истории. Теперь это не так.
Интересная часть: правки как различия
В версии 1.2 мы изменили поведение правок чата для зрителей на другом языке. Старое поведение было таким: кто-то редактирует сообщение, мы повторно переводим все сообщение, вы видите новый абзац и должны сами определить, что изменилось.
Новое поведение:
- Исходное сообщение уже было переведено на ваш язык.
- Когда отправитель вносит правки, мы повторно переводим новую версию.
- Мы вычисляем разницу между вашим предыдущим переводом и вашим новым переводом на вашем языке.
- Мы показываем эту разницу прямо в строке — так же, как Git показывает, что изменилось.
Поэтому, когда «review by Tuesday» (проверить к вторнику) превращается в «review by Thursday» (проверить к четвергу) на английском, ваш испаноязычный коллега видит выделенное martes → jueves, а не повторно переведенный абзац, который ему придется перечитывать.
Это потребовало обработки конвейера чата как сохраняющего состояние кэша для каждого зрителя, а не как безстатусной конечной точки «перевод по запросу». Документы и голосовой перевод этого не требуют. Чат требует.
Конвейер 3: Перевод общих заметок в реальном времени
Проблема: Ведущий открывает панель общих заметок и начинает печатать. Каждый участник видит заметки на своем языке, посимвольно, с сохранением структуры документа — заголовков, вложенных списков, чек-листов, блоков кода.
Бюджет: То же, что и у чата (~полсекунды), но с двумя дополнительными ограничениями:
- Переводимый объект меняется в процессе перевода. Ведущий все еще печатает. Наивная система, которая переводит «весь документ» при каждом нажатии клавиши, вызывает мерцание и расходует бюджет API. Мы переводим на уровне измененной единицы, а не всего документа.
- Структура должна сохраниться. Если вы попросите модель перевода перевести markdown-блок с тремя вложенными списками, вы получите нечто, что выглядит как оригинал, но с едва заметно выровненной иерархией, перенумерованными элементами или измененным отступом. Мы не позволяем модели видеть весь блок.
Чем конвейер заметок отличается от чата
Сохранение структуры — это главное. Мы переводим каждый элемент списка независимо, а не как единый документ. Модель видит:
"Проверка соответствия — результаты за Q2"
— не:
"# План проекта
Квартал
- Проверка соответствия — результаты за Q2
- Оценка поставщиков
- Поставщики первого уровня..."
Окружающий документ — <ul>, заголовки, отступы — перестраивается на стороне клиента с использованием той же структуры, что и у оригинального документа, при этом каждый конечный узел заменяется его переводом. Модель никогда не «улучшает» иерархию.
Заметки также используют ту же модель различий для каждого зрителя, что и правки чата: если ведущий изменяет строку, зрители на других языках видят выделенные измененные слова, а не новый абзац.
Конвейер 4: Асинхронный перевод документов
Проблема: Кто-то помещает 40-страничный PDF, документ Word, презентацию PowerPoint или таблицу Excel в чат. Каждый участник может запросить копию на своем языке. Переведенный файл должен выглядеть как оригинал — те же шрифты, те же таблицы, те же номера страниц, те же заголовки, те же диаграммы на своих местах.
Бюджет: Отсутствие ограничений по времени в реальном времени. Минута — нормально. Две минуты — нормально. Ограничение — это точность — если переведенный PDF не выглядит как оригинал, получатель ему не доверяет.
Почему этот конвейер не использует тот же движок, что и голосовой
Общая LLM, даже очень хорошая, вернет вам переведенный текст документа. Она не вернет вам переведенный PDF с тем же макетом. У модели нет понятия «разрыв страницы, который должен совпадать с оригиналом» или «ячейка таблицы, которая должна сохранять свою ширину столбца».
Для этого типа поверхностей мы напрямую используем DeepL Document API. Он специально разработан для перевода файлов как файлов, а не прозы, извлеченной из файлов. DeepL обрабатывает:
- PDF (с сохранением макета)
- DOCX, DOC
- PPTX
- XLSX
Документ загружается в конвейер DeepL, переводится на стороне сервера с сохранением форматирования и возвращается в том же формате. Затем мы загружаем результат в наше объектное хранилище и отображаем его в чате как загружаемое вложение.
Что это стоит и почему мы это не скрываем
DeepL выставляет счет за минимум 50 000 символов на документ — примерно один доллар США за файл на уровне Pro, независимо от того, одна страница в документе или тридцать. Мы берем на себя эту стоимость, а не взимаем плату за каждый файл; это отображается в использовании перевода на встрече как оплаченные символы, преобразованные в словесные единицы, соответствующие тому, как остальная часть продукта отчитывается о переводческой деятельности.
Мы выбрали DeepL для этого типа поверхностей, потому что это лучший в своем классе движок специально для перевода документов. Мы не претендуем на то, что создали лучший. Обратное неверно — DeepL не использует конвейер живого голосового перевода, подобный тому, который мы создали для встреч. Разные проблемы; разные инструменты. Честная версия «что лежит в основе перевода InterMIND» — это «правильный движок для каждого конвейера», а не «наш движок везде».
Языки, которые охватывает этот конвейер, но не голосовой
Конвейер документов поддерживает 30 языков против 21 для голоса. Дополнительные девять включают: болгарский, греческий, эстонский, индонезийский, литовский, латышский, норвежский букмол, словацкий, словенский — плюс арабский и турецкий, которые мы скрываем из средства выбора в реальном времени, потому что качество голоса не соответствует нашим требованиям, но DeepL хорошо справляется с ними как с документами.
Эта асимметрия реальна. Это означает, что французский участник встречи может запросить PDF-файл контракта на эстонском языке, даже если он не может слушать встречу на эстонском. Мы отмечаем это в средстве выбора, а не сглаживаем одним числом. Обоснование приведено в посте о количестве языков.
Где конвейеры встречаются
Четыре конвейера не работают изолированно. Конференц-зал — это место, где они соприкасаются, и эти «швы» имеют значение:
- Сообщение в чате с прикрепленным документом запускает конвейер чата для текста и конвейер документов для файла. Участник на другом языке видит сообщение переведенным немедленно, а перевод вложения поступает асинхронно в виде загружаемого файла.
- Общая заметка, цитирующая строку стенограммы, пересекает заметки ↔ голос. Стенограмма — это то, что голосовой конвейер произвел для языка отправителя; перевод заметки создает копию этой цитаты для каждого зрителя на его языке, с сохранением атрибуции источника.
- Стенограмма, экспортированная после встречи, запускает текстовый конвейер в стиле чата по всей беседе, создавая файл на каждом языке, который участники могут загрузить. Это тот же путь кода, что и перевод чата, просто в пакетном режиме.
Выбор языка — это один элемент пользовательского интерфейса. Инфраструктура под ним — это четыре конвейера, взаимодействующие друг с другом.
Что мы намеренно не пытаемся сделать
- Нет «единой модели перевода». Мы не создаем одну модель, которая выполняет голосовой перевод, чат, заметки и документы. Компромисс между задержкой и точностью не имеет победителя. Мы используем подходящий движок для каждой поверхности.
- Без бесшумной переадресации. Если сегодня голосовой перевод не может перевести на хинди, мы не переключаемся молча на движок документов и не делаем вид, что все сработало. Хинди скрыт из средства выбора на обеих поверхностях, потому что результат на любой из этих поверхностей сегодня непригоден для выпуска.
- Нет «мы переводим на 200 языков». Наш движок поддерживает 24. Наш продукт поддерживает 21 для живых поверхностей и 30 для документов. Большее число, приятное для маркетинга, — это просто потолок движка. Число продукта — это то, что фактически соответствует требованиям аудитора.
Попробуйте сами
/demo— запускает конвейер живого голосового перевода с использованием вашего аудио на любом из 21 языка продукта. Тот же конвейер, который оценивает/benchmark./benchmark— качество по парам, помесячно, на реальном трафике. Включает пары, которые мы намеренно скрываем из средства выбора, с возможностью глубокой ссылки./benchmark/methodology— что представляют собой эти числа, чем они не являются, и кто является судьей.
Четыре конвейера, четыре движка, одна конференц-комната. Это честная замена старой страницы how-it-works.
— Команда Mind.com
"Сколько языков вы поддерживаете?" — и почему наш честный ответ состоит из шести чисел, а не одного
Каждый поставщик называет одно количество языков. Мы не можем, потому что перевод — это не один продукт. Здесь представлен постраничный обзор для InterMIND — что отфильтровано, почему и что мы публикуем на сайте.
Переговорная комната, которая не переключается на английский
Шесть недель разработки превратили InterMIND из демонстрации перевода в многоязычное рабочее пространство. Голосовое общение, чат, общие заметки и история изменений для каждого пользователя — на 21 языке, с соответствующим журналом аудита. Бесплатно для всех до июня 2026 года.