Распознавание речи
Как передать аудиофайл в Transcriptions API, получить текст и проверить качество распознавания
Для преобразования записи в текст используйте POST /v1/audio/transcriptions. Запрос передаёт файл через multipart/form-data, ответ в формате json содержит поле text.
Распознавание речи (ASR) и синтез речи (TTS) решают разные задачи. Если нужен диалог с мультимодальной моделью, сначала проверьте её формат запросов в документации генерации текста: наличие аудиовхода в каталоге само по себе не означает поддержку Transcriptions API.
Выбор модели
Проверьте модели, доступные вашему API-ключу, через GET /v1/models, затем сверьте назначение и цену в каталоге. В примере используется whisper-1; это пример идентификатора, а не гарантия доступности для любого ключа и тарифа.
Перед интеграцией сравните модели на коротких записях вашего языка, с характерным шумом, терминологией и числом говорящих. Поддержка языка, временных меток или разделения говорящих зависит от модели; не переносите эти свойства автоматически между моделями.
Минимальный запрос
Сохраните тестовую запись в файл recording.wav. Ключ передавайте из переменной окружения, не включайте его в клиентский код или репозиторий.
export NEUROAPI_KEY='YOUR_API_KEY'
curl --fail-with-body https://neuroapi.host/v1/audio/transcriptions \
-H "Authorization: Bearer $NEUROAPI_KEY" \
-F 'model=whisper-1' \
-F 'file=@./recording.wav' \
-F 'response_format=json'Не задавайте Content-Type: application/json. При использовании -F curl самостоятельно формирует multipart/form-data и корректный boundary. file — содержимое локального файла, а не ссылка на него.
| Поле | Значение | Требование |
|---|---|---|
model | Точный ID модели для распознавания | Обязательное |
file | Загружаемый аудиофайл | Обязательное |
response_format | json в минимальном примере | При отсутствии используется json |
Необязательные поля и дополнительные форматы ответа проверяйте для выбранной модели. Наличие поля в общей OpenAI-спецификации не гарантирует его поддержку каждой моделью NeuroAPI.
Разбор ответа
Пример формы ответа для response_format=json:
{
"text": "Текст распознанной записи."
}Сохраняйте text как текст, а не HTML. Дополнительные поля могут зависеть от модели и выбранного формата; минимальная интеграция не должна требовать временные метки, длительность или сведения о говорящих, если их поддержка не подтверждена.
Файлы, длительность и стоимость
Допустимые кодеки, контейнеры, размер и длительность записи зависят от модели. Единого подтверждённого лимита для всех моделей нет; параметры в текстовом поле «контекст» нельзя считать лимитом аудиофайла. Уточните ограничения выбранной модели до отправки длинной записи.
Начните с небольшого корректного файла. Для длинных записей можно заранее подготовить части с сохранённым порядком и временными смещениями; оцените, как границы частей влияют на распознавание. Каждый отправленный фрагмент является отдельным API-запросом.
Сверяйте стоимость с единицей измерения в каталоге цен. Число слов в полученном тексте не является универсальной мерой стоимости распознавания.
Проверка результата и обработка ошибок
Для сравнения качества подготовьте несколько записей с вручную проверенной расшифровкой. Оцените пропуски, ошибки в именах и терминах, пунктуацию и обработку тишины; при расчёте WER или CER используйте одинаковые правила нормализации для обеих моделей. Измеряйте время ответа на одинаковых файлах и отделяйте его от времени загрузки.
Если запрос отклонён, проверьте ключ, ID модели, наличие файла и его формат; затем разберите код ошибки. При таймауте или обрыве соединения обработка могла уже начаться. Не запускайте автоматическую повторную отправку аудиофайла: сначала проверьте историю запросов и расход в кабинете. Повторная отправка может создать дополнительную оплачиваемую операцию.