Amazon Polly получила крупное обновление генеративного движка. AWS заявляет более выразительную и точную речь при сохранении низкой задержки, и обновление уже доступно в общем доступе в production, без превью-флагов и отдельных заявок. Детали AWS описала в анонсе в блоге Machine Learning.
Вместе с движком добавили 14 новых голосов в 9 локалях. Генеративные голоса на хинди и финском впервые стали общедоступны: Arjun и Kiara для хинди, Suvi для финского. Для разработчика важнее другое: это drop-in замена. Имена голосов и вызовы API не меняются, поэтому существующие приложения продолжают работать без правок кода.
Ниже: что конкретно улучшилось в синтезе, как вызвать новый голос через Boto3 и AWS CLI, в каких сценариях обновление даёт выигрыш и какие ограничения стоит проверить заранее.
Что именно улучшил новый генеративный движок
В анонсе три заявленных улучшения: выразительность с просодией по тексту, точность на сложных для синтеза данных и низкая задержка. Каждое проверяется на конкретных примерах из демо AWS, которые приводятся в том же материале.
Выразительность и просодия без ручной настройки
Движок сам выбирает интонацию по тексту, ручная разметка SSML для базовой выразительности больше не обязательна. В демо голос Tiffany приветствует фразой: «Hi there! I'm Tiffany, one of Polly's generative voices. I was built to sound natural, expressive, and a little bit delightful. What should we talk about?». Звучит как приглашение к разговору, а не как чтение строки из файла.
Второй пример нагляднее. Одну фразу «Your package arrived early» движок озвучивает в трёх манерах: нейтрально («Your package arrived early.»), с неуверенностью («So, um… your package arrived early. I think?») и с удивлением («Wait, what? Your package arrived early?»). Сигнал для смены подачи — сам текст, включая разговорные маркеры вроде «um» и «I think?». Отдельный параметр эмоции в API для этого не нужен.
Точность на числах, валютах, адресах и кодах
Самое болезненное место любого TTS в продакшене — цифры. Голос Kenneth зачитывает подтверждение заказа целиком: «Thanks for calling. Your order, number 4471 9902 ships today to 85 Harbor View Drive, Apartment 4B, Portland, Oregon 97209. It should arrive on Thursday, October 22nd, between 9 AM and 1 PM. Your total was $1,284.50 and your confirmation code is K-7-Q-2-X-9.»
Корректно читаются трек-номер, дата и интервал доставки, сумма с центами и посимвольный код подтверждения. В контакт-центре ошибка в одной цифре кода означает повторный звонок, потерянные минуты оператора и раздражённого клиента.
Низкая задержка: почему это важно для продакшена
Заявлена низкая задержка, конкретных миллисекунд AWS не приводит. Для голосовых агентов на LLM это узкое место: пока синтез думает, пользователь слышит тишину и решает, что связь оборвалась. Как такие задержки измеряют и где они обычно прячутся, разбираем в материале про путь голосового AI-сервиса от демо до продакшена.
Для потоковой выдачи звука по мере генерации у Polly есть StartSpeechSynthesisStream, о нём в разделе с кодом.
14 новых голосов и 9 локалей: что добавилось
Новых голосов 14, локалей 9. Полный перечень в тексте анонса не раскрыт, там перечислены только ключевые новинки и примеры, поэтому актуальный список смотрите в консоли Polly или в документации AWS. Ниже подтверждённое в анонсе.
Хинди: Arjun и Kiara
Хинди впервые стал общедоступен в генеративном движке. Два голоса, Arjun и Kiara. Примеры из демо: Arjun — «नमस्कार, आप सुन रहे हैं आज की मुख्य ख़बरें...», Kiara — «नमस्ते! मेरा नाम कियारा है...». Arjun читает в новостной манере, Kiara представляется от первого лица. Обе фразы легко представить в IVR индийского контакт-центра, в озвучке курсов или в новостном боте.
Финский: Suvi
Финский в генеративном движке появился впервые, и Suvi — единственный подтверждённый генеративный голос для него. Демо-фраза: «Majakanvartija ei ollut nähnyt laivaa yhteentoista päivään...». Финский нужен не только продуктовым командам в Финляндии: это часть североевропейских локалей в e-learning, госуслугах и внутренних корпоративных базах знаний.
Как ориентироваться в каталоге 57 голосов
По данным анонса, каталог вырос до 57 генеративных голосов в 11 языках и 25 локалях. Цифры стоит сверить с консолью перед планированием: список голосов там фильтруется по языку и движку, а документация AWS даёт таблицу доступности по регионам. Практический порядок действий: отфильтровать по движку generative и нужной локали, затем прослушать два-три кандидата на своих реальных текстах, а не на демо-фразах.
Как включить новые голоса: Boto3 и AWS CLI
Включать отдельно нечего: новые голоса доступны сразу, как только SDK о них знает. Достаточно передать VoiceId и Engine='generative'.
SynthesizeSpeech на Boto3: пошаговый пример
Минимальный скрипт на Python вызывает SynthesizeSpeech и пишет mp3 в файл:
import boto3
polly = boto3.client("polly", region_name="us-east-1")
response = polly.synthesize_speech(
Text="Your order 4471 9902 ships today. Your total was $1,284.50.",
VoiceId="Kenneth",
Engine="generative",
OutputFormat="mp3",
)
with open("speech.mp3", "wb") as f:
f.write(response["AudioStream"].read())
Engine задаёт движок, VoiceId — голос. Для хинди подставьте Arjun или Kiara, для финского Suvi, для выразительного английского Tiffany. Роли нужен IAM-разрешение polly:SynthesizeSpeech. Регион проверьте заранее: набор генеративных голосов привязан к региону, таблица доступности лежит в документации AWS.
AWS CLI: одна команда для проверки голоса
CLI возвращает JSON, где аудио лежит в base64-поле AudioStream, поэтому звук удобно декодировать сразу в файл:
aws polly synthesize-speech \
--engine generative \
--voice-id Suvi \
--output-format mp3 \
--text "Majakanvartija ei ollut nähnyt laivaa yhteentoista päivään." \
--query AudioStream --output text | base64 --decode > suvi.mp3
На macOS у base64 флаг -D вместо --decode. Для хинди замените --voice-id на Arjun или Kiara и подставьте текст на деванагари, для проверки английской точности на цифрах — на Kenneth и фразу с заказом.
Потоковый вывод через StartSpeechSynthesisStream
SynthesizeSpeech возвращает аудио целиком, StartSpeechSynthesisStream отдаёт его чанками по мере генерации. Это сокращает время до первого звука: агент начинает говорить, пока синтезируется остаток ответа. Сигнатуру, лимиты и поддерживаемые SDK смотрите в документации AWS, они отличаются по версиям.
Схема для голосового агента простая: LLM выдаёт токены, потоковый синтез сразу превращает их в звук, и задержка TTS перестаёт быть главным слагаемым в цепочке. Остальные барьеры таких агентов, включая промахи ASR и скорость reasoning, разобраны в статье про то, почему голосовой AI ещё не пережил свой момент ChatGPT.
Drop-in замена: что это значит для существующего продакшена
Имена голосов и вызовы API не меняются. Если сервис уже вызывает Polly с генеративным голосом, после обновления он получает новое качество без изменений в коде и конфигурации: AWS называет это drop-in upgrade.
Миграции нет, но регрессионные тесты нужны. Звук меняется, и меняется в сторону большей вариативности интонации, поэтому критичные сценарии стоит переслушать:
- обновить AWS SDK до актуальной версии, чтобы новые голоса появились в списке VoiceId;
- прогнать ключевые фразы: суммы, адреса, коды подтверждения, длинные названия компаний;
- сравнить аудио до и после на своих текстах, а не на демо-примерах;
- проверить длительность: другая просодия даёт другую длину файла, а от неё зависят тайминги и кэш.
Для каких сценариев обновление даёт реальный выигрыш
Контакт-центры и голосовые боты
Точность на числах, валютах, адресах и кодах подтверждения — прямой аргумент для телефонии. Kenneth читает заказ вместе с трек-номером, датой доставки, суммой и кодом без переспросов. Добавьте низкую задержку и потоковый вывод, и получится IVR, который не заставляет абонента ждать на каждом шаге.
Голосовые агенты на LLM и дубляж
Агенту нужна просодия, которая следует за смыслом ответа: LLM выдаёт текст непредсказуемой формы, а движок сам расставляет интонацию без ручной разметки. Для дубляжа ценна выразительность голосов уровня Tiffany, но там же вылезает ограничение по таймингам, о нём в разделе про speech marks.
E-learning и доступность
В обучении просодия по тексту снимает часть ручной SSML-разметки: длинные модули читаются ровнее, списки и примеры не сливаются в монотонную ленту. Для доступности критична предсказуемость на числах и адресах: цены, индексы и номера квартир должны звучать так, как их произносит человек, иначе смысл теряется на слух.
Цена, регионы и доступность
Цена не выросла, новых SKU не появилось: обновление движка не добавляет строку в счёт, генеративные голоса тарифицируются по прежней схеме. Конкретные ставки смотрите на странице цен Polly, они различаются по движку и объёму символов.
Доступность расширилась: регион AWS GovCloud (US-West) добавил поддержку, всего генеративные голоса заявлены в 11 регионах AWS. Полный перечень AWS держит в таблице доступности по сервисам. Для проектов с требованием к GovCloud это может стать решающим аргументом. Остальным важнее проверить, что нужный голос есть в их регионе: список голосов привязан к региону, и в неподдерживаемом регионе вызов вернёт ошибку.
Ограничения, о которых стоит знать заранее
Нет speech marks: что это ломает и как обойти
Speech marks — метаданные о времени и позиции фрагментов. С их помощью субтитры подстраиваются под речь, слова подсвечиваются в караоке-режиме, губы аватара синхронизируются со звуком. У генеративных голосов speech marks нет.
Что это значит на практике:
- субтитры и подсветку слов придётся считать отдельно, например по длительности сегментов и расставленным паузам;
- липсинк аватара проще строить на стандартных или нейронных голосах, где тайминги отдаёт сам сервис;
- точная синхронизация дубляжа с оригинальной дорожкой требует собственной разметки.
Обходной путь без магии: разделить продукт на два тракта. Там, где нужны тайминги, оставить движок со speech marks. Там, где важен живой звук, взять генеративный голос. Поддержку SSML и speech marks для конкретного голоса проверяйте в документации Polly: набор возможностей отличается по движкам, а обещать, что ограничение снимут в ближайшем релизе, никто не может.
Стоит ли переходить: практический вывод
Переходить сейчас, если:
- нужна выразительность без ручной SSML-разметки;
- критична точность на числах, валютах, адресах и кодах подтверждения;
- нужны генеративные голоса на хинди или финском;
- сервис уже на Polly и хочется улучшения без работ по миграции.
Можно подождать, если:
- критичны speech marks: дубляж, липсинк, подсветка слов;
- нужен язык вне 11 поддерживаемых;
- ваш регион пока не в списке доступных.
Альтернативы есть в обе стороны: другие TTS-сервисы AWS и сторонние провайдеры, которые отдают тайминги и умеют клонирование голоса. Сравнивать их по качеству без замеров на собственных текстах смысла мало: метрики из общих бенчмарков плохо переносятся на конкретный контент с артикулами, адресами и кодами.
Обновление Polly — редкий для продакшена случай, когда качество выросло, а цена и вызовы API остались прежними. Главный риск лежит не в технике, а в сценариях, где нужны тайминги. Их стоит проверить до того, как вы отключите старый тракт синтеза.