Как мы разрабатываем AI Кликер — инструмент для интерактивной работы с презентациями

1

Этот текст написан в Сообществе, в нем сохранены авторский стиль и орфография

Аватар автора

Сергей Киприн

Страница автора

Исходные данные

В этой статье я расскажу про устройство AI Кликера — инструмента, который позволяет транслировать презентацию, слушает спикера, транскрибирует речь и переключает слайды в зависимости от контекста или прямых команд. Интеграция языковой модели позволяет реализовать интеллектуальные функции — переключение слайдов по описанию, контексту, генерация нового контента в реальном времени (например: вывод на слайд суммаризации сказанного, вопросов аудитории и ответов выступающего). Целевая аудитория — учителя, преподаватели и спикеры, на постоянной основе работащие с презентациями.

Стек технологий

Для реализации проекта был выбран классический стек, позволяющий быстро поднять с нуля новый проект с использованием современных инструментов для работы с Machine Learning:

  • Frontend: JavaScript + React. Обеспечивает отзывчивый интерфейс для пользователя
  • Backend: Python + FastAPI. Python — стандарт де-факто в мире AI, а FastAPI позволяет быстро строить API
  • База данных: PostgreSQL для хранения данных пользователей и презентаций
  • Хранилище файлов: S3 (объектное хранилище) для самих файлов презентаций

Архитектура: микросервисы

Вместо одного приложения (монолита), система разбита на микросервисы. Это позволяет гибко управлять ресурсами, особенно дорогими серверами с GPU (видеокартами), необходимыми для нейросетей.

Система состоит из двух основных блоков:

  • REST API: Отвечает за регистрацию, авторизацию и загрузку презентаций. Этот сервис легкий и дешевый, он работает по протоколу HTTPS.
  • API Трансляции: Браузер соединяется с этим сервисом через WebSocket Secure. Это позволяет передавать аудиопоток от микрофона спикера на сервер и мгновенно получать команды на переключение слайдов обратно в браузер.

Отдельный сервис трансляции позволяет динамически поднимать и отключать дорогие GPU-серверы для обработки AI, экспериментировать с конфигурациями, не затрагивая работу личного кабинета пользователя.

Распознавание речи

Фундамент системы — модель OpenAI Whisper. Ее задача — превращать звук в текст. Однако стандартный Whisper хорошо работает с готовыми файлами, но плохо подходит для живого потока речи (стриминга).

Решение проблемы задержки:

Чтобы система реагировала мгновенно, используется библиотека WhisperLiveKit. Она позволяет подавать аудио небольшими кусочками (чанками) в реальном времени, не дожидаясь окончания фразы. Whisper здесь выступает исключительно как инструмент транскрибации — он не принимает никаких решений.

Трехуровневая логика управления

Мы не доверяем управление только нейросети. LLM может ошибиться или "загаллюцинировать". Чтобы система была надежной, используется многослойная (и не самая сложная) архитектура принятия решений.

Уровень 1: Байпас (Ручной контроль)

Это "аварийный руль". Если пользователь говорит жесткую команду, например, "кликер вперёд", "кликер назад" или "перейди на слайд 10", система срабатывает мгновенно, минуя сложные нейросети. Это реализуется через простое сравнение фраз. Это гарантирует, что спикер всегда сможет перелистнуть слайд, даже если AI зависнет.

Уровень 2: Ключевые слова

Каждый слайд может иметь привязанные ключевые слова. Система сравнивает входящий текст с базой фраз. Если спикер произносит фразу, привязанную к 10-му слайду, система предлагает сразу перейти на него. Здесь используется порог уверенности, чтобы избежать случайных срабатываний.

Уровень 3: LLM (Искуственный интеллект)

Если прямых команд нет, в дело вступает GigaChat. Он анализирует смысл сказанного и пытается понять, о каком слайда идет речь.
Все запросы к LLM обрабатываются асинхронно через очереди. Это значит, что распознавание речи не останавливается, пока нейросеть "думает".

В теории LLM должна угадывать номер слайда по контексту речи и презентацию, которую она предобрабатывает заранее, описывая общий смысл слайда и изображений на нем. На практике (на живых выступлениях) выяснилось, что это нестабильная стратегия.

Разработчики столкнулись с тем, что GigaChat мог начать хаотично переключать слайды, путаясь в похожем контексте. Для пользователя это выглядело так, будто нейросеть "живет своей жизнью".

Как мы это решаем:

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

Итоги и планы

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

Вот что еще мы писали по этой теме