Как устроен мультимодальный ввод
Мы часто видим, как заказчики хотят добавить в приложение голосовой ввод с AI-ответом, но сталкиваются с неочевидными техническими ограничениями. Например, типичная проблема — пользователь диктует сообщение, но модель не понимает контекст, потому что аудио обрезано или частота дискретизации неподходящая. Расскажем, как мы решаем такие задачи на iOS и Android, используя Whisper API и мультимодальные модели (GPT-4o Audio, Gemini 1.5 Pro). Наш опыт показывает, что правильный выбор стека сокращает время разработки на 30%. Закажите консультацию — мы поможем выбрать оптимальный путь.
Два архитектурных пути
Путь 1: STT + LLM. Whisper API или аналоги преобразуют аудио в текст, текст уходит в messages[]. Работает с любой LLM, дёшево, предсказуемо. Проблема — двойная задержка: сначала ждём транскрипцию (1–3 с для 30-секундного фрагмента), потом ответ модели. Пользователь смотрит в экран 5–10 секунд.
Путь 2: нативный аудио-ввод. GPT-4o Audio Preview, Gemini 1.5 Pro принимают input_audio прямо в content[]. Задержка меньше, модель «слышит» интонацию, паузы, акцент. Ограничение — формат: OpenAI требует PCM16 или MP3, Gemini — FLAC, MP3, WAV, OGG. На устройстве нужна конвертация.
Нативный аудио-ввод быстрее STT+LLM в 2-3 раза по времени отклика для живого диалога.
| Критерий | STT + LLM | Нативный аудио-ввод |
|---|---|---|
| Задержка | 5-10 сек (транскрипция + ответ) | 2-4 сек (потоковая обработка) |
| Интонации | Теряются | Сохраняются |
| Поддержка API | Любая LLM | GPT-4o Audio, Gemini 1.5 Pro |
| Размер данных | Малый (текст) | Большой (аудиофайлы до 25 МБ) |
| Подходит для | Транскрипции встреч | Голосовых ассистентов |
Как выбрать между STT+LLM и нативным аудио-вводом?
Если приложению требуется быстрый голосовой ассистент с интонациями — выбирайте нативный аудио-ввод. Для транскрипции длинных записей или когда модель ещё не поддерживает аудио — STT+LLM. Мы помогаем определиться на этапе аудита.
Как записать аудио без багов?
На Android
Захват через MediaRecorder прост, но AudioRecord нужен, когда требуется PCM в реальном времени (стриминг к Whisper через WebSocket). MediaRecorder сохраняет в файл — удобно для коротких голосовых, неудобно для живого потока. Типичный краш: IllegalStateException: start called in invalid state — это вызов start() до prepare() или повторный start() без reset(). Не забывайте освобождать в onPause(), иначе другие приложения потеряют микрофон.
На iOS
AVAudioEngine для PCM-стриминга, AVAudioRecorder для файлов. Проблема, которую все встречают — AVAudioSession конфигурация. Согласно Apple Developer Documentation, если не выставить .record категорию до старта, запись либо тихая, либо идёт через динамик вместо микрофона. А с iOS 17 нужен NSMicrophoneUsageDescription даже для симулятора. Формат по умолчанию у AVAudioRecorder — CAF. Whisper его не принимает. Нужно либо конвертировать через AVAssetExportSession (асинхронно, добавляет задержку), либо сразу настроить AVAudioRecorder на M4A/FLAC.
Реализация стримингового STT
Для живой расшифровки (пользователь говорит — текст появляется на экране) используем WebSocket к Whisper Streaming или Deepgram. На Android:
val audioRecord = AudioRecord(
MediaRecorder.AudioSource.MIC,
16000, // 16kHz — оптимум для Whisper
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSize
)
// чанки по 100мс → WebSocket → partial transcripts
Частота дискретизации 16 кГц достаточна для речи и вдвое меньше данных, чем 44.1 кГц. На iOS аналог — AVAudioEngine с installTap(onBus:).
Важно: WebSocket нужно переоткрывать при потере сети. OkHttp WebSocket на Android имеет коллбек onFailure — реализуйте exponential backoff с максимум 3 попытками, иначе пользователь не поймёт, что соединение оборвалось.
Как передать аудио-файл в мультимодальную модель?
// iOS — отправка аудио в GPT-4o Audio
let audioData = try Data(contentsOf: recordingURL)
let b64 = audioData.base64EncodedString()
let payload: [String: Any] = [
"model": "gpt-4o-audio-preview",
"messages": [[
"role": "user",
"content": [
["type": "text", "text": userText],
["type": "input_audio", "input_audio": [
"data": b64,
"format": "mp3"
]]
]
]]
]
Лимит на размер аудио у OpenAI — 25 МБ. 30-минутная запись в MP3 128kbps занимает ~28 МБ — не влезает. Для длинного контента нужна нарезка на чанки по 10–15 минут или предварительный Whisper для транскрипции. Подробности — в OpenAI Audio API.
Что входит в работу по интеграции?
- Аудит текущего стека и целевых платформ
- Выбор архитектурного пути (STT+LLM или нативный аудио-ввод)
- Разработка захвата аудио с учётом платформенных особенностей
- Интеграция STT или мультимодального API с обработкой ошибок
- UI для частичных транскрипций и состояния записи
- Документация и инструкции по доработке
- Тестирование на реальных устройствах с разными микрофонами
Пошаговая инструкция для MVP
- Выберите архитектурный путь (STT+LLM или нативный аудио-ввод) под сценарий.
- Реализуйте захват аудио с учётом платформенных особенностей (категории сессии, формат, стриминг).
- Интегрируйте STT или мультимодальный API с обработкой ошибок и переоткрытием соединения.
- Добавьте UI для отображения частичных транскрипций и состояния записи.
- Протестируйте на реальных устройствах с разными микрофонами и уровнями шума.
Этапы и сроки
| Этап | Описание |
|---|---|
| Аудит | Анализ текущего стека, целевых платформ и сценариев использования |
| Архитектура | Выбор пути (STT+LLM или нативный аудио-ввод) и провайдера |
| Захват аудио | Реализация записи с учётом форматов и стриминга |
| Интеграция | Подключение STT/мультимодального API с обработкой ошибок |
| UI | Отображение частичных транскрипций и состояния записи |
| Тестирование | Проверка на реальных устройствах (разные микрофоны, шум, наушники) |
| Документация | Описание архитектуры, инструкции по доработке |
Ориентировочные сроки: MVP с записью и Whisper — от 1 до 2 недель. Полная реализация со стримингом, нативным аудио-вводом и обработкой длинных записей — от 3 до 5 недель.
Почему стоит доверить это нам?
Более 5 лет разрабатываем мобильные приложения с AI-функциями. Выполнили более 50 проектов с голосовыми и мультимодальными решениями. Имеем опыт интеграции Whisper, Deepgram, GPT-4o Audio. Гарантируем соблюдение App Store Review Guidelines и Google Play Политик. Предоставляем сертификат соответствия (если требуется).
Свяжитесь с нами для консультации — мы проанализируем ваше приложение и предложим оптимальное решение. Закажите оценку проекта, чтобы получить детальный план работ и сроки.







