Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11

Как мы разрабатываем систему голосового управления презентациями на базе Whisper и GigaChat

Обзор технической реализации «AI Кликера» — инструмента для учителей и спикеров, который позволяет переключать слайды с помощью голосовых команд и контекстного анализа речи. В статье разбирается микросервисная архитектура на React и Python (FastAPI), использование модели OpenAI Whisper для транскрибации в реальном времени и интеграция LLM GigaChat для интеллектуального ведения презентации. Также описываются проблемы нестабильности нейросетей в живых выступлениях и реализованные решения: режим байпаса и навигация по ключевым словам.

52 открытий1К показов
Как мы разрабатываем систему голосового управления презентациями на базе Whisper и GigaChat

Наша команда разрабатывает инструмент для интеллектуального управления презентациями.

Пользователь может транслировать презентацию через "AI Кликер", а сервис будет записывать и транскрибировать речь спикера и аудитории. Спикер может переключать слайды простыми голосовыми командами или ключевыми словами, привязанными к конкретным слайдам.

Интеграция LLM позволяет реализовать интеллектуальные функции - переключение слайдов по описанию, контексту, генерация нового контента в реальном времени. Целевая аудитория — учителя, преподаватели и спикеры, на постоянной основе работащие с презентациями.

Архитектура решения

Наша команда использует JavaScript с React на фронтенде и Python c FastAPI на бэкенде. Мы используем PosgtreSQL как базу данных и S3 как объектное хранилище для хранения презентаций. Мы строим микросервисную архитектуру в нашем приложении.

Курс «Разработка на Python» от Академии ТОП
  • от 17910₽ до 214920₽
  • набор еще идет
  • Множество филиалов в Москве и других городах и онлайн
tproger.ru

Первый сервис - REST API для авторизации, управления личным кабинетом и контентом пользователя. Развернут на отдельном дешевом сервере за прокси NGINX, запросы шифруются HTTP

Как мы разрабатываем систему голосового управления презентациями на базе Whisper и GigaChat 1
Архитектура REST API

Второй сервис - API трансляции презентации. Двустороннее взаимодействие браузера и этого сервиса (передача звука и отдача команд по переключению слайдов) идет по протоколу WebSocket Secure. Отдельный сервис для трансляции позволяет нам динамически управлять дорогими серверами с GPU, уничтожать их, поднимать, экспериментировать с конфигурациями, не переживая о сохранности основного приложения. Модель OpenAI Whisper используется для транскрибации речи и GigaChat от Сбера как LLM для анализа контекста выступления и генерации команд и контента.

Как мы разрабатываем систему голосового управления презентациями на базе Whisper и GigaChat 2
Архитектура сервиса трансляции

Работа Whisper

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

Поэтому в проекте используется связка Whisper + WhisperLiveKit — библиотека, которая позволяет кормить модель аудио чанками в реальном времени, а не загружать готовые записи.

Байпас: ручное управление голосом

Одна из ключевых фич — байпас-режим. Это механизм, который позволяет управлять презентацией жёсткими голосовыми командами, в обход всей нейросетевой логики.

Когда Whisper отдаёт текст, он сначала проверяется не через LLM, а через механизм сопоставления фраз:

			matcher = PhraseMatcher(match_threshold=0.7, word_distance=2) 
		

Дальше всё работает просто:

  • если пользователь сказал фразу, похожую на “кликер вперёд” → слайд листается вперёд;
  • если “кликер назад” → слайд листается назад.

Данная реализация позволяет пользователю в любой момент перебить автоматику и принудительно перелистнуть слайд. Это критично для надёжности: если LLM вдруг “поплыла”, у спикера всегда есть жёсткий голосовой руль.

Ключевые слова: автоматический переход на нужный слайд

Вторая важная часть — режим ключевых слов. Это уже не просто “вперёд/назад”, а сопоставление речи с конкретными слайдами.

Логика такая:

  1. Для презентации загружается набор ключевых фраз, который группируется по номеру слайда.
  2. Когда приходит новый фрагмент речи — он сравнивается с ключевыми словами и в случае успеха отправляет команду на переключение:
			if matcher.compare(text, phrase):
    await self._slides_queue.put({slide_num: 1})
		

То есть фактически система работает как голосовой навигатор по презентации:

  • сказал фразу, связанную со слайдом 5 → система предлагает перейти на 5;
  • сказал фразу из блока 10 → прыжок сразу туда

При этом переход отправляется в очередь и дополнительно проверяется по порогу уверенности:

			MIN_PROBABILITY = 0.4
		

Слайд переключается только если вероятность достаточная. Это защищает от случайных совпадений и шумов.

Работа с LLM (Гигачат) - промпты, контексты, очереди

Если Whisper в AI-кликере отвечает за то, чтобы услышать, то GigaChat отвечает за то, чтобы понять, о чём сейчас говорит спикер и какой слайд этому соответствует. Вся работа с LLM построена асинхронно: распознанная речь не блокирует систему, а складывается в очередь и обрабатывается в фоне. Каждый фрагмент речи:

  • попадает в очередь,
  • добавляется в историю пользователя,
  • отправляется в GigaChat,
  • а результат в виде вероятностей по слайдам уходит дальше в очередь переключения.

Такой подход позволяет не тормозить распознавание речи, не зависеть от времени ответа нейросети, обрабатывать несколько фрагментов параллельно.

В чём возникла основная проблема?

Текущая концепция работы LLM строится на предугадывании номера слайда по смыслу речи. И именно здесь в реальных условиях всплыла главная боль проекта. На живых выступлениях выяснилось, что GigaChat может путаться между похожими слайдами и менять своё решение от фразы к фразе. В итоге презентация иногда начинала хаотично перелистываться, даже если спикер говорил последовательно и спокойно. Для пользователя это выглядит как будто “нейросеть сошла с ума и живёт своей жизнью”.

Пока проблема не решена полностью, в системе есть страховочный механизм — временное отключение GigaChat при ручном управлении. Если пользователь даёт жёсткую голосовую команду (байпас), то нейросеть временно игнорируется, а управление полностью возвращается человеку. Через несколько секунд автоматика включается обратно, что позволяет не ломать выступление даже в моменты, когда LLM начинает вести себя нестабильно

Курс «Разработка на Python» от Академии ТОП
  • от 17910₽ до 214920₽
  • набор еще идет
  • Множество филиалов в Москве и других городах и онлайн
tproger.ru

Практика показала, что угадывать слайд по смыслу — слишком нестабильная стратегия для живого продукта. Поэтому сейчас происходит переход к новой модели:

  • было - нейросеть угадывает номер следующего слайда.
  • станет - нейросеть находит слайд по его описанию. После определенной команды, система слушает пользователя, пока он не закончит предложение (как умная колонка) и тогда один раз выбирает и переключает слайд. Это снижает вероятность случайных переключений и делает поведение системы более предсказуемым.

Итоги

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

Следите за новыми постами
Следите за новыми постами по любимым темам
52 открытий1К показов