RU ▾
Получить API-ключ

Сервер Whisper API: варианты настройки и этап обработки текста

Сервер Whisper API — это HTTP-сервис, который принимает аудио и возвращает транскрипцию. Он работает только с речью, поэтому любые действия с текстом, которые вы хотите выполнить после транскрипции, требуют отдельной текстовой модели.

Обновлено

Изометрическая иллюстрация потока аудио от сервера к стопке очищенных текстовых строк

Ключевые моменты

  • Whisper — это модель преобразования речи в текст; сервер оборачивает её в HTTP-эндпоинт.
  • Вы можете арендовать хостинговый эндпоинт, развернуть обертку самостоятельно или запустить локальный бинарный файл.
  • Этот API работает только с текстом: он выполняет этап после транскрипции, а не этап обработки аудио.
  • Два этапа соединяются с помощью нескольких строк кода на Python с использованием SDK OpenAI дважды.

Краткий ответ

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

Большинство серверов копируют структуру эндпоинта транскрипции OpenAI, POST /v1/audio/transcriptions, который принимает multipart-загрузку с аудиофайлом и именем модели. Именно эта структура позволяет одной и той же библиотеке клиентов взаимодействовать с размещенным сервисом, контейнером на вашей машине или небольшой оберткой, написанной кем-то другим.

  • Входные данные: аудиофайл, обычно mp3, wav, m4a или аналогичный формат.
  • Вывод: обычный текст или JSON с сегментами и временными метками, в зависимости от сервера.
  • Не включено: краткое изложение, перевод в литературный стиль, извлечение пунктов действий. Для этого нужна языковая модель.

Три способа получить сервер Whisper

1. Хостинговый эндпоинт

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

2. Самостоятельно размещенная обертка

Несколько проектов с открытым исходным кодом оборачивают Whisper или его реимплементации в веб-сервер, имитирующий маршрут транскрипции OpenAI. Вы запускаете его в Docker на машине с GPU или на CPU, если готовы принять более медленную обработку. Это дает вам контроль над тем, куда уходит аудио. Это также возлагает на вас ответственность за загрузку моделей, обновления, очереди и перезапуски.

3. Локальный бинарный файл

Проект whisper.cpp — это порт модели на C и C++, и его репозиторий включает пример HTTP-сервера. Он работает на обычных ноутбуках и небольших серверах, что делает его хорошим выбором для прототипа или для одного пользователя, который транскрибирует несколько записей в день. Для пакетной обработки сотен часов обычно более практично использовать сервис с поддержкой GPU.

Выбирайте, исходя из трех вопросов: куда может перемещаться аудио, сколько часов вы обрабатываете в месяц и кто будет поддерживать работу сервиса. Этап обработки текста, описанный ниже, работает одинаково с любым из трех вариантов.

Где подходит текстовый API LLM после транскрипции

Сырая транскрипция Whisper — это стена текста. В ней мало разрывов абзацев, отсутствуют имена спикеров (если вы не добавите диаризацию отдельно), и слова-паразиты остаются. Whisper также допускает ошибки с названиями продуктов, жаргоном и именами собственными. Почти в каждом реальном проекте добавляется второй этап, работающий с текстом.

Типичные задачи второго этапа:

  • Исправить пунктуацию, разбить на абзацы, удалить оговорки.
  • Создать резюме звонка или лекции в виде нескольких пунктов.
  • Извлечь структурированные данные, такие как решения, имена и даты, в формате JSON.
  • Переписать устную речь в статью, сценарий или заметки к шоу.
  • Перевести или локализовать очищенный текст.

Именно здесь вписывается этот сервис. Это совместимый с OpenAI текстовый API с одной моделью, uncensored, контекстным окном на 100 000 токенов и потоковой передачей. Расшифровка двухчасового интервью часто помещается в один запрос, поэтому вы можете пропустить логику чанков, которую диктуют контекстные окна меньшего размера. Для более длинных материалов см. документацию по quickstart для деталей запроса.

Модель настроена на ответы без отказов по контенту для законного использования взрослыми. Это важно для пайплайнов транскрипции, потому что исходное аудио непредсказуемо: интервью, подкасты, чтение художественной литературы и звонки в службу поддержки содержат грубую лексику и сложные темы. Модель, которая отказывается очищать транскрипцию, потому что спикер выругался, тратит оплаченную транскрипцию впустую. Единственное строгое ограничение: не принимаются материалы, содержащие сексуальный контент с участием несовершеннолетних.

Рабочий двухэтапный пайплайн

Python SDK от OpenAI позволяет создать двух клиентов с разными базовыми URL. Один указывает на ваш сервер Whisper, другой — на этот API. Установите переменные окружения для вашей собственной службы транскрипции; второй клиент использует базовый URL этого сайта.

import os
from openai import OpenAI

# Stage 1: any Whisper-compatible transcription server you run or rent.
stt = OpenAI(base_url=os.environ["STT_BASE_URL"], api_key=os.environ["STT_KEY"])

# Stage 2: the text model.
llm = OpenAI(base_url="https://api.whisperapis.com/v1", api_key=os.environ["LLM_KEY"])

with open("call.mp3", "rb") as f:
    transcript = stt.audio.transcriptions.create(
        model=os.environ["STT_MODEL"],  # the model name your server expects
        file=f,
    )

resp = llm.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Clean up this transcript: fix punctuation, keep every statement, no commentary."},
        {"role": "user", "content": transcript.text},
    ],
    temperature=0.2,
)
print(resp.choices[0].message.content)

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

