О проекте
Команда: Y
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
Локальное приложение автопротоколирования совещаний: по аудио/видео строит транскрипт с разделением говорящих, извлекает поручения, ответственных, сроки и саммари с цитатами-источниками, позволяет править и выгружает протокол DOCX по двум шаблонам.
Как устроено
FFmpeg нормализует запись, faster-whisper (Whisper small) распознаёт речь, pyannote (community-1) выполняет диаризацию, слова выравниваются с интервалами говорящих. Локальный Qwen3-4B через llama.cpp извлекает поручения, сроки, показатели и саммари с проверкой, что цитата есть в записи; клик по цитате проигрывает фрагмент. Ручные правки и имена спикеров сохраняются в SQLite с историей версий, экспорт через python-docx. Всё работает на CPU без облачных API, сервер слушает только 127.0.0.1.
Ключевые решения
- faster-whisper
- pyannote диаризация
- выравнивание слов по спикерам
- извлечение поручений с валидацией цитат
- llama.cpp
- offline guard
- WER/CER оценка
Метрики
WER/CER 0% на синтетической записи 17 с; полный проход 3 мин 41 с на CPU; 158 тестов
Особенности
Полностью локальный контур для закрытых совещаний: установщики в один клик под Windows/macOS/Linux, сетевой guard для проверки отсутствия внешних вызовов, каждое поручение привязано к проигрываемой цитате. Казахская и смешанная речь пока не проверены.
Стек
Python 3.11 · FastAPI · SQLite · python-docx · uv · GitHub Actions · HTML/JS
Модели
Whisper small (faster-whisper) · pyannote community-1 · Qwen3-4B (llama.cpp)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-9e0cb6e2-y.
README
README.mdJazAI — локальное автопротоколирование совещаний
Проект для HackAlem AI. Вы загружаете запись совещания, а JazAI на вашем компьютере:
- распознаёт речь и делит её на реплики разных людей с таймкодами;
- находит поручения, ответственных, сроки и составляет краткое саммари;
- к каждому поручению прикладывает цитату из записи, по клику она проигрывается;
- даёт всё проверить и исправить, затем выгружает протокол в Word (DOCX).
Распознавание и анализ выполняют локальные модели, без облачных API. Полная проверка закрытого контура при запрете внешней сети на уровне ОС пока не завершена.
Как запустить — 3 шага
Шаг 1. Скачайте проект
Нажмите зелёную кнопку Code → Download ZIP вверху этой страницы и распакуйте архив. Или через терминал:
git clone https://github.com/BAITC-Hacks/hack-9e0cb6e2-y.git
Шаг 2. Запустите файл для своей системы
| Система | Что сделать |
|---|---|
| Windows | Дважды щёлкните start-windows.bat |
| macOS | Дважды щёлкните start-macos.command. Если macOS не даёт открыть файл, нажмите на него правой кнопкой → Открыть |
| Linux | Откройте терминал в папке проекта и выполните bash start-linux.sh |
Скрипт установит Python 3.11 и библиотеки, скачает модели. Для автоматической установки FFmpeg на Windows нужен winget, на macOS — Homebrew, на Linux — поддерживаемый пакетный менеджер и права установки. Если FFmpeg и ffprobe уже доступны, этот шаг пропускается.
Шаг 3. Один раз откройте доступ к модели на Hugging Face
Модель, которая различает голоса (pyannote), бесплатная. Но её авторы выдают её только после согласия с условиями. Скрипт остановится и подскажет, что делать:
- Откроется страница модели. Войдите или зарегистрируйтесь на Hugging Face, это бесплатно.
- Заполните короткую форму и примите условия.
- Вернитесь в окно скрипта и нажмите Enter.
- Скрипт попросит войти в тот же аккаунт. Следуйте подсказке в окне: откройте ссылку и подтвердите вход.
Готово. Когда всё скачается, браузер откроется сам на странице JazAI. Обычно это адрес http://127.0.0.1:8000.
⏱ На первый запуск ориентировочно заложите 15–40 минут или больше. Нужно скачать несколько ГБ; время и объём зависят от системы, скорости интернета и уже установленных компонентов. Для следующих запусков используйте тот же файл. Готовые модели скачивать заново не нужно; время открытия зависит от компьютера и состояния окружения. Не закрывайте окно скрипта, пока пользуетесь приложением. Чтобы остановить, нажмите Ctrl+C или закройте окно.
Что нужно компьютеру
| Требование | |
|---|---|
| Система | Windows 10/11 (x64), macOS 14+ на Apple Silicon (M1 и новее), Linux x86_64 или ARM64 (Ubuntu 22.04+, Debian 12+, Fedora и похожие) |
| Память | 16 ГБ RAM: на такой машине проект проверен |
| Диск | ~12 ГБ свободного места |
| Интернет | Нужен только при первом запуске |
| Видеокарта | Не нужна, всё работает на процессоре |
| Аккаунт | Бесплатный аккаунт Hugging Face |
Особенности систем:
- Windows: если FFmpeg ещё не установлен, нужен winget из приложения «Установщик приложений» (App Installer). Если winget отсутствует, установите его или FFmpeg вручную по подробному руководству.
- macOS: для установки FFmpeg нужен Homebrew. Если его нет, скрипт подскажет. Intel Mac не поддерживается, потому что PyTorch для них больше не выпускается.
- Linux: при установке FFmpeg система может спросить пароль администратора (sudo).
Как проверить основной сценарий
- Возьмите запись на 30–60 секунд, где говорят 2–3 человека (MP3 или WAV).
- На странице JazAI введите название встречи, выберите файл и поставьте галочку согласия.
- Нажмите «Загрузить и обработать» и дождитесь текста с разбивкой по говорящим. На короткой записи обработка может занять несколько минут; время зависит от процессора, свободной памяти и длительности записи.
- Нажмите на таймкод любой реплики, и запись начнёт играть с этого места.
- В блоке «Кто говорит» впишите известные вам имена вместо
SPEAKER_00. Для каждого введённого имени отметьте «Подтверждаю соответствие имени этому голосу», затем нажмите «Сохранить изменения». Без подтверждения имя не сохранится; неизвестные имена оставьте пустыми. - Нажмите «Составить поручения и саммари» и дождитесь результата. Анализ на CPU может занять несколько минут или дольше; измеренные примеры приведены в отчёте.
- Проверьте поручения, ответственных и сроки по цитатам-источникам. После исправлений или отметок проверки нажмите «Сохранить поручения и итоги» и дождитесь подтверждения сохранения. Пока есть несохранённые изменения, скачивание DOCX недоступно.
- Выберите шаблон и нажмите «Скачать протокол DOCX». Файл открывается в Word или LibreOffice.
Своей записи нет? На Windows можно создать синтетическую командой .\scripts\synthesize_smoke.ps1. Подробности в руководстве.
Если что-то пошло не так
| Что видите | Что сделать |
|---|---|
| Скрипт остановился с сообщением «ОШИБКА» | Прочитайте подсказку над ней и запустите тот же файл снова: готовые шаги повторно не выполняются |
| Оборвалось скачивание | Запустите файл ещё раз, загрузка продолжится |
| Ошибка 401/403 при скачивании pyannote | Условия модели приняты в другом аккаунте, не в том, куда выполнен вход. Выполните .venv/bin/hf auth login --force (Windows: .venv\Scripts\hf.exe auth login --force) и запустите файл снова |
| Windows: «Система Windows защитила ваш компьютер» | Нажмите Подробнее → Выполнить в любом случае |
| Браузер не открылся | Откройте адрес, который скрипт напечатал в окне, например http://127.0.0.1:8000 |
| Порт 8000 занят | Ничего делать не нужно: скрипт сам возьмёт следующий свободный порт и напечатает адрес |
| Обработка идёт очень долго | Начните с короткой записи на 30–60 секунд. Ограничения: до 10 минут и до 250 МБ |
Больше случаев описано в подробном руководстве.
Что работает и что ещё нет
| Возможность | Статус |
|---|---|
| Загрузка аудио/видео через браузер | ✅ проверены MP3, WAV и синтетическое MP4 |
| Распознавание речи (Whisper small) | ✅ русский язык проверен; казахский и смешанный ещё проверяются |
| Разделение говорящих (pyannote) | ✅ |
| Имена участников и ручные исправления с историей версий | ✅ |
| Поручения, ответственные, сроки, саммари с цитатами (Qwen3-4B) | ✅ черновик, который проверяет человек |
| Экспорт протокола DOCX по двум шаблонам | ✅ |
| Экспорт PDF | ❌ пока нет |
| Подключение к Zoom / Teams / Meet | ❌ пока нет, вход — файл записи |
Все выводы модели — черновик. Каждое поручение нужно проверить по цитате-источнику, прежде чем отправлять протокол.
Свежий полный проход «аудио → текст → поручение → ручная правка → оба DOCX» проверен на синтетической записи 17 секунд: 3 минуты 41 секунда на CPU. Для этого примера WER/CER равны 0%; качество настоящих встреч, KK и смешанной речи требует отдельной оценки. Измерения и команды повторной проверки.
Полностью проверенный путь — Windows 10 x64. Скрипты для macOS и Linux используют те же зафиксированные версии библиотек и моделей, но на этих системах полный прогон ещё не выполнялся.
Для технической проверки
- Подробное руководство: ручная установка по шагам, полный сценарий, настройки
.env, API и измерения. - Архитектура, модели и лицензии, фазы реализации.
- Отчёты о проверках: ML-прогоны, web-конвейер, поручения и саммари, редактор, экспорт DOCX.
- Сквозной прогон и качество: 158 тестов, обработка тишины, WER/CER и границы проверки сети.
Запустить тесты после установки:
uv run --frozen pytest -q
uv run --frozen ruff check .
Стек: Python 3.11, FastAPI, SQLite, faster-whisper, pyannote.audio, llama.cpp + Qwen3-4B, python-docx. Docker, Node.js и облачные ключи не нужны. Сервер слушает только 127.0.0.1 и недоступен из сети.
Авторы коммитов
История коммитов
- 2026-09-23 17:55style: brighten the JazAI interface colorsEricSpringfield01
- 2026-09-23 17:50docs: clarify setup prerequisites and review steps before DOCX exportye.abuov
- 2026-09-23 17:45docs: publish reproducible acceptance results and jury run instructionsye.abuov
- 2026-09-23 17:43test: add real-model acceptance, transcription metrics and network guardsn.yerkanat
- 2026-09-23 17:43fix: stop silent recordings early and clarify pipeline errorsn.yerkanat
- 2026-09-23 17:24feat: add analysis review editor and template-based DOCX downloadsye.abuov
- 2026-09-23 17:24docs: document review workflow and validated DOCX exportye.abuov
- 2026-09-23 17:24feat: extract meeting indicators and problems with source validationn.yerkanat
Все коммиты (30)
- 2026-09-23 17:24feat: persist analysis reviews and export versioned DOCX templatesn.yerkanat
- 2026-09-23 17:20docs: add one-click launchers and a simple jury READMEEricSpringfield01
- 2026-09-23 16:19docs: document local analysis setup and phase four validationye.abuov
- 2026-09-23 16:19feat: display meeting actions and summaries with source playbackye.abuov
- 2026-09-23 16:18feat: persist analysis jobs and expose revision-aware APIn.yerkanat
- 2026-09-23 16:18feat: add local meeting extraction with evidence validationn.yerkanat
- 2026-09-23 15:51docs: document jury setup and manual review workflowye.abuov
- 2026-09-23 15:51feat: add speaker mapping and transcript editing interfaceye.abuov
- 2026-09-23 15:50feat: persist manual transcript reviews with revision historyn.yerkanat
- 2026-09-23 15:16feat: align transcript words with speaker intervalsEricSpringfield01
- 2026-09-23 15:16feat: add recording upload API and durable processing workerEricSpringfield01
- 2026-09-23 15:16feat: add JazAI upload and transcript review interfaceEricSpringfield01
- 2026-09-23 15:16docs: describe web pipeline setup and phase two validationEricSpringfield01
- 2026-09-23 14:55phase2ynurmakh
- 2026-09-23 14:45feat: add local Whisper transcription probe and model preparationEricSpringfield01
- 2026-09-23 14:45feat: add local community-1 speaker diarization probeEricSpringfield01
- 2026-09-23 14:45docs: record phase one validation results and specification reviewEricSpringfield01
- 2026-09-23 14:45build: lock optional speech recognition and diarization dependenciesEricSpringfield01
- 2026-09-23 14:11docs: remove introductory preamble from autoprotocol promptEricSpringfield01
- 2026-09-23 14:10chore: scaffold local autoprotocol infrastructure and implementation planEricSpringfield01
- 2026-09-23 13:59docs: describe meeting protocol MVPynurmakh
- 2026-09-23 13:55docs: add meeting auto-protocol implementation promptEricSpringfield01
Структура репозитория (103 файлов)
.env.example .gitattributes .github/workflows/ci.yml .gitignore .python-version AUTOPROTOCOL_PROMPT.md README.md data/.gitkeep docs/ALIGNMENT.md docs/ARCHITECTURE.md docs/DETAILED_GUIDE.md docs/IMPLEMENTATION_PHASES.md docs/MANUAL_REVIEW.md docs/MODELS.md docs/PHASE_1_REPORT.md docs/PHASE_2_REPORT.md docs/PHASE_4_REPORT.md docs/PHASE_5_REPORT.md docs/PHASE_6_REPORT.md docs/PHASE_7_REPORT.md docs/SPEC_REVIEW.md docs/VERIFICATION.md docs/diarization-model-manifest.json docs/docx-template-manifest.json docs/evaluation/e2e-video-20260923.json docs/evaluation/e2e-wav-20260923.json docs/evaluation/ru-smoke-20260923-hypothesis.json docs/evaluation/ru-smoke-20260923-manifest.json docs/evaluation/ru-smoke-20260923-metrics.json docs/extraction-evaluation-v3.json docs/extraction-evaluation.json docs/llm-model-manifest.json docs/stt-model-manifest.json models/README.md phase2.md pyproject.toml scripts/check_docx_layout.py scripts/check_end_to_end.py scripts/check_offline_guard.py scripts/check_review_browser.py scripts/evaluate_extraction.py scripts/evaluate_transcription.py scripts/offline_guard/USAGE.md scripts/offline_guard/sitecustomize.py scripts/prepare_diarization.py scripts/prepare_docx_templates.py scripts/prepare_llm.py scripts/prepare_stt.py scripts/run.ps1 scripts/setup.ps1 scripts/start_unix.sh scripts/start_windows.ps1 scripts/synthesize_smoke.ps1 src/autoprotocol/__init__.py src/autoprotocol/analysis.py src/autoprotocol/analysis_review.py src/autoprotocol/config.py src/autoprotocol/diagnostics.py src/autoprotocol/evaluation.py src/autoprotocol/export_docx.py src/autoprotocol/jobs.py src/autoprotocol/launch.py src/autoprotocol/main.py src/autoprotocol/media.py src/autoprotocol/pipeline/README.md src/autoprotocol/pipeline/__init__.py src/autoprotocol/pipeline/align.py src/autoprotocol/pipeline/diarize.py src/autoprotocol/pipeline/extract.py src/autoprotocol/pipeline/transcribe.py src/autoprotocol/review.py src/autoprotocol/storage.py src/autoprotocol/templates/protocol-1.docx src/autoprotocol/templates/protocol-2.docx src/autoprotocol/web/static/app.css src/autoprotocol/web/static/app.js src/autoprotocol/web/templates/index.html src/autoprotocol/worker.py start-linux.sh start-macos.command start-windows.bat tests/fixtures/extraction_cases.json tests/fixtures/extraction_ru.json tests/fixtures/report_cases.json tests/fixtures/ru_smoke.txt tests/fixtures/schema_v5.sql tests/fixtures/transcription_manifest.json tests/test_align.py tests/test_analysis.py tests/test_analysis_review.py tests/test_diarize.py tests/test_evaluate_transcription.py tests/test_export_docx.py tests/test_extract.py tests/test_infrastructure.py tests/test_jobs.py tests/test_launch.py tests/test_media.py tests/test_offline_guard.py tests/test_review.py tests/test_transcribe.py tests/test_upload.py uv.lock
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.