Groq для голоса: распознавание и синтез через API — это два разных эндпоинта. Распознавание (STT) живёт на https://api.groq.com/openai/v1/audio/transcriptions и .../audio/translations с моделями Whisper. Синтез (TTS) — на https://api.groq.com/openai/v1/audio/speech с моделями Orpheus. Ниже — выбор модели, два учебных запроса и проверка результата.
STT и TTS: различие и поддерживаемые модели
В документации Groq распознавание и синтез разведены по эндпоинтам и моделям. STT-эндпоинт transcriptions превращает аудио в текст, translations переводит речь в английский текст. Модели: whisper-large-v3-turbo — многоязычная, оптимизированная под скорость; whisper-large-v3 — многоязычная с высокой точностью. Обе поддерживают транскрипцию, перевод доступен только у whisper-large-v3.
TTS-эндпоинт audio/speech делает обратное — превращает текст в звук. Модели: canopylabs/orpheus-v1-english (английский, выразительный синтез с управлением вокалом) и canopylabs/orpheus-arabic-saudi (арабский, саудовский диалект). Языки у TTS-моделей задокументированы явно: английский и арабский.
Различие принципиальное: STT принимает файл или URL, TTS принимает строку текста. STT возвращает JSON с текстом и метаданными, TTS возвращает аудиопоток. Один ключ GROQ_API_KEY обслуживает оба направления, но эндпоинты и параметры у них разные.
| Направление | Эндпоинт | Модели | Вход | Выход |
|---|---|---|---|---|
| STT | /audio/transcriptions, /audio/translations |
whisper-large-v3-turbo, whisper-large-v3 |
аудиофайл или URL | текст, JSON |
| TTS | /audio/speech |
canopylabs/orpheus-v1-english, canopylabs/orpheus-arabic-saudi |
текст | аудиофайл |
Выбор сценария и модели
Выбор начинается с задачи. Нужно получить текст из записи — это STT. Нужно озвучить текст — это TTS. Смешивать их в одном запросе нельзя: у них разные тела запроса и разные ответы.
Внутри STT документация даёт развилку. Приложение чувствительно к ошибкам и требует многоязычности — whisper-large-v3. Нужна многоязычность и лучшее соотношение цены и производительности — whisper-large-v3-turbo. Перевод на английский доступен только у whisper-large-v3, поэтому для задачи перевода выбор сужается до одной модели.
Внутри TTS выбор идёт по языку. Английский текст — canopylabs/orpheus-v1-english. Арабский саудовский диалект — canopylabs/orpheus-arabic-saudi. Документация Orpheus описывает управление вокалом через указания в тексте, например [cheerful] в примере.
| Задача | Модель | Почему |
|---|---|---|
| Транскрипция, чувствительная к ошибкам | whisper-large-v3 |
высокая точность, многоязычность |
| Быстрая многоязычная транскрипция | whisper-large-v3-turbo |
оптимизирована под скорость |
| Перевод речи на английский | whisper-large-v3 |
перевод поддерживается этой моделью |
| Озвучка английского текста | canopylabs/orpheus-v1-english |
английский, управление вокалом |
| Озвучка арабского текста | canopylabs/orpheus-arabic-saudi |
саудовский диалект |
Проверяемый пример распознавания
Учебный пример из документации Groq: транскрипция файла через Python SDK. Пакет ставится командой pip install groq, клиент инициализируется без аргументов и читает ключ из окружения. Перед запуском задайте GROQ_API_KEY в окружении и замените YOUR_AUDIO.wav своим файлом. Пример печатает распознанный текст; для метаданных сохраняйте возвращённый объект SDK. Редакция эти запросы не выполняла.
import os
import json
from groq import Groq
client = Groq()
filename = os.path.dirname(__file__) + "/YOUR_AUDIO.wav"
with open(filename, "rb") as file:
transcription = client.audio.transcriptions.create(
file=file,
model="whisper-large-v3-turbo",
prompt="Specify context or spelling",
response_format="verbose_json",
timestamp_granularities=["word", "segment"],
language="en",
temperature=0.0
)
print(transcription.text)
Что менять под себя: путь к файлу, model, language в формате ISO-639-1, prompt под контекст записи. Параметр prompt ограничен 224 токенами и задаёт стиль и написание незнакомых слов. response_format="verbose_json" нужен, чтобы получить таймстемпы; для чистого текста ставят text.
Документация отмечает ограничения входного файла: до 25 МБ на бесплатном тарифе и до 100 МБ на dev-тарифе, минимальная длина 0,01 секунды, минимальная тарифицируемая длина 10 секунд. Поддерживаются flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, webm. Из файла с несколькими дорожками транскрибируется только первая.
Прямой Groq API: синтез с response_format
Учебный пример синтеза из документации Groq. Запрос идёт напрямую на https://api.groq.com/openai/v1/audio/speech. Поле response_format по умолчанию равно "wav"; в примере оно задано явно.
curl --fail https://api.groq.com/openai/v1/audio/speech \
-X POST \
-H "Authorization: Bearer $GROQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "canopylabs/orpheus-v1-english",
"input": "Welcome to Orpheus text-to-speech. [cheerful] This is an example.",
"voice": "austin",
"response_format": "wav"
}' \
--output orpheus-english.wav
Четыре ключевых входа эндпоинта: model, input (текст для озвучки), voice (голос) и response_format. В примере на Python SDK тот же запрос идёт через client.audio.speech.create(...), а результат пишется в файл orpheus-english.wav методом write_to_file. В JavaScript-примере ответ превращается в буфер и сохраняется через fs.promises.writeFile.
Что менять под себя: model под язык, voice под нужный голос, input под свой текст, response_format под формат файла. Указание [cheerful] внутри input — часть текста.
Проверка текстового ответа и аудиофайла
Проверка STT начинается с текста. При response_format="verbose_json" ответ содержит сегменты с полями text, start, end, avg_logprob, no_speech_prob, compression_ratio. Документация Groq разбирает их как индикаторы качества.
avg_logprob около нуля означает высокую уверенность; значения вроде −0,5 и ниже указывают на возможные проблемы. no_speech_prob около нуля говорит, что это речь; значения ближе к единице указывают на тишину или неречевой звук. В примере Groq значение compression_ratio равно1.6637554 и названо нормальным. Это разбор конкретного ответа, поэтому одного совпадения с числом недостаточно для проверки любой записи. Сверьте распознанные слова с аудио.
При проверке TTS сначала посмотрите HTTP-статус, затем откройте файл в проигрывателе. Сравните произнесённый текст с input, начало и конец записи. Наличие расширения WAV само по себе не подтверждает, что в файле находится аудио. Если файл не создан, смотрят на код ответа и на то, был ли ответ записан в файл. Для Python это response.write_to_file(path), для JavaScript — запись буфера через файловую систему.
| Что проверяем | Где смотрим | Признак нормы |
|---|---|---|
| Текст STT | поле text |
осмысленный текст на нужном языке |
| Уверенность STT | avg_logprob |
значение около нуля |
| Речь или тишина | no_speech_prob |
значение около нуля |
| Повторы и границы слов | compression_ratio и исходная запись |
Проверить подозрительные места на слух |
| Аудио TTS | HTTP-ответ и файл в проигрывателе | Запрос успешен, файл декодируется, речь соответствует тексту |
Диагностика модели, языка, файла и ключа
Диагностика идёт по четырём осям. Модель: STT-модель нельзя передать в TTS-эндпоинт и наоборот — у них разные наборы идентификаторов. Если запрос отклонён, сверяют model со списком для конкретного эндпоинта.
Язык: для STT параметр language задаётся в формате ISO-639-1 и улучшает точность и задержку. Эндпоинт переводов принимает только en. Для TTS язык определяется моделью: английский текст идёт в orpheus-v1-english, арабский — в orpheus-arabic-saudi.
Входной файл: превышение лимита размера, неподдерживаемое расширение или файл короче 0,01 секунды дают ошибку. Документация советует для больших файлов использовать параметр url или нарезать аудио на перекрывающиеся сегменты. Для снижения задержки файлы конвертируют в wav, для уменьшения размера без потерь — в FLAC; пример команды ffmpeg в документации понижает частоту до 16 кГц и сводит в моно.
Ключ: SDK читает GROQ_API_KEY из окружения. Если переменная не задана, клиент не аутентифицируется. При прямой работе через curl ключ передаётся в заголовке Authorization: Bearer $GROQ_API_KEY.
Границы внешнего Pipecat-примера
Pipecat — отдельный фреймворк для голосовых агентов. В ней описан GroqTTSService, который отдаёт синтез через API Groq. Это адаптер фреймворка.
Различие важно для параметров. В Pipecat настройка формата вывода идёт через собственный параметр output_format и декодирование PCM. В прямом API Groq формат задаёт поле response_format в теле запроса. Это разные уровни: один принадлежит фреймворку, другой — API Groq.
Практический вывод: примеры из документации Pipecat стоит читать как инструкцию по настройке фреймворка. Для прямого вызова эндпоинта Groq опираются на документацию Groq. Смешение параметров двух уровней — частая причина того, что запрос не проходит.
Частые вопросы
Что такое tts groq?
Это синтез речи через эндпоинт Groq audio/speech. Он принимает текст, модель, голос и формат ответа, а возвращает аудио. Модели — canopylabs/orpheus-v1-english и canopylabs/orpheus-arabic-saudi. Языки у этих моделей задокументированы: английский и арабский.
Чем отличается groq speech to text от синтеза?
Распознавание принимает аудиофайл или URL и возвращает текст. Синтез принимает текст и возвращает аудио. Эндпоинты разные: /audio/transcriptions и /audio/translations против /audio/speech. Модели тоже разные: Whisper против Orpheus.
Какую модель Whisper выбрать?
Для чувствительных к ошибкам задач с многоязычностью документация советует whisper-large-v3. Для многоязычности с лучшим соотношением цены и производительности — whisper-large-v3-turbo. Перевод на английский поддерживает только whisper-large-v3.
Как задать формат ответа при синтезе?
Поле response_format в теле запроса к audio/speech. По умолчанию оно равно "wav". В учебном примере документации значение задано явно. Формат определяет расширение сохраняемого аудиофайла.
Почему запрос к Groq возвращает ошибку?
Проверяют четыре вещи: модель соответствует эндпоинту, язык задан в ISO-639-1, файл укладывается в лимиты размера и длины, ключ GROQ_API_KEY доступен клиенту. Для больших файлов документация предлагает параметр url или нарезку аудио.
