Пользователь диктует сообщение в вашем приложении и отправляет его, не убрав «э-э». Другой меняет решение на полуслове, и в тексте остаются обе половины. Третий видит, как имя коллеги в трёх сообщениях написано тремя разными способами. Ни один из этих случаев не является пограничным. Они происходят потому, что модели транскрипции по своей природе дословны: они фиксируют сказанное полностью и точно, но сказанное — это не то, что кто-либо хочет отправить.
Вот три секунды аудио, пропущенные через модель транскрипции и через Dictation API:
Транскрипция
э-э так можем мы э-э перенести встречу на на четверг я думаю пятница лучше подходит вообще-то
Dictation API
Можем перенести встречу на пятницу? Так лучше.
Сегодня мы выпускаем Dictation API — наш первый API, созданный именно для диктовки. Он принимает одно произнесённое высказывание и возвращает текст, готовый к использованию в том, что пишет ваш пользователь. Самоисправления сводятся к тому варианту, на котором остановился говорящий. Слова-паразиты исчезают, а тон сохраняется. Имена и термины, важные для вашего пользователя, возвращаются в том написании, которое использует он. А когда вашему приложению нужен текст определённого вида, вы указываете это в запросе — и результат приходит именно таким. Он работает на Universal-3.5 Pro, нашей флагманской модели распознавания речи, на 19 языках, по цене $0,62/час.
Текст, который ваши пользователи могут отправлять без предварительного редактирования
Большинство команд, которые сегодня создают диктовку, начинают с транскрипции и пытаются закрыть этот разрыв самостоятельно. Эта работа сложнее, чем кажется. Понять, что «вторник, нет, погоди, среда» означает среду, — значит понять, что делал говорящий; то же самое относится и к пониманию того, что запинка в середине предложения должна исчезнуть, а формулировка человека — сохраниться. Dictation API выполняет эту работу в рамках запроса:
- Проверить договор
- Написать юристам
- Забронировать выездное мероприятие
Первые две строки работают по умолчанию. Третья — та, которую команды недооценивают: имя, которое модель никогда не встречала, — самая заметная ошибка в диктовке, потому что пользователь всегда её замечает и часто не может исправить быстрее, чем перепечатать всё сообщение. Передайте слова, важные для вашего пользователя, в keyterms_prompt, и распознавание будет тяготеть к этим написаниям. Коллеги, клиенты, названия продуктов, внутренний жаргон — слова, которые универсальная модель стабильно коверкает.
Universal-3.5 Pro очень точен из коробки, а контекстный промптинг — это способ продвинуться дальше для случаев, которые этого требуют. Dictation API наследует эту возможность целиком. Передайте модели описание того, что ей предстоит услышать, в stt_prompt — ваше приложение, вашу предметную область, тип речи ваших пользователей — и она использует это для управления транскрипцией. Это разница между транскрипцией, которая в целом верна, и той, которая точно передаёт словарь вашего пользователя.
Четвёртая строка — та, которую задаёте вы. Диктовка в поле ввода Slack и диктовка в клиническую заметку требуют разного текста из одного и того же предложения, и llm_instruction — это то место, где вы проводите эту границу:
Если опустить его, вы получите очистку по умолчанию. В любом случае дословная транскрипция возвращается вместе с ним в text, так что у вас всегда есть оба варианта.
Менее секунды от отпускания клавиши до готового текста
Dictation API
0.36s
0 0.5s 1s
Типичные короткие фрагменты возвращаются менее чем за секунду. Этому числу не нужно верить на слово: каждый ответ содержит request_time_ms, поэтому задержку, которую вы видите в продакшене, можно логировать уже с первого запроса.
Вы также можете начать запрос до того, как пользователь закончит говорить. API принимает аудио чанками по мере их захвата, если только часть с конфигурацией приходит первой, так что к моменту отпускания клавиши большая часть высказывания уже загружена.
Запросы ограничены пятью секундами. За этим пределом API возвращает 200 с дословным текстом и llm_error: "timeout" вместо ошибки, которую вашему клиенту придётся обрабатывать, а значит, худший случай для пользователя — более простой текст, чем обычно. Это не то же самое, что смотреть на спиннер и терять мысль, которую диктуешь.
Создан на базе Universal-3.5 Pro, потому что неверное слово неисправимо
Неверно расслышанное название лекарства, искажённое название продукта или неверная цифра в адресе переживают все последующие улучшения и уходят прямо в то, что отправляет пользователь. Форматирование можно исправить. Ошибки транскрипции — нет.
Именно поэтому Dictation API работает на Universal-3.5 Pro — той же флагманской модели, которая лежит в основе наших async, realtime и Sync поверхностей. Она занимает первое место по точности в независимых бенчмарках и показывает среднюю нормализованную ошибку в словах 3,87% на коротких аудиофрагментах — то есть на том аудиопрофиле, который реально создаёт диктовка.
AssemblyAI Universal-3.5 Pro Realtime
3.87%
Speechmatics Enhanced Realtime
4.69%
Smallest Pulse
5.41%
Azure Realtime STT
5.54%
xAI Grok Streaming
5.81%
Speechmatics Standard Realtime
6.41%
Deepgram Flux EN
6.53%
Mistral Voxtral Mini Realtime
6.61%
Deepgram Nova-3
7.46%
19 языков из коробки
Не все ваши пользователи диктуют на английском, и те, кто диктует на других языках, первыми отказываются от функции диктовки, которая работает наполовину. Dictation API транскрибирует 19 языков — тот же набор, что покрывает Universal-3.5 Pro. Передайте те, которые поддерживает ваше приложение, в language_codes; по умолчанию используется английский.
Как это работает
Установите SDK, опишите, что модели предстоит услышать, и отправьте фрагмент. Dictation принимает до 120 секунд аудио за вызов.
Под капотом это один POST с двумя multipart-частями: JSON-объектом конфигурации и аудио, так что любой язык с HTTP-клиентом может вызывать его одинаково. transcribe_live() также принимает итератор аудиочанков, а open_live() принимает аудио, передаваемое из колбэка, так что вы можете начать загрузку, пока пользователь ещё говорит, вместо того чтобы ждать окончания записи. Оба метода описаны в документации Dictation.
Цены
$0,62/час аудио, всё включено. Одна строка в вашем счёте покрывает весь запрос, так что нет отдельной ставки за модель и не нужно считать токены, когда вы прогнозируете стоимость диктовки при ваших объёмах. Скидки за объём действуют на любом тарифе.
Blurt — приложение для диктовки с открытым исходным кодом, созданное на его основе
Мы создали приложение для диктовки на этом API и открыли весь его исходный код. Blurt бесплатен, распространяется по лицензии MIT и является нативным приложением для macOS: зажмите правый ⌘, говорите, и готовый текст появляется в том приложении, которое находится в фокусе. Вы используете свой собственный API-ключ, включая бесплатный тариф.
Это также самый быстрый способ увидеть API в работе в реальном приложении. Каждая функция из этого поста присутствует в коде, так что если вы разбираетесь, как встроить диктовку в свой продукт, начните с этого кода, а не с нуля.
Начало работы
Dictation API уже доступен по адресу https://dictation.assemblyai.com/v1/transcribe/live с вашим существующим API-ключом. Отправьте высказывание, прочитайте llm_response, вставьте его в позицию курсора. Когда будете готовы пойти дальше, тот же запрос принимает stt_prompt с описанием вашей предметной области, keyterms_prompt для имён, которые ваши пользователи не могут позволить себе увидеть написанными с ошибкой, и llm_instruction, когда вывод по умолчанию не имеет нужной вашему приложению формы.
Часто задаваемые вопросы
Sync API возвращает дословную расшифровку в одном запросе: что было сказано, точно так, как было сказано. Dictation API принимает ту же реплику и возвращает то, что говорящий хотел отправить, с исправленными самооговорками и без слов-паразитов. Обе работают на Universal-3.5 Pro. Используйте Sync, когда нужна сама расшифровка, и Dictation, когда текст идёт напрямую в то, что пишет ваш пользователь.
Да. Передайте llm_instruction с нужной формой, и вывод придёт в таком виде — будь то маркированный список задач, клиническая заметка или сообщение в чате. Если его не указывать, вы получите стандартную очистку. Дословная расшифровка в любом случае возвращается в виде текста, так что у вас всегда есть оба варианта.
[TODO] Транскрибация охватывает все 19: передайте те, которые поддерживает ваше приложение, в language_codes, по умолчанию используется английский. Охват форматирования вывода ожидает подтверждения продукта — не отвечайте на эту часть, пока оно не появится.
Вы получаете 200 с дословным текстом и llm_error, установленным в "timeout", а не ошибку, которую должен обрабатывать ваш клиент. Худший случай для вашего пользователя — более простой текст, чем обычно, что совсем не то же самое, что смотреть на спиннер и терять мысль, которую он диктует. В SDK result.final_text уже выполняет резервное действие: переписанный текст, если он есть, и расшифровку, если его нет.
Передайте важные слова в keyterms_prompt — имена коллег, клиентов, названия продуктов, внутренний жаргон — и распознавание будет смещаться в сторону этих написаний. Для более широкого контекста stt_prompt описывает, что модель собирается услышать, чтобы она могла опираться на вашу предметную область, а не на общеупотребительную лексику.
Да, для Python: pip install assemblyai, затем aai.DictationTranscriber().transcribe_live(). Он сам обрабатывает multipart-обрамление и фрагментированную загрузку. JavaScript SDK пока нет, поэтому на всех остальных языках вызывайте его через HTTP — один POST с частью конфигурации и частью аудио, что может сделать любой HTTP-клиент.
Весь запрос за час аудио: транскрибация и готовый результат одной строкой в вашем счете. Нет отдельного тарифа на модель и не нужно считать токены, когда вы прогнозируете стоимость диктовки при ваших объёмах. Скидки за объём действуют на любом тарифе.












