Яндекс SpeechKit: распознавание и синтез речи для разработчиков

Интеграция Яндекс SpeechKit чаще всего ломается на этапе авторизации: запрос к API возвращает ошибку 401 или 403, хотя ключ создан в консоли недавно. Возможная причина — использование API-ключа вместо IAM-токена в gRPC-вызовах либо ключ, привязанный к сервисному аккаунту без роли ai.speechkit.user. Проверить это можно за пару минут, и дальше в статье разберём не только авторизацию, но и весь цикл работы с сервисом.

Яндекс SpeechKit — облачный набор технологий распознавания речи (speech-to-text) и её синтеза (text-to-speech), доступный через API в составе платформы Yandex Cloud. Сервис используется в голосовых помощниках, колл-центрах, системах транскрибации звонков и встреч, а также в приложениях для озвучивания текстов. Ниже — подробный разбор возможностей, способов подключения и типичных проблем.

Что умеет SpeechKit

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

Отдельно стоит выделить функции, которые часто остаются незамеченными при первом знакомстве:

  • 🎙️ Потоковое распознавание — текст появляется по мере речи, что критично для голосовых интерфейсов;
  • 📞 Разделение каналов — распознавание двусторонних телефонных разговоров по отдельным дорожкам;
  • 🏷️ Нормализация текста — числа и сокращения преобразуются в читаемый вид;
  • 🗣️ Несколько голосов синтеза — разные тембры и эмоциональные оттенки.

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

Как устроено подключение

Для работы с SpeechKit потребуется аккаунт в Yandex Cloud, созданный платёжный аккаунт и каталог, в котором разворачивается сервис. Дальше создаётся сервисный аккаунт — именно от его имени приложение будет обращаться к API.

Существует два способа авторизации, и путаница между ними — самая частая причина ошибок:

  • 🔑 API-ключ — простой статический ключ, удобен для REST-запросов и тестов;
  • 🪪 IAM-токен — временный токен с ограниченным сроком жизни, требуется для ряда сценариев, в том числе при работе через gRPC.

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

Распознавание речи: режимы и ограничения

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

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

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

📊 Для какой задачи вы используете (или планируете) SpeechKit?
Распознавание звонков и встреч
Голосовой интерфейс в приложении
Озвучка текстов синтезом
Только изучаю возможности

Синтез речи: голоса и настройки

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

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

Тарификация и контроль расходов

Оплата SpeechKit построена по модели pay-as-you-go: списываются средства за фактически обработанный объём. Точные цены и наличие бесплатных лимитов меняются, поэтому актуальные значения нужно смотреть на странице тарифов Yandex Cloud — приводить конкретные цифры здесь было бы недостоверно.

ОперацияЕдиница тарификацииЧто влияет на расход
Распознавание коротких аудиоДлительность аудиоКоличество и длина запросов
Асинхронное распознаваниеДлительность аудиоОбъём архива записей
Потоковое распознаваниеДлительность сессииВремя открытого соединения
Синтез речиКоличество символовОбъём озвучиваемого текста

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

Типичные ошибки при интеграции

Большинство проблем при работе с SpeechKit относится к авторизации, формату данных или сетевым ограничениям. Разберём основные сценарии.

Ошибки 401/403. Проверьте тип ключа, срок действия IAM-токена и наличие нужной роли у сервисного аккаунта. Также убедитесь, что запрос направлен в правильный каталог — ключ от одного окружения не сработает в другом.

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

Обрывы потокового распознавания. Долгие паузы в аудиопотоке могут приводить к закрытию соединения по тайм-ауту. Обрабатывайте разрывы в коде и реализуйте переподключение с повторной отправкой недоставленного фрагмента.

⚠️ Внимание: не храните API-ключи в клиентском коде мобильных приложений и публичных репозиториях. Скомпрометированный ключ позволяет тратить средства с вашего платёжного аккаунта. При утечке ключ следует немедленно перевыпустить в консоли.

☑️ Проверка перед обращением в поддержку

Выполнено: 0 / 5

Отладка запросов

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

curl -X POST \

-H "Authorization: Api-Key <ваш_ключ>" \

-d "text=Привет&lang=ru-RU" \

"https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize" \

--output result.ogg

Если минимальный запрос работает, а приложение — нет, проблема в коде интеграции: проверяйте заголовки, кодировку тела запроса и обработку ответа. Каждый ответ API содержит идентификатор запроса — сохраняйте его в логах, он существенно ускоряет диагностику при обращении в поддержку.

Что такое gRPC и стоит ли его использовать

gRPC — бинарный протокол обмена, который SpeechKit применяет для потокового распознавания. Он эффективнее REST по задержкам, но требует генерации клиентского кода из protobuf-описаний. Для простых задач с короткими файлами достаточно REST; gRPC оправдан при потоковой обработке и высоких нагрузках.

Для нагрузочного тестирования заранее оцените квоты каталога: при превышении лимитов API начнёт возвращать ошибки ограничения частоты запросов. Увеличение квот запрашивается через поддержку, и на это может потребоваться время — планируйте пиковые нагрузки заранее.

Альтернативы и когда SpeechKit не подходит

SpeechKit оптимален для проектов, уже работающих в инфраструктуре Yandex Cloud, и для задач с русскоязычной речью. Однако в ряде случаев стоит рассмотреть альтернативы: если требуется офлайн-распознавание без отправки аудио в облако, если критична работа вне юрисдикции российских дата-центров или если нужны редкие языки, которые сервис не поддерживает.

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

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

Частые вопросы

Можно ли попробовать SpeechKit бесплатно?

В Yandex Cloud для новых пользователей обычно доступен стартовый грант, которым можно оплатить вызовы API. Условия и размер гранта периодически меняются — проверяйте актуальную информацию в консоли платформы.

Какой формат аудио лучше использовать для распознавания?

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

Почему распознавание возвращает текст без пунктуации?

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

Чем API-ключ отличается от IAM-токена?

API-ключ — статический и не имеет срока действия, что удобно, но менее безопасно. IAM-токен выпускается на ограниченное время и требует периодического обновления, зато снижает риски при утечке. Для части вызовов, в том числе gRPC, требуется именно IAM-токен.

Подходит ли SpeechKit для распознавания в реальном времени в мобильном приложении?

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