AAYMA
RU
Войти

SÖZDE

Локальный ассистент совещаний: по аудиозаписи строит транскрипт со спикерами, summary, решения, риски и поручения с ответственными и сроками.

Рабочий MVP
Команда «h3aven» 4💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: h3aven
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP

Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)

Суть

Локальный ассистент совещаний: по аудиозаписи строит транскрипт со спикерами, summary, решения, риски и поручения с ответственными и сроками. Протокол можно редактировать и экспортировать в PDF, DOCX, MD и JSON.

Как устроено

Загрузка аудио → FFmpeg → faster-whisper (large-v3 при GPU от 6 ГБ, иначе small) → диаризация через diarize или pyannote.audio с резервной разметкой по тексту → совмещение сегментов → LLM-анализ через локальную Ollama (например qwen2.5:3b), опционально NVIDIA NIM, с rule-based fallback. Обработка идёт фоновыми задачами FastAPI с этапами. Правки сохраняются, документы генерируются заново через python-docx и ReportLab.

Ключевые решения

  • faster-whisper
  • диаризация спикеров (diarize/pyannote)
  • текстовая диаризация как fallback
  • извлечение поручений LLM
  • rule-based fallback анализ
  • фоновые задачи

Особенности

Полностью локальный контур STT, диаризации и LLM с автоматическим выбором размера Whisper по доступной видеопамяти. Внешний анализатор включается только явным флагом ALLOW_CLOUD_ANALYSIS. Ограничения описаны честно: точность STT и диаризации не заявляется.

Стек

Python · FastAPI · Uvicorn · Pydantic · FFmpeg · Ollama · python-docx · ReportLab · HTML/CSS/JS · Streamlit

Модели

faster-whisper large-v3 · Whisper small · Qwen2.5:3b via Ollama · NVIDIA NIM · pyannote.audio


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-6c526967-h3aven.

README

README.md

SÖZDE — AI Meeting Assistant

Система подготовки протоколов корпоративных совещаний. Превращает запись в транскрипт, краткое содержание, решения и поручения с ответственными и сроками. Предназначена для руководителей и команд, проводящих встречи на русском, казахском и смешанном RU/KZ.

Основной интерфейс — HTML-лендинг с окном Open meeting workspace.

Что реализовано

  • Загрузка MP3, WAV, MP4, M4A, WEBM, OGG, FLAC до 500 МБ и прослушивание записи.
  • Локальное распознавание, разметка спикеров и транскрипт с временными отметками.
  • Извлечение summary, повестки, решений, рисков и поручений с ответственными, сроками и подтверждающими фрагментами.
  • Фоновая обработка с реальными этапами и прошедшим временем; восстановление статуса после обновления страницы при работающем сервере.
  • История встреч, поиск по транскрипту, исправление имён и поручений, контроль статусов.
  • Экспорт PDF, DOCX, Markdown и JSON. После сохранения правок документы формируются заново.
  • Диагностика FFmpeg, GPU и Ollama.

Пользовательский сценарий

  1. Открыть рабочее окно, выбрать запись, нажать Create meeting protocol.
  2. Система подготавливает аудио, распознаёт речь, разделяет спикеров, анализирует содержание и создаёт документы.
  3. В Protocol проверить текст, имена, решения и сроки; исправить ошибки.
  4. Сохранить правки и скачать протокол. Вернуться к встрече через History, обновить статусы в Task control.

Язык и спикеры определяются автоматически. Технические параметры задаются при настройке сервера.

Технологии

КомпонентРеализация
ИнтерфейсHTML, CSS, JavaScript, Fetch API
BackendPython, FastAPI, Uvicorn, Pydantic
Подготовка записиFFmpeg
Распознаваниеfaster-whisper / Whisper
Диаризацияdiarize; опционально pyannote.audio
Анализ текстаЛокальная Ollama, резервный анализ по правилам, опционально NVIDIA NIM
Документыpython-docx, ReportLab
ХранениеФайлы и JSON, без отдельной БД
Дополнительный интерфейсStreamlit в app.py; основной запуск использует HTML + FastAPI

Архитектура

fronttt.html + fronttt.css + fronttt.js
                  │ загрузка / статус / правки / экспорт
                  ▼
              server.py
                  ▼
pipeline/audio_processor.py → stt.py → diarization.py
                  ▼
       transcriber.py: совмещение сегментов
                  ▼
       llm_analyzer.py → export.py
                  ▼
       temp/api/meeting_*/ → результат в браузере

run.py запускает сервер, assets/ содержит ресурсы интерфейса, tests/ и evals/ — проверки и инструменты оценки.

МаршрутНазначение
POST /jobsЗагрузить запись и получить идентификатор фоновой задачи
GET /jobs/{id}Статус и этап
GET /meetingsИстория
GET /meetings/{id}Результат
PUT /meetings/{id}Сохранение summary, поручений и имён
GET /meetings/{id}/download/{kind}PDF, DOCX, Markdown, JSON
POST /transcribeСинхронная обработка для API-клиентов
GET /health, GET /capabilitiesДиагностика и возможности

Установка и запуск

1. Подготовка

Нужны Python (для воспроизведения рекомендуется 3.12), FFmpeg и свободное место для моделей и записей. GPU необязателен. Интернет нужен для установки зависимостей и первоначальной загрузки моделей.

Установите FFmpeg и добавьте его в PATH. На Windows также можно положить ffmpeg.exe в корень проекта.

python --version
ffmpeg -version

Откройте PowerShell в корне проекта, где находятся run.py и requirements.txt.

2. Зависимости

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
Copy-Item .env.example .env

Если .env уже настроен, не копируйте его повторно. Активация виртуального окружения для этих команд не требуется.

3. Анализ текста

Без Ollama и внешних API доступен резервный анализ по правилам. Он не равнозначен полноценному анализу языковой моделью.

Для локального AI-анализа установите Ollama и загрузите одну из предусмотренных кодом моделей, например:

ollama pull qwen2.5:3b
ollama serve

Если служба Ollama уже работает, повторный ollama serve не нужен. Backend использует http://127.0.0.1:11434. Значение OLLAMA_HOST из примера окружения сейчас не переключает этот адрес в основном API.

Базовые параметры в .env:

ALLOW_CLOUD_ANALYSIS=0
DEVICE=auto
OLLAMA_MODEL=auto

Для фоновых задач без явного STT_MODEL выбирается large-v3 при обнаруженном GPU с памятью не менее 6 ГБ, иначе small. Администратор может задать STT_MODEL вручную. Лёгкая модель экономит ресурсы, но качество нужно оценивать на целевых записях.

Опциональный backend pyannote требует зависимостей из requirements-optional.txt, HF_TOKEN и доступа к соответствующим моделям. Для базового запуска токен не обязателен.

4. Запуск

.\.venv\Scripts\python.exe run.py

Откройте http://127.0.0.1:8000 → Open meeting workspace.

API-документация: http://127.0.0.1:8000/docs.

Держите терминал сервера открытым во время обработки. Двойной щелчок по fronttt.html не запускает backend.

Linux/macOS, при установленном FFmpeg:

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
cp .env.example .env
.venv/bin/python run.py

Как проверить решение жюри

  1. Запустите сервер и откройте рабочее окно.
  2. В System readiness → Check readiness проверьте FFmpeg и, если нужен локальный AI-анализ, Ollama.
  3. В New meeting загрузите свою запись. Для быстрой первой проверки удобен фрагмент на 30–60 секунд. Если в корне локальной копии есть MP3, они также доступны в списке примеров; записи не включаются в Git.
  4. Нажмите Create meeting protocol, дождитесь завершения этапов.
  5. В Protocol сопоставьте текст и временные отметки с аудио. Проверьте предупреждения, имена, поручения и сроки.
  6. Исправьте имя или поручение, нажмите Save protocol and regenerate exports, скачайте PDF/DOCX и проверьте наличие правок.
  7. Откройте History и Task control, измените статус поручения и сохраните.

После загрузки запись обрабатывается на сервере: окно можно закрыть или обновить. Перезапуск сервера прерывает незавершённую обработку — потребуется повторная загрузка.

Проверены выдача HTML/CSS/JS и API, сохранение правок и экспорт документов. Жизненный цикл фоновой задачи проверен с имитацией распознавания. Это не подтверждает точность STT/диаризации или скорость на реальных записях; измеренные показатели качества не заявляются.

Данные и интеграции

Входные данные — записи пользователя и, при наличии, локальные примеры в корне проекта. Исходники аудио, промежуточные файлы и протоколы сохраняются в temp/api/. Автоматическая очистка истории не реализована.

STT и голосовая диаризация работают локально. Для работы без сети необходимо заранее загрузить модели и проверить запуск в конкретном окружении.

NVIDIA NIM — необязательный внешний анализатор текста. Он включается только при ALLOW_CLOUD_ANALYSIS=1 и наличии NVIDIA_API_KEY; модель задаёт NVIDIA_MODEL. В этом режиме транскрипт передаётся внешнему сервису, поэтому режим не является полностью локальным. Ключи хранятся в серверном .env, исключённом из Git.

Интеграции Teams, Zoom, Google Meet и СЭД в backend не реализованы. Выгрузка документа не является автоматической интеграцией с СЭД.

Ограничения

  • Первый запуск может скачивать модели. CPU, длинные записи и локальный LLM увеличивают ожидание. Интерфейс показывает этапы, а не точный процент или прогноз завершения.
  • При недоступности голосовой диаризации используется резервная разметка по тексту. Она не является достоверным определением говорящего по голосу.
  • Имена извлекаются из текста и могут исправляться вручную. Биометрическая идентификация не реализована.
  • Резервный анализ по правилам ограничен, особенно на смешанной речи. Относительные сроки могут оставаться в форме «до пятницы».
  • Задачи выполняются в одном процессе. После рестарта незавершённые задачи автоматически не возобновляются; завершённые результаты остаются на диске.
  • Нет авторизации, разграничения доступа и изоляции пользователей. Сервер по умолчанию слушает только 127.0.0.1; версия предназначена для локальной демонстрации.
  • Основной HTML-интерфейс англоязычный. Полная локализация не реализована.
  • Сертификаты безопасности и гарантии точности или производительности не заявляются.

Развёрнутая версия

Подтверждённой ссылки на публичный deployment в проекте нет. Демонстрация доступна локально: http://127.0.0.1:8000 после запуска сервера.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
4
Авторы
2
Файлы
28
Ветки
1

Авторы коммитов

arrmanelo 3Eldos Nuktenov 1

История коммитов

  • 2026-09-23 17:57Merge remote history retaining current SOZDE applicationarrmanelo
  • 2026-09-23 17:57Integrate SOZDE meeting workspace and local processing pipelinearrmanelo
  • 2026-09-23 14:43Build meeting protocol MVPEldos Nuktenov
  • 2026-09-23 14:2912arrmanelo
Структура репозитория (28 файлов)
.env.example
.gitignore
README.md
app.py
assets/sozde.svg
evals/evaluate_results.py
fronttt.css
fronttt.html
fronttt.js
pipeline/__init__.py
pipeline/audio_processor.py
pipeline/diarization.py
pipeline/export.py
pipeline/llm_analyzer.py
pipeline/stt.py
pipeline/text_diarization.py
pipeline/transcriber.py
requirements-optional.txt
requirements.txt
run.bat
run.ps1
run.py
server.py
setup.ps1
test_pipeline.py
tests/__init__.py
tests/test_core.py
transcribe.py

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.