Реализация AI-суммаризации аудиозаписей (встреч, звонков) в мобильном приложении
Записали созвон — получили транскрипт с задачами, решениями и ответственными. Без пересматривания записи, без ручных заметок. Реализовать это правильно — не три строки кода, а архитектурное решение с несколькими вариантами компромиссов.
Pipeline от аудиофайла до суммари
Аудиофайл (MP3/M4A/WAV)
↓ Whisper API / Deepgram / AssemblyAI
Транскрипт с таймстампами + диаризация (кто говорил)
↓ LLM (GPT-4o / Claude)
Структурированное суммари (решения, задачи, ответственные, дедлайны)
Три ключевых выбора: провайдер транскрипции, диаризация (speaker diarization), формат суммари.
Транскрипция: Whisper vs специализированные сервисы
OpenAI Whisper API — дёшево ($0.006/мин), хорошее качество на чистом аудио, но нет диаризации. Возвращает один текстовый поток без разбивки по спикерам. Для совещания из 5 человек — неудобно.
AssemblyAI — диаризация, speaker labels, auto chapters, автоматическое определение action items. Дороже Whisper (от $0.012/мин), но экономит разработку. SDK для Python, JS, Java.
Deepgram — самый быстрый (latency < 1с на минуту аудио для потокового), диаризация, поддержка русского и украинского, on-prem вариант для приватных данных.
Azure Speech Services — если уже используете Azure-инфраструктуру, встраивается естественно.
Для корпоративного приложения с записями переговоров — AssemblyAI или Deepgram. Для простого конспекта личных голосовых — Whisper достаточно.
Диаризация и её ограничения
Speaker diarization определяет, кто говорил в каждый момент. Результат:
{
"words": [
{"text": "Давайте", "start": 0.5, "end": 0.9, "speaker": "A"},
{"text": "обсудим", "start": 0.9, "end": 1.4, "speaker": "A"},
{"text": "дедлайн", "start": 2.1, "end": 2.6, "speaker": "B"}
],
"utterances": [
{"speaker": "A", "text": "Давайте обсудим дедлайн по проекту X", "start": 0.5, "end": 5.2},
{"speaker": "B", "text": "Нам нужно ещё две недели минимум", "start": 6.1, "end": 9.8}
]
}
Проблемы диаризации: плохо работает, когда несколько человек говорят одновременно; не знает имён (только «Speaker A», «Speaker B»); путается при похожих голосах. В UI нужна возможность переименовать спикеров вручную: «Speaker A» → «Иван», «Speaker B» → «Мария».
Подготовка транскрипта для суммаризации
Сырой транскрипт с таймстампами — избыточен для LLM. Форматируем в читаемый диалог:
def format_transcript(utterances: list) -> str:
lines = []
for u in utterances:
speaker = u.get("speaker_name") or f"Участник {u['speaker']}"
lines.append(f"**{speaker}** [{u['start']:.0f}s]: {u['text']}")
return "\n".join(lines)
Таймстампы в скобках помогают модели понять, что «в начале», а что «в конце» встречи.
Промпт для структурированного суммари
Ты анализируешь транскрипт рабочей встречи.
Извлеки:
1. ТЕМА встречи (1 предложение)
2. КЛЮЧЕВЫЕ РЕШЕНИЯ (список с принятыми решениями)
3. ЗАДАЧИ (таблица: задача | ответственный | дедлайн)
4. ОТКРЫТЫЕ ВОПРОСЫ (что осталось нерешённым)
5. СЛЕДУЮЩИЕ ВСТРЕЧИ (если упомянуты)
Отвечай только на основе транскрипта. Если информации нет — не выдумывай.
Формат: Markdown.
ТРАНСКРИПТ:
{transcript}
Структурированный JSON-вывод (через response_format) лучше для программной обработки, Markdown — лучше для отображения пользователю. Для мобильного приложения используем Markdown с рендерером.
Обработка длинных записей
Часовое совещание → ~6000–8000 слов транскрипта → ~8000–10000 токенов. Это влезает в контекст GPT-4o напрямую. Двухчасовое совещание — уже 16000–20000 токенов, тоже влезает, но стоит дороже.
Для записей > 3 часов применяем тот же Map-Reduce что и для длинных текстов: суммаризируем по 30-минутным блокам, потом объединяем. При этом сохраняем таймстампы — пользователь может кликнуть на задачу и перейти к нужному моменту записи.
Мобильный UX суммари встречи
Карточка суммари на мобильном:
- Заголовок с темой и датой встречи
- Участники (если определены диаризацией)
- Блок «Решения» — 3–7 буллетов
- Таблица задач с чекбоксами (пользователь может пометить как выполненное)
- «Открытые вопросы» — коллапс
- Кнопка «Слушать» с переходом к аудиофайлу
- Кнопка «Поделиться» — отправка суммари как текста
Задачи из суммари можно экспортировать в Jira, Notion, Todoist — через deep link или share sheet.
Этапы и сроки
Выбор провайдера транскрипции → интеграция API (upload + polling результата) → форматирование транскрипта → LLM для суммари → мобильный UI карточки → переименование спикеров → экспорт задач → тестирование на реальных записях совещаний.
MVP с Whisper + базовым суммари — 2–3 недели. Полноценный инструмент с диаризацией, переименованием спикеров, экспортом задач и мобильным UI — 5–7 недель.







