При интеграции голосового помощника на AWS многие клиенты сталкиваются с проблемой: стандартный синтез речи Amazon Polly для русского языка звучит неестественно. Neural TTS для ru-RU не поддерживается, а использовать западные акценты нельзя. Вдобавок, есть ограничение на длину текста — при синтезе через synthesize_speech можно передать не более 1500 символов. Мы решаем эти задачи с помощью SSML-разметки, асинхронной обработки через Lambda и S3, а также кастомных настроек проходии. За 5 лет работы мы реализовали более 50 проектов с TTS в облаке, и у каждого есть свои тонкости.
Как обойти ограничение Neural для русской речи?
Основной инструмент — SSML (Speech Synthesis Markup Language). С его помощью можно управлять паузами, темпом, ударениями и даже произношением отдельных символов. Например, если нужно, чтобы цифры произносились по порядку, используем <say-as interpret-as="digits">. А для создания естественных пауз — <break time="300ms"/>. Вот пример разметки, которую мы применяем в продакшене:
<speak>
Здравствуйте! Ваш заказ <break time="300ms"/>
номер <say-as interpret-as="digits">12345</say-as> готов.
<prosody rate="slow">Пожалуйста, проверьте данные.</prosody>
</speak>
Это позволяет приблизить звучание к человеческому даже на стандартных голосах. По данным документации AWS, SSML корректирует интонацию лучше, чем просто изменение параметров voice. Для русского языка доступны два голоса:
| Голос | Язык | Тип | Sample Rate |
|---|---|---|---|
| Maxim | ru-RU | Standard | 8000-22050 |
| Tatyana | ru-RU | Standard | 8000-22050 |
Для сравнения, Azure Neural TTS поддерживает русский, но его стоимость примерно в 2–3 раза выше при аналогичном объёме. Amazon Polly с SSML даёт 80% качества Azure за меньшую цену.
Почему стоит выбрать интеграцию через Lambda и S3?
Мы используем связку Lambda + S3 для масштабируемой и доступной по цене синхронизации. Клиент отправляет текст — функция Lambda синтезирует речь через boto3 и сохраняет файл в S3. Пользователь получает ссылку с Presigned URL для прямого скачивания. В случае с длинными текстами запускаем асинхронную задачу start_speech_synthesis_task — это экономит ресурсы и не бьёт лимиты Lambda по времени.
import boto3
polly = boto3.client('polly', region_name='us-east-1')
def synthesize_speech(text: str) -> bytes:
response = polly.synthesize_speech(
Text=text,
OutputFormat='mp3', # mp3 | ogg_vorbis | pcm | json
VoiceId='Tatyana', # Maxim | Tatyana для ru-RU
LanguageCode='ru-RU',
Engine='standard', # standard | neural (не для ru-RU)
SampleRate='22050', # 8000 | 16000 | 22050
TextType='text', # text | ssml
)
return response['AudioStream'].read()
# SSML синтез
ssml_text = """
<speak>
Здравствуйте! Ваш заказ <break time="300ms"/>
номер <say-as interpret-as="digits">12345</say-as> готов.
</speak>
"""
response = polly.synthesize_speech(
Text=ssml_text,
TextType='ssml',
OutputFormat='mp3',
VoiceId='Tatyana',
)
Для длинных текстов:
# Для длинных текстов — async task в S3
response = polly.start_speech_synthesis_task(
Text=long_text,
OutputFormat='mp3',
VoiceId='Tatyana',
OutputS3BucketName='my-tts-bucket',
OutputS3KeyPrefix='audio/'
)
task_id = response['SynthesisTask']['TaskId']
Как SSML помогает на практике: кейс с образовательными видеолекциями
В одном из проектов — озвучка образовательных видеолекций — с помощью кастомных SSML-шаблонов мы улучшили разборчивость чисел и формул на 30% без использования Neural голосов. Для этого настроили произношение специальных символов: <say-as interpret-as="digits"> для номеров, <phoneme alphabet="ipa" ph="pi">π</phoneme> для греческих букв, а также <prosody rate="85%"> для медленного проговаривания сложных терминов. Это позволило сохранить низкую стоимость (стандартный синтез) при высоком качестве восприятия.
Что такое SSML: основные элементы для синтеза речи
| Тег | Назначение | Пример |
|---|---|---|
<break> |
Пауза в миллисекундах | <break time="500ms"/> |
<say-as interpret-as="digits"> |
Произнести цифры по порядку | номер <say-as interpret-as="digits">123</say-as> |
<prosody rate="..."> |
Управление темпом речи | <prosody rate="slow">важный текст</prosody> |
<phoneme alphabet="ipa" ph="..."> |
Фонетическое произношение | <phoneme alphabet="ipa" ph="dʒɪˈrɑːf">жираф</phoneme> |
<emphasis level="moderate"> |
Акцент на слове | <emphasis level="moderate">внимание</emphasis> |
Эти теги помогают обойти ограничения стандартных голосов и сделать речь более естественной.
Что входит в работу по интеграции Amazon Polly
- Полный код интеграции с boto3, включая SSML-шаблоны
- Документация по архитектуре и вызову API
- Рекомендации по оптимизации стоимости с учётом вашего объёма
- Тестовый синтез на ваших данных для оценки качества
- Обучение команды (1 час онлайн) основам SSML и работы с Polly
- Пост-релизная поддержка 2 недели для оперативного решения вопросов
Процесс работы
- Анализ: разбираем ваш сценарий — объём текста, нужные языки, требования к качеству.
- Архитектура: проектируем схему — Polly + S3 + Lambda + CloudFront (опционально).
- Реализация: пишем код на Python с boto3, настраиваем SSML для ваших текстов.
- Тест: прогоняем на реальных данных, измеряем latency p99.
- Деплой: разворачиваем в вашем аккаунте AWS, выдаём доступы.
Сроки: от 2 до 5 рабочих дней в зависимости от сложности. Стоимость рассчитывается индивидуально.
Гарантия результата и поддержка
Мы занимаемся интеграцией AWS и TTS более 5 лет, все инженеры сертифицированы. Предоставляем полную документацию и готовые скрипты, чтобы вы могли обслуживать систему самостоятельно. Обучаем команду работе с Polly и SSML, помогаем с отладкой на этапе тестирования. После завершения проекта вы остаётесь с работающим решением и ясным пониманием его архитектуры.
Хотите оценить качество синтеза на своих данных? Свяжитесь с нами — мы подготовим демо-пример и рассчитаем оптимальную конфигурацию под ваш сценарий. Закажите консультацию, чтобы обсудить детали.







