Использование Yandex API Gateway для настройки синтеза речи в Yandex SpeechKit
С помощью serverless-технологий можно создать собственную интеграцию с сервисами Yandex Cloud.
Пользовательская интеграция, создаваемая в данном руководстве, представляет собой API-шлюз, сконфигурированный по стандарту OpenAPI 3.0
Запросы на синтез речи от пользователей поступают в API-шлюз, который с помощью HTTP-интеграции вызывает API SpeechKit и получает от SpeechKit синтезированную речь.
Чтобы настроить синтез речи SpeechKit с помощью API-шлюза Yandex API Gateway:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки создаваемой инфраструктуры входит:
- плата за количество запросов к API-шлюзу и исходящий трафик (см. тарифы Yandex API Gateway);
- плата за использование SpeechKit (см. тарифы SpeechKit).
Создайте сервисный аккаунт
Создайте сервисный аккаунт speechkit-sa
с ролью ai.speechkit-tts.user
на каталог, в котором вы создаете инфраструктуру:
- В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. - Перейдите на вкладку Сервисные аккаунты.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта:
speechkit-sa
. - Нажмите
Добавить роль и выберите рольai.speechkit-tts.user
. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Создайте сервисный аккаунт
speechkit-sa
:yc iam service-account create speechkit-sa
Результат:
id: nfersamh4sjq******** folder_id: b1gc1t4cb638******** created_at: "2023-09-21T10:36:29.726397755Z" name: speechkit-sa
Сохраните идентификатор сервисного аккаунта
speechkit-sa
(id
) и каталога, в котором его создали (folder_id
).Подробнее о команде
yc iam service-account create
читайте в справочнике CLI. -
Назначьте сервисному аккаунту роль
ai.speechkit-tts.user
на каталог, указав сохраненные ранее идентификаторы каталога и сервисного аккаунта:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role ai.speechkit-tts.user \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Подробнее о команде
yc resource-manager folder add-access-binding
читайте в справочнике CLI.
Чтобы создать сервисный аккаунт, воспользуйтесь методом create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роль ai.speechkit-tts.user
на каталог, воспользуйтесь методом setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
Создайте API-шлюз
-
В консоли управления
выберите каталог, в котором необходимо создать API-шлюз. -
В списке сервисов выберите API Gateway.
-
Нажмите кнопку Создать API-шлюз.
-
В поле Имя введите
speechkit-api-gw
. -
В блок Спецификация добавьте следующую спецификацию, указав идентификатор сервисного аккаунта
speechkit-sa
в параметреservice_account_id
:openapi: 3.0.0 info: title: Sample API version: 1.0.0 paths: /synthesis: post: requestBody: description: "/synthesis" content: application/json: schema: type: object x-yc-schema-mapping: type: static template: text: "${.text}" hints: - voice: "lera" - role: "friendly" - audioTemplate: audio: audioSpec: containerAudio: containerAudioType: "MP3" responses: 200: description: "/synthesis" content: application/json: schema: type: object x-yc-schema-mapping: type: static template: data: "${.result.audioChunk.data}" x-yc-apigateway-integration: http_method: post type: http url: https://tts.api.cloud.yandex.net/tts/v3/utteranceSynthesis service_account_id: "<идентификатор_сервисного_аккаунта>"
-
Нажмите кнопку Создать.
-
Подождите, пока статус созданного API-шлюза изменится на
running
, и нажмите на строку с именем API-шлюза. -
В открывшемся окне скопируйте значение поля Служебный домен. Оно понадобится для проверки работы API-шлюза.
-
Сохраните следующую спецификацию в файл
speechkit-gw.yaml
, указав идентификатор сервисного аккаунтаspeechkit-sa
в параметреservice_account_id
:openapi: 3.0.0 info: title: Sample API version: 1.0.0 paths: /synthesis: post: requestBody: description: "/synthesis" content: application/json: schema: type: object x-yc-schema-mapping: type: static template: text: "${.text}" hints: - voice: "lera" - role: "friendly" - audioTemplate: audio: audioSpec: containerAudio: containerAudioType: "MP3" responses: 200: description: "/synthesis" content: application/json: schema: type: object x-yc-schema-mapping: type: static template: data: "${.result.audioChunk.data}" x-yc-apigateway-integration: http_method: post type: http url: https://tts.api.cloud.yandex.net/tts/v3/utteranceSynthesis service_account_id: "<идентификатор_сервисного_аккаунта>"
-
Выполните команду:
yc serverless api-gateway create \ --name speechkit-api-gw \ --spec=speechkit-gw.yaml
Где:
--name
— имя API-шлюза.--spec
— путь к файлу со спецификацией.
Результат:
done (2s) id: d5ddbmungf72******** folder_id: b1gt6g8ht345******** created_at: "2024-08-19T18:58:32.101Z" name: speechkit-api-gw status: ACTIVE domain: d5ddbmungf72********.apigw.yandexcloud.net connectivity: {} log_options: folder_id: b1gt6g8ht345******** execution_timeout: 300s
Сохраните служебный домен созданного API-шлюза (значение поля domain
). Он понадобится для проверки работы API-шлюза.
Подробнее о команде yc serverless api-gateway create
читайте в справочнике CLI.
Чтобы создать API-шлюз, воспользуйтесь методом REST API create для ресурса ApiGateway или вызовом gRPC API ApiGatewayService/Create.
Проверьте результат
Отправьте запрос к API-шлюзу, указав сохраненное ранее значение служебного домена:
curl --verbose \
https://<служебный_домен>/synthesis \
--data '{"text": "Привет! В С+ерверлесс Апи Гейтв+эй появилась новая функция - трансформация Аш Ти Ти Пи тела запроса или ответа!"}' \
| jq -r '.data' | while read chunk; do base64 -d <<< "$chunk" >> audio.mp3; done
В результате выполнения команды синтезированная речь будет сохранена в файл audio.mp3
в текущей директории. Прослушать созданный файл можно в браузере, например в Яндекс Браузере
Подробнее о формате передаваемого в параметре -d
текста см. в документации Yandex SpeechKit.
Как удалить созданные ресурсы
Если созданные ресурсы вам больше не нужны: