О проекте
Команда: DalaDigital
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Доведённый продукт
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
Локальное приложение, которое превращает аудиозапись совещания (файл, микрофон или вкладка встречи) в расшифровку с разделением по голосам, тематический протокол и поручения с исполнителями и сроками, с проверкой секретарём, экспортом в PDF/Word и напоминаниями.
Как устроено
FFmpeg приводит аудио к единому формату. Речь распознаёт Whisper large-v3-turbo через faster-whisper (CPU, INT8), голоса разделяют WeSpeaker ResNet34, Silero VAD и библиотека diarize. Qwen3 4B через локальный Ollama выделяет темы, итоги, решения и поручения. Секретарь сверяет черновик с фрагментами записи, правит и утверждает, после чего протокол выгружается через python-docx и ReportLab, а поручения получают статусы и напоминания за 3 дня и при просрочке. Бэкенд на FastAPI с очередью и SQLite. Экспериментальный meeting_bot (Playwright) для Meet/Teams умеет работать через OpenAI gpt-4o-transcribe-diarize и gpt-4.1-mini.
Ключевые решения
- faster-whisper INT8
- speaker diarization (WeSpeaker ResNet34, Silero VAD)
- local LLM via Ollama
- golden-set evaluation
- tab audio capture (Web Audio API)
Особенности
Основной конвейер полностью локальный (ASR, диаризация, LLM), аудио не уходит в облако. Полный цикл после протокола: роли, утверждение, контроль поручений, напоминания во входящих. Есть захват звука вкладки онлайн-встречи и golden-тесты по совещаниям.
Стек
Python · FastAPI · Uvicorn · Pydantic · SQLite · FFmpeg · python-docx · ReportLab · Playwright · HTML/CSS/JS
Модели
Whisper large-v3-turbo · Qwen3 4B (Ollama) · gpt-4o-transcribe-diarize · gpt-4.1-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-d5e592cf-daladigital.
README
README.mdAI Протоколист · Самрук-Қазына
От совещания — к проверенному протоколу и контролю поручений.
О проекте
После совещаний секретарям и руководителям приходится вручную разбирать записи, оформлять решения и следить за исполнением. AI Протоколист превращает аудио в расшифровку, краткие итоги и поручения с исполнителями и сроками.
Решение предназначено для секретарей, руководителей и сотрудников государственных и корпоративных организаций. Основной AI-конвейер работает локально: после загрузки моделей аудио не отправляется в облачные AI-сервисы. Перед утверждением результат проверяет человек.
Посмотреть результат без установки
Готовые протоколы можно открыть прямо на GitHub — без запуска приложения и загрузки моделей:
- Модернизация производственной площадки: саммари, решения и 6 поручений с исполнителями и сроками.
- Пилот цифрового документооборота: 6 поручений, риски и реплики-основания.
Это вымышленные учебные примеры, написанные вручную для демонстрации структуры результата. Все примеры.
Что реализовано
- Получение аудио: загрузка MP3, WAV, M4A, MP4, WebM и OGG; запись микрофона; захват звука вкладки онлайн-встречи в Chrome.
- Расшифровка: текст с таймкодами и разделением реплик по голосам; многоязычная модель с поддержкой русского и казахского.
- Анализ: тематический протокол, отдельное саммари, решения и поручения с предложенными исполнителями и сроками.
- Проверка: прослушивание нужного фрагмента, исправление текста, имён и поручений, утверждение протокола.
- Документы: экспорт черновика или утверждённого протокола в PDF и Word.
- Исполнение: статусы поручений, ближайшие сроки и просрочки.
- Уведомления: назначение после утверждения, напоминания за 3 дня до срока и при просрочке — в личных входящих приложения.
- Доступ: роли администратора, секретаря и наблюдателя; общий архив, история изменений и удаление записей администратором.
- Готовая демонстрация: автоматический локальный вход без регистрации, три учебных профиля и примеры протоколов и поручений.
Как работает решение

- Пользователь открывает «Новое совещание», загружает запись или выбирает микрофон / вкладку встречи.
- Приложение подготавливает аудио, распознаёт речь и разделяет реплики по голосам.
- Локальная модель выделяет темы, итоги, решения и поручения.
- Секретарь сверяет черновик с записью, уточняет имена, исполнителей и сроки, затем утверждает протокол.
- Протокол доступен в PDF и Word, поручения — в разделе «Поручения», назначения и напоминания — во входящих выбранных сотрудников.
Технологии и AI-модели
| Компонент | Технологии и назначение |
|---|---|
| Интерфейс | HTML, CSS, JavaScript; браузерные MediaRecorder и Web Audio API для записи и смешивания звука |
| Сервер | Python 3.11–3.12, FastAPI, Uvicorn, Pydantic; HTTP API и очередь обработки |
| Хранилище | SQLite для пользователей, протоколов, поручений и событий; локальные файлы для аудио |
| Обработка аудио | FFmpeg: извлечение звука и приведение записи к единому формату |
| Распознавание | Whisper large-v3-turbo, запуск через faster-whisper на CPU с INT8 |
| Разделение голосов | WeSpeaker ResNet34, Silero VAD, библиотека diarize |
| Анализ содержания | Qwen3 4B (qwen3:4b) через локальный сервис Ollama |
| Экспорт | python-docx для Word, ReportLab для PDF |
Основному приложению не нужен ключ облачного AI API. Отдельный экспериментальный модуль meeting_bot/ использует Playwright и средства захвата аудио; в его облачном режиме предусмотрены OpenAI API, gpt-4o-transcribe-diarize и gpt-4.1-mini. Этот модуль запускается отдельно и не участвует в основном локальном сценарии.
Архитектура проекта
flowchart TD
A[Файл · Микрофон · Вкладка встречи] --> B[Веб-интерфейс]
B --> C[FastAPI · Доступ и очередь обработки]
subgraph LOCAL[Локальный AI-конвейер]
C --> D[FFmpeg · Подготовка аудио]
D --> E[Whisper · Распознавание речи]
D --> F[WeSpeaker + Silero · Разделение голосов]
E --> G[Расшифровка с таймкодами и говорящими]
F --> G
G --> H[Qwen3 4B через Ollama · Итоги и поручения]
end
H --> I[Проверка и утверждение секретарём]
I --> J[Экспорт PDF и Word]
I --> K[Поручения и личные уведомления]
C <--> L[(SQLite и локальные файлы)]
app/static/— страницы приложения, запись аудио и взаимодействие с API.app/main.py,app/auth.py— HTTP API, сессии и проверка прав.app/service.py,app/inference.py— очередь и локальная обработка записи.app/store.py,app/reminders.py— хранение, статусы и напоминания.app/exports.py— формирование PDF и DOCX.app/demo.py— учебные профили и примеры для демонстрации.scripts/— установка, запуск и вспомогательные инструменты.
Установка и запуск
Требования: macOS или Linux, Git, Python 3.11 или 3.12, FFmpeg с ffprobe, Ollama. Для записи вкладки используйте Chrome. На Linux нужен Unicode-шрифт для PDF. Для первой установки требуется интернет и свободное место под модели и записи; рекомендуется от 8 ГБ дискового пространства.
1. Скачайте проект
git clone https://github.com/BAITC-Hacks/hack-d5e592cf-daladigital.git
cd hack-d5e592cf-daladigital
Если проект уже скачан, обновите его через git pull и перезапустите приложение.
2. Запустите Ollama
Откройте установленное приложение Ollama либо выполните в отдельном терминале:
ollama serve
3. Подготовьте модели и запустите приложение
В терминале из папки проекта:
bash scripts/setup.sh
bash scripts/start.sh
Установка создаёт Python-среду, устанавливает зависимости и загружает локальные модели. Для следующих запусков достаточно работающей Ollama и команды bash scripts/start.sh.
4. Откройте приложение
При локальном запуске по умолчанию приложение сразу открывается под секретарём Айгерим Сапаровой — без регистрации, пароля и создания администратора. Данияр Омаров и Мадина Серикова доступны через «Сменить роль» в сайдбаре. Демоданные автоматически создаются в отдельном каталоге demo-data.
Если порт занят, можно использовать PROTOCOL_PORT=8001 bash scripts/start.sh и открыть http://127.0.0.1:8001.
Как проверить решение: сценарий для жюри
Готовый сценарий за 2–3 минуты
- Откройте приложение: выбран профиль секретаря Айгерим Сапаровой.
- В разделе «Протоколы» откройте «[ДЕМО] Протокол для проверки секретарём». Посмотрите текст, итоги и поручение; при необходимости отредактируйте его.
- Утвердите протокол и скачайте PDF или Word.
- Переключитесь в сайдбаре на Данияра Омарова. В «Уведомлениях» появится назначение из утверждённого протокола.
- Откройте поручение из уведомления, отметьте уведомление прочитанным и посмотрите ближайшие и просроченные сроки в разделе «Поручения».
- Переключитесь на Мадину Серикову: её личные входящие содержат назначения для неё.
Учебные примеры написаны вручную и демонстрируют работу интерфейса, экспорта и уведомлений; они не являются результатом распознавания аудио. Готовые образцы документов: PDF и Word.
Обработка своей записи
Под профилем секретаря откройте «Новое совещание» → «Готовая запись», выберите короткое аудио с чётким поручением, например: «Айгерим, подготовьте отчёт к 30 сентября 2026 года». Укажите тему и дату встречи, подтвердите право на загрузку и запустите обработку. После завершения сравните расшифровку и поручение с исходной записью, укажите получателя напоминаний и утвердите протокол. Время обработки зависит от компьютера и длительности аудио.
Данные и интеграции
- Входные данные: аудио и видео пользователя, микрофон, звук выбранной вкладки встречи. Загрузка — до 500 МБ на файл.
- Meet, Zoom, Teams: в основном приложении пользователь сам входит во встречу и разрешает браузеру захват звука. Подключение через официальные API этих платформ не требуется.
- Модели: скачиваются при установке; во время обработки используются локальные веса и локальный API Ollama.
- Хранение: по умолчанию в
~/Library/Application Support/AI-Protokolistна macOS или~/.local/share/ai-protokolistна Linux. Демонстрация используетdemo-data, режим с паролями — отдельный каталогdata. - Учебные данные: вымышленные профили и протоколы; адреса с доменом
.testслужат примерами, письма на них не отправляются. - Дополнительные прототипы: Google Meet и Teams. Облачный режим отдельного бота отправляет аудио в OpenAI и требует API-ключ; основной локальный конвейер этого не делает.
Ограничения текущей версии
- AI готовит черновик: имена, исполнителей, сроки и формулировки необходимо проверить перед утверждением. Качество зависит от языка, шума и пересекающейся речи.
- Обработка выполняется локально; длинные записи на CPU могут занимать значительное время. Очередь обрабатывает записи последовательно.
- Уведомления доступны внутри приложения при работающем сервере. Отправка в email, Telegram и СЭД не реализована.
- Полностью автономное подключение бота не входит в основной сценарий. Отдельные боты экспериментальные и не интегрированы в интерфейс
app/. - Демовход без пароля доступен только с компьютера сервера и предназначен для демонстрационного архива. Корпоративный SSO, шифрование хранилища и промышленная эксплуатация требуют доработки.
- Прототип не заявляет подтверждённую точность на всех типах русской, казахской и смешанной речи; её нужно оценить на материалах пилота.
Развёрнутая версия
Публичный URL развёрнутой версии в репозитории не указан. Жюри может запустить приложение локально по инструкции выше и открыть http://127.0.0.1:8000. Это локальный адрес, а не общедоступная ссылка.
Команда и дальнейшее развитие
У нашей команды есть опыт разработки решений для государственного сектора. Мы готовы продолжить развитие продукта совместно с заказчиком: адаптировать его к рабочим процессам, провести пилот в реальной среде и доработать решение по обратной связи сотрудников.
План деплоя
- Демонстрация: установить приложение и модели на компьютер. Готовые роли и примеры открываются без регистрации; демонстрационное хранилище отделено от рабочего архива.
- Пилот: выделить локальный сервер, установить модели и подключить постоянное хранилище. Запустить рабочий режим через
PROTOCOL_DEMO_MODE=0 bash scripts/start.sh, создать администратора на сервере и выдать роли сотрудникам. - Доступ: настроить внутренний адрес и HTTPS через обратный прокси, ограничить доступ сетью организации или VPN. Деморежим в рабочей среде отключить.
- Эксплуатация: настроить автоматический запуск приложения и Ollama, резервное копирование базы и записей, журналирование и наблюдение за очередью обработки.
- Развитие: провести пилот на реальных совещаниях, улучшить качество распознавания и согласовать интеграции с корпоративным входом и СЭД.
Авторы коммитов
История коммитов
- 2026-09-23 17:57Document the hackathon solution and jury walkthrough in RussianDiaskin
- 2026-09-23 17:55Add synthetic protocols readable on GitHub without AI modelsDiaskin
- 2026-09-23 17:53Open the isolated local demo automatically without registrationDiaskin
- 2026-09-23 17:47Simplify README with launch steps, local models and workflow illustrationDiaskin
- 2026-09-23 17:42Add local accounts, assignment reminders, demo flows and dashboard updatesDiaskin
- 2026-09-23 17:39Improve project README overviewМейрхан
- 2026-09-23 17:25Merge bilingual meeting bot into mainМейрхан
- 2026-09-23 17:20Add bilingual meeting protocols and bot MVPМейрхан
Все коммиты (14)
- 2026-09-23 16:52Keep key-point summary separate after the themed meeting transcriptDiaskin
- 2026-09-23 16:46Export themed draft protocols using the provided document layoutDiaskin
- 2026-09-23 16:30Check assignment coverage and resume analysis without repeated ASRDiaskin
- 2026-09-23 16:25Fix local model recovery, grounded summaries, review and recording flowDiaskin
- 2026-09-23 16:07Implement local meeting protocol assistantDiaskin
- 2026-09-23 14:44Document task assignment scoring formulaМейрхан
Структура репозитория (89 файлов)
.gitignore DEMO.md MEET_MVP.md MVP.md README.md TEST_CASES.md app/__init__.py app/assets/README.md app/assets/protocol-template.docx app/auth.py app/check_ready.py app/cli.py app/config.py app/demo.py app/exports.py app/inference.py app/main.py app/migrate_data.py app/model_files.py app/prepare_models.py app/recording_notice.py app/reminders.py app/service.py app/static/app.js app/static/dashboard.css app/static/images/samruk-hero-mobile.png app/static/images/samruk-hero.png app/static/index.html app/static/styles.css app/store.py docs/demo.md docs/examples/README.md docs/examples/demo.webm docs/examples/sample-protocol.docx docs/examples/sample-protocol.json docs/examples/sample-protocol.pdf docs/illustrations/generation-notes.md docs/illustrations/meeting-workflow.png docs/protocols/01-chemical-industry.md docs/protocols/02-operational-meeting.md docs/protocols/README.md meeting_bot/__init__.py meeting_bot/audio_store.py meeting_bot/capture.py meeting_bot/live.py meeting_bot/meet_client.py meeting_bot/openai_process.py meeting_bot/process.py meeting_bot/protocol.py meeting_bot/server.py meeting_bot/teams_client.py native/mac_audio_capture.swift policy_recording_bridge/RecordingStatusClient.cs policy_recording_bridge/TeamsAudioForwarder.cs process_meet_recording.command requirements-ai-lock.txt requirements-ai.txt requirements-capture.txt requirements-client.txt requirements-diarization.txt requirements-local.txt requirements-lock.txt requirements-openai.txt requirements.txt scripts/evaluate_archive.py scripts/export_example.py scripts/setup.sh scripts/start.sh start_meet_bot.command start_meet_join.command start_meet_login.command start_teams_join.command tests/TEST_PLAN.md tests/evaluate_goldens.py tests/evidence/README.md tests/evidence/meeting_1.json tests/evidence/meeting_2.json tests/goldens/meeting_1.json tests/goldens/meeting_2.json tests/test_app.py tests/test_audio_store.py tests/test_auth.py tests/test_demo.py tests/test_goldens.py tests/test_meet_bot.py tests/test_ready.py tests/test_recording_autostart.cjs tests/test_reminders.py tests/test_security_api.py
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.