Руководство
Интерфейс синтеза речи
Параметры запроса синтеза речи, бинарный ответ и типичные вопросы
Интерфейс синтеза речи
Платформа предоставляет интерфейс синтеза речи, совместимый с AI Platform. Доступность зависит от группы текущих API keys и каталога моделей:
сначала убедитесь через GET /v1/models, что доступна аудиомодель, и только затем вызывайте этот интерфейс.
Запрос
| Параметр | Значение |
|---|---|
| Метод | POST |
| Путь | /v1/audio/speech |
| Аутентификация | Authorization: Bearer <API_KEY> |
| Заголовки запроса | Content-Type: application/json |
| Ответ | бинарный аудиофайл (не JSON) |
Возвращается бинарный аудиофайл, а не JSON — поэтому с помощью --output (или -o)
сразу запишите ответ в файл. При попытке разобрать его как JSON вы получите пустое тело ответа.
Доступные значения voice зависят от текущей модели; не все модели принимают alloy.
Запрос
curl -X POST "$LOCOPAL_BASE_URL/v1/audio/speech" \
-H "Authorization: Bearer $LOCOPAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "从 /v1/models 选择的音频模型 ID",
"input": "欢迎使用 LocoPal Ai。",
"voice": "alloy",
"response_format": "mp3"
}' \
--output speech.mp3Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
model | string | Обязательно. data[].id аудиомодели, возвращённый GET /v1/models. |
input | string | Обязательно. Текст для синтеза. Максимальная длина определяется фактической моделью. |
voice | string | Название тембра. Доступные тембры зависят от текущей модели; ориентируйтесь на описание модели. |
response_format | string | Формат выходного аудио, например mp3. Поддерживаемые форматы определяются фактической моделью. |
speed | number | Скорость речи. Поддержка и диапазон значений определяются фактической моделью. |
Доступные диапазоны тембров, форматов и скорости речи различаются в зависимости от модели. Не предполагайте, что все модели поддерживают
alloyилиmp3, и не зашивайте список тембров конкретной модели в код.
Ответ
Успех
В успешном ответе тело содержит бинарные аудиоданные, а не JSON. Просто запишите их в файл или передайте клиенту потоком.
# 保存为文件
curl ... --output speech.mp3
# 检查确实是音频而不是 JSON
file speech.mp3Ошибка
При ошибке возвращается ответ с кодом не 2xx и объектом error, структура совпадает с интерфейсами моделей:
{
"error": {
"code": "invalid_parameter",
"message": "..."
}
}Типичные причины ошибок:
| Ситуация | Проявление | Действие |
|---|---|---|
| В группе нет аудиомодели | model_not_found или модель недоступна | Убедитесь через GET /v1/models, что доступна аудиомодель |
| Тембр не поддерживается этой моделью | invalid_parameter | Используйте тембр, поддерживаемый этой моделью |
| Формат не поддерживается этой моделью | invalid_parameter | Используйте поддерживаемый response_format |
| Слишком частые запросы | HTTP 429 | Повторите с задержкой согласно подсказке |
Рекомендации по серверной интеграции
Синтез речи — синхронный интерфейс, ответом сразу являются аудиоданные; при интеграции учитывайте:
- Не разбирайте ответ как JSON. Сначала проверьте HTTP-статус и
Content-Type, и только при ошибке читайтеerrorкак JSON; - Не забывайте задавать
Content-Typeпри прямой передаче аудио в браузер, иначе браузер обработает его как текст; - Контролируйте длину
input. Слишком длинный текст рекомендуется разбивать на стороне бизнес-логики, синтезировать по частям и затем склеивать, чтобы избежать превышения лимита одного запроса; - Аудиофайлы рекомендуется переносить в собственное хранилище и не полагаться долго на временные результаты, возвращаемые платформой;
- Бизнес-бэкенд должен кэшировать часто повторяющиеся результаты синтеза, чтобы избежать повторного списания средств.
Асинхронные аудиозадачи
Помимо этого синхронного интерфейса платформа также предоставляет асинхронную генерацию аудио (например, музыку и звуковые эффекты). Статус и артефакты таких задач запрашиваются в разделе «Журнал задач» консоли; принцип работы аналогичен видеозадачам: после создания сохраните ID задачи и опрашивайте интерфейс запроса до конечного состояния, не создавайте задачу повторно.
Тарификация
Способ тарификации аудиоинтерфейса определяется описанием модели в каталоге моделей: возможна оплата за Token, за вызов или за длительность. Правила тарификации и расчётов см. в разделе Тарификация и счета.