Если вы предпочитаете оболочку, этап обработки текста — это обычный запрос завершения чата:

curl https://api.whisperapis.com/v1/chat/completions \
  -H "Authorization: Bearer $LLM_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [
      {"role": "user", "content": "Summarize this transcript in five bullet points: ..."}
    ]
  }'

Аутентификация — Bearer-ключ в заголовке Authorization, эндпоинты: POST /v1/chat/completions и GET /v1/models. Ключ берётся на странице API-ключа; новые аккаунты могут получить пробный кредит $0,50 в один клик, действительный в течение 7 дней без привязки карты.

Вещи, которые часто ломаются на практике

Большие аудиофайлы

Многие серверы Whisper ограничивают размер загрузки, а длинные записи могут завершиться по таймауту в середине запроса. Разбейте аудио на части по десять–тридцать минут с помощью такого инструмента, как ffmpeg, транскрибируйте каждую часть, а затем объедините текст. Поскольку текстовый API принимает до 100 000 токенов, вы можете склеить части и отправить их как один промпт. Лимит тела запроса для этого API составляет 8 МБ, что гораздо больше, чем нужно любой транскрипции.

Лимиты частоты и параллельных запросов

Полный ключ позволяет 8 параллельных запросов и 300 запросов в минуту; пробный ключ позволяет 2 и 60. Если вы запускаете очередь с множеством воркеров, ограничьте её параллельностью вашего ключа. Превышение возвращает HTTP 429 с кодом rate_limited для запросов в минуту или concurrency для одновременных запросов. Потоковый запрос удерживает слот до завершения потока, поэтому застрявший клиент может блокировать слот дольше, чем вы ожидаете. Подождите и повторите попытку; если в ответе есть заголовок Retry-After: 5, подождите указанное время.

Ошибки транскрипции, которые LLM не видит

Если Whisper услышал неправильное слово, текстовая модель видит только это неправильное слово. Она может даже сгладить ошибку и сделать ее похожей на намеренную. Добавьте глоссарий имен и терминов в системный промпт и скажите модели отмечать неопределенные фрагменты, а не угадывать. Для критически важных материалов держите оригинальную транскрипцию рядом с очищенной.

Выдуманный текст-заполнитель

Whisper иногда генерирует выдуманный текст во время тишины или музыки. Удалите тишину перед отправкой и попросите второй этап отметить предложения, которые выглядят как лишние. Низкий temperature, например 0,2, сохраняет очистку близкой к источнику.

Что этот API не делает

Он не транскрибирует аудио. Нет ввода аудио, нет вывода речи, нет генерации изображений или видео, нет эмбеддингов и нет тонкой настройки. Это хостинговая текстовая модель за эндпоинтом chat completions, запущенная независимым провайдером, и это не официальный API OpenAI или любого другого вендора моделей. Если вашему проекту нужны оба этапа, вам нужен сервер распознавания речи для первого и этот сервис для второго.

Промпты не используются для обучения. Это отдельно от того, что ваш провайдер распознавания речи делает с аудио, поэтому прочитайте условия этого провайдера отдельно.

Для планирования расходов текстовая часть тарифицируется по токену: $0,15 за миллион входных токенов и $0,50 за миллион выходных токенов, со списанием с предоплаченного баланса, который не сгорает. На странице тарифов указаны размеры пополнений и бонусы. Неудачные или отклонённые запросы не тарифицируются, что предотвращает расходы при повторных попытках.

Разумный способ начать

  1. Запустите совместимый с Whisper сервер, хостинговый или локальный, и убедитесь, что он возвращает текст для файла длительностью одну минуту.
  2. Создайте аккаунт, получите пробный баланс и запустите команду curl выше с короткой расшифровкой.
  3. Соедините двух клиентов вместе с помощью скрипта Python, используя свой собственный системный промпт для желаемого стиля очистки.
  4. Добавьте очередь только после того, как поток с одним файлом заработает, и настройте ее размер под параллельные запросы вашего ключа.

Большая часть усилий идет на промпт и обработку аудио, а не на связующий код. Начните с одной записи, которую вы хорошо знаете, сравните вывод с тем, что вы слышали, и настройте инструкции перед масштабированием.

Вопросы и ответы

Сервер Whisper API — это то же самое, что и API OpenAI?

Нет. Whisper — это модель, а сервер — любая программа, которая открывает её через HTTP. OpenAI запускает одну хостинговую версию, а многие люди запускают свои собственные с помощью инструментов с открытым исходным кодом, которые копируют тот же маршрут транскрипции.

Может ли этот API транскрибировать аудиофайлы?

Нет. Он принимает только текст. Для этапа работы с аудио используйте сервис распознавания речи или собственный сервер Whisper, а затем отправьте сюда расшифровку.

Какое имя модели использовать для этапа обработки текста?

Используйте uncensored в качестве идентификатора модели, с базовым URL https://api.whisperapis.com/v1 и вашим ключом в качестве токена Bearer.

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

Контекстное окно составляет 100 000 токенов, включая промпт и ответ модели. Этого достаточно для многих многочасовых записей в одном запросе.

Нужна ли карта для пробного использования?

Нет. Новые пользователи могут получить пробный кредит в размере $0,50 одним кликом на странице API-ключа после регистрации, без привязки карты.

Ваш ключ — всего в одной форме

Создайте аккаунт, скопируйте ключ, измените базовый URL. Это вся настройка.

Получить API-ключ