← На главную
Кейс 1

Формирование протоколов совещаний
без галлюцинаций

Запись встречи → транскрибация → структурированный протокол с участниками, решениями и поручениями. Модель не додумывает — только факты из стенограммы.

Полный pipeline

Запись встречи ВКС → ДИОН (ссылка) Скачивание IMAP → browser → ffmpeg OpenRouter: Gemini 3 Flash STT + структурирование за 1 вызов Протокол + DOCX отправка в Telegram Clean Up удаление исходников

⚠️ Проблема

  • У руководителя 15–20 встреч в неделю
  • Протокол оформляется долго, поручения теряются
  • LLM «из коробки» додумывает поручения и сроки
  • Нет единого формата протокола в организации

✅ Решение

  • Автоматический протокол за 1-2 минуты после встречи
  • Строгий промпт без домыслов — если не уверен, пишет «НЕ ОПРЕДЕЛЕНО»
  • Единый шаблон DOCX по стандарту организации
  • Верификация человеком перед рассылкой

Кейсы решения

# ─── ВХОД ───
Источники:
  • Аудиозапись встречи (MP3, WAV)
  • Видеозапись (MP4, WEBM) — ссылка на ДИОН
  • (опционально) готовая стенограмма
  • (опционально) шаблон протокола организации

# ─── ПАЙПЛАЙН ───
Шаг 1. Извлечение аудио
  IF видео: FFmpeg — извлечение аудиодорожки
  IF ссылка ДИОН: browser_automation → авторизация → download

Шаг 2. Очистка аудио
  → FFmpeg: удаление шумов, пауз, нормализация

Шаг 3. STT + структурирование (1 вызов OpenRouter)
  → Gemini 3 Flash: input_audio + строгий system prompt
  → Результат — JSON:
    {
      "участники": [...],
      "повестка": "...",
      "решения": [...],
      "поручения": [
        { "кто": "...", "что": "...", "срок": "..." }
      ],
      "неопределено": [...]  # то, в чём модель не уверена
    }

Шаг 4. Генерация DOCX
  → Шаблон организации
  → Заполнение: участники, повестка, решения, поручения
  → Сохранение в /tmp/protocol-{date}.docx

Шаг 5. Отправка
  → Telegram: файл + краткая сводка
  → (опционально) Email рассылка участникам

Шаг 6. Clean Up
  → Удаление исходного видео/аудио
  → Удаление промежуточных файлов

# ─── СТРОГИЙ SYSTEM PROMPT (ключевой элемент) ───
Правила работы LLM:
  1. НЕ выдумывай информацию, которой нет в стенограмме
  2. Если в стенограмме нет ответственного — "НЕ УКАЗАН"
  3. Если нет срока — "НЕ УКАЗАН"
  4. Если сомневаешься в формулировке — процитируй дословно
  5. НЕ добавляй поручения, которые не были явно озвучены
  6. Если участник не представился — "НЕ ОПРЕДЕЛЁН"
  7. Решения отделяй от обсуждений — только то, по чём пришли к консенсусу

Пример работы

🎙 Исходная стенограмма

— Значит так, по lендингу.
— Сергей, жду макет в пятницу.
— Дим, тексты нужны к четвергу.
— Владимир, как там доступ к API?
— Надо бы согласовать бюджет.
— По CRM — вопрос сняли.
— В пятницу встретимся ещё раз.

📋 Сформированный протокол

УчастникиНЕ ОПРЕДЕЛЕНЫ

Решения
  • Вопрос по CRM закрыт

Поручения
  ▸ Макет лендинга
    → Ответственный: Сергей
    → Срок: пятница
    → Статус: ⚠️ требуется уточнение

  ▸ Подготовка текстов
    → Ответственный: Дмитрий
    → Срок: четверг
    → Статус: ожидает

  ▸ Доступ к API
    → Ответственный: Владимир
    → Срок: НЕ УКАЗАН
    → Статус: ожидает

Не определеноБюджет: неясно, кто согласуетУчастники встречи не представились

Как мы исключаем галлюцинации

🔒 Constraint-based промптинг

Вместо:
«Составь протокол встречи»

Используем:
«На основе стенограммы заполни
структуру. Правила:
- НЕ ДОДУМЫВАЙ
- НЕ ДОБАВЛЯЙ отсутствующее
- "НЕ УКАЗАНО" если нет данных
- Цитируй дословно при сомнении»

👤 Human-in-the-loop

  • Протокол не отправляется автоматически
  • Сначала показывается черновик пользователю
  • Пользователь подтверждает или правит
  • Только после подтверждения → DOCX + рассылка
  • Каждое исправление → обратная связь для улучшения промпта

🎯 Результат тестирования

На тестовых записях (3 встречи по 15-45 минут) — нулевое количество выдуманных поручений. Модель честно пишет «НЕ ОПРЕДЕЛЕНО» в 100% случаев, когда данные отсутствуют в исходной записи.

Технологический стек

КомпонентТехнологияНазначение
STT + LLMOpenRouter: Gemini 3 Flash / Nemotron 3 Nano Omni (free)Транскрибация + структурирование одним вызовом
ОркестрацияHermes AgentУправление пайплайном, cron, интеграции
Извлечение аудиоFFmpegВидео → аудиодорожка
Автоматизация браузераBrowser UseСкачивание с ДИОН
ПочтаIMAP (himalaya / python imaplib)Мониторинг входящих писем
Генерация DOCXpython-docxШаблон протокола
ДоставкаTelegram API / SMTPОтправка протокола