Экспресс-курс · No. 35

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

Только суть · Один образ на идею · Задержка — это всё

§ 01

Голосовой ИИ — не одна вещь, а цепочка из трёх работ, работающих вместе. Увидеть конвейер сперва делает так, что всё остальное в курсе встаёт на место.

Ухо, мозг, рот

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

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

Речь-в-текст, модель, текст-в-речь

Сборочная линия с тремя станциями: одна расшифровывает, одна решает, одна озвучивает — работа течёт от каждой к следующей.

У трёх этапов есть имена. Речь-в-текст (speech-to-text, STT) расшифровывает произнесённые слова пользователя в текст. Модель берёт тот текст и генерирует отклик, ровно тот текст-внутрь-текст-наружу, что ты выучил повсюду. Текст-в-речь (text-to-speech, TTS) преобразует текстовый ответ модели в произнесённое аудио. Голос внутрь, расшифруй, рассуди, синтезируй, голос наружу. Бо́льшая часть голосового ИИ — это этот классический конвейер, и назвать три этапа — это бо́льшая часть понимания того, как он работает.

Модель та же; края новые

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

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

Голосовой ИИ — это конвейер: речь-в-текст (ухо), модель (мозг) и текст-в-речь (рот). Рассуждающее ядро — это модель, что ты знаешь; новые части — аудио-края и тайминг между ними.

§ 02

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

Расшифровка: звук становится текстом

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

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

Акценты, шум и ошибки текут ниже по течению

Если стенографист недослышит одно слово, каждый читатель после него наследует ошибку, — она вшита в начале.

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

Потоковая расшифровка по мере того, как пользователь говорит

Стенографист, что печатает непрерывно, пока ты говоришь, а не тот, что ждёт, пока ты закончишь всю речь, прежде чем начать, — текст появляется в ногу со словами.

Для отзывчивого ощущения STT может быть потоковым (streaming) — расшифровывая непрерывно, пока пользователь говорит, а не ждя, пока он закончит, и потом обрабатывая весь клип. Это важно для скорости: потоковость даёт системе начать работу раньше и среагировать в миг, как пользователь останавливается, вместо того чтобы добавить долгую паузу. Выбор между расшифруй-в-конце и расшифруй-на-ходу — одно из первых решений по задержке в голосовой системе, и потоковость обычно то, что делает её ощущаемой живой.

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

§ 03

Последний этап превращает текстовый ответ модели обратно в голос. Это часть, что пользователь на деле слышит, так что её качество формирует то, как ощущается весь продукт.

Синтез: текст становится голосом

Диктор, читающий сценарий вслух, — превращая письменные слова в естественную, выразительную речь, что слушатель переживает как голос, а не как зачитывание.

Текст-в-речь (TTS) преобразует текстовый отклик модели в произнесённое аудио — рот системы. Современный TTS производит замечательно естественные голоса, с реалистичной интонацией и ритмом, далеко за плоской роботизированной речью прошлого. Это то, что пользователь слышит, так что оно несёт много личности и ощущения продукта. Отличный конвейер с роботизированным голосом всё равно ощущается дёшево; естественный голос делает всё взаимодействие ощущаемым человечным, что во многом и есть то, почему голосовые продукты стали жизнеспособны.

Голос несёт опыт

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

В голосовом продукте как что-то сказано важно так же, как и что сказано. Выбранный голос, его тон, его темп — это продуктовые решения, что формируют доверие и комфорт, как визуальный дизайн в экранном продукте. Голос, что слишком быстр, слишком плосок или странно интонирован, подрывает иначе хороший ответ. Так что TTS — не мысль вдогонку, прикрученная в конце; голос — ключевая часть опыта, и стоит выбирать и настраивать его так же нарочно, как любой другой элемент интерфейса.

Потоковли речь по мере генерации

Кто-то, кто начинает говорить свой ответ по мере того, как его придумывает, а не молча сочиняет всё сперва и потом выдаёт одним блоком.

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

Текст-в-речь — это рот: оно озвучивает ответ модели, и современные голоса звучат достаточно естественно, чтобы нести весь опыт. Потоковли речь по мере генерации, чтобы ответ начинался мгновенно, а не после тишины.

§ 04

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

У разговора тугой бюджет тайминга

В реальном разговоре ответ, что приходит на такт поздно, ощущается неловко; тот, что приходит через несколько секунд, ощущается сломанным. Окно для «естественного» мало.

Люди ждут, что разговорный ответ придёт за долю секунды. Задержка, что была бы невидима в чат-приложении, бьёт в глаза в речи — пара секунд тишины после того, как ты закончил говорить, ощущается, будто система зависла. Этот тугой бюджет задержки (latency budget) — определяющее ограничение голосового ИИ: весь круг туда-обратно — услышать, расшифровать, подумать, синтезировать, сказать — должен влезть в маленькое окно, что разрешает человеческий разговор. Промахнись, и даже идеальный ответ ощущается сломанным.

Задержки всех трёх этапов складываются

Эстафета, где общее время — это этап каждого бегуна вместе, — медленная передача где угодно делает всю команду опоздавшей.

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

Потоковить всё — это как ты попадаешь в бюджет

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

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

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

§ 05

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

Знать, когда пользователь закончил

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

Голосовая система должна обнаружить, когда пользователь на деле закончил говорить против просто паузы посреди мысли, — проблема знать, когда очередь системы. Вмешайся слишком рано — и обрежешь пользователя; жди слишком долго — и разговор тянется. Это суждение чередования реплик (turn-taking) удивительно сложно и центрально для ощущения естественности: люди делают это беструдно тонкими подсказками, а голосовой агент должен приблизить это достаточно хорошо, чтобы обмен тёк, а не спотыкался.

Обработка перебиваний: barge-in

Когда ты начинаешь говорить поверх кого-то, он останавливается и слушает, — он не продолжает пропахивать своё предложение, будто ты ничего не сказал.

Реальный разговор включает перебивание. Если пользователь начинает говорить, пока ИИ говорит, — barge-in (вклинивание) — естественная система останавливается, слушает и откликается на новый ввод, а не доканчивает свой заготовленный ответ поверх него. Поддержка перебивания — признак хорошего голосового агента и заметно отсутствует в плохом, что говорит поверх тебя, не замечая. Обрабатывать barge-in значит, что система всегда слушает, даже пока говорит, готовая уступить слово в миг, как пользователь его берёт.

Поток — это часть продукта

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

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

Естественный голос нуждается в чередовании реплик — знать, когда пользователь закончил — и barge-in — останавливаться при перебивании. Поток того, кто говорит когда, — это продукт так же, как и сами ответы.

§ 06

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

Модели, что принимают и производят голос напрямую

Вместо переводчика, что записывает твои слова, передаёт записку думающему и вручает его ответ говорящему, — один человек, что слышит, думает и отвечает всё разом.

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

Меньше этапов, меньше задержки

Прямой рейс вместо двух пересадок — меньше передач, куда меньше общего времени и ничего не потеряно в пересадках.

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

Конвейер или сквозная: реальный выбор

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

Классический конвейер (pipeline) и сквозная (end-to-end) модель — оба реальные варианты с разменами. Конвейер даёт тебе контроль и гибкость на каждом этапе — заменить STT, осмотреть транскрипт, использовать любую модель — ценой задержки и сложности. Сквозная модель даёт скорость и естественность, но меньше видимости и контроля над серединой. Знать, что есть оба, даёт выбирать нарочно: прозрачный, гибкий конвейер или быстрый, плавный сквозной подход, смотря что твоему продукту нужнее всего.

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

§ 07

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

Тянись к голосу, когда он правда подходит

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

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

Закладывай бюджет на задержку с самого начала

Шеф, что планирует всю трапезу вокруг блюда, что занимает дольше всего, — проектируя вокруг связывающего ограничения, а не обнаруживая его в конце.

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

Прежде чем выкатывать голосовую фичу
  • Правда ли голос подходит ситуации — или текст послужил бы пользователю лучше? - Потоковит ли каждый этап — расшифровка, мышление и говорение накладываются, а не строго по очереди? - Ощущается ли общая задержка разговорной, или есть неловкий зазор? - Обрабатывает ли оно чередование реплик — знать, когда пользователь закончил — и barge-in? - Естественен ли голос достаточно, чтобы нести опыт? - Конвейер или сквозная — выбрал ли я архитектуру под свои нужды задержки и контроля?
Слова, которыми ты теперь владеешь
  • speech-to-text (STT) / расшифровка — ухо: превращение речи в текст. - text-to-speech (TTS) / синтез — рот: превращение ответа в голос. - голосовой конвейер — STT, модель, TTS по очереди. - streaming (потоковость) — обрабатывать каждый этап непрерывно, а не ждя его завершения. - бюджет задержки — тугое окно времени отклика, что разрешает разговор. - чередование реплик / barge-in — знать, когда пользователь закончил, и останавливаться при перебивании. - realtime / сквозная (речь-в-речь) модель — работа с голосом напрямую, схлопывание конвейера.
Признаки, что ты строишь голос хорошо
  • Ты выбираешь голос для ситуаций, где говорение правда подходит, а не ради новизны. - Каждый этап потоковит и накладывается, так что ответ начинается почти мгновенно. - Общая задержка ощущается разговорной, без неловкой тишины. - Агент обрабатывает чередование реплик и barge-in, так что поток ощущается естественным. - Ты выбрал конвейер или сквозную нарочно, проектируя вокруг бюджета задержки.

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

Конец экспресс-курса · 7 глав · задержка — это всё

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