Довгі відео й записи розмов — у короткі структуровані документи
Це кейс: приклад того, як я проєктую та запускаю AI-інтеграції. Сервіс Transcriber бере довге відео чи аудіозапис — YouTube-лекцію, робочу нараду, інтерв'ю — і повертає готовий документ: конспект, тези або чистий текст.
Сервіс у щоденній роботі на власному GPU, загальнодоступний і поки що безкоштовний. Архітектура, бекенд, ML-пайплайн, інфраструктура, деплой — усе зроблено однією людиною.
Проблема
Знайома ситуація: двогодинна лекція на YouTube, яку все нема коли подивитися; запис наради, який ніхто не переслухає; інтерв'ю, що місяць чекає на розшифровку. Передивлятися — довго. А сама розшифровка — ще не розв'язання: 90 хвилин розмови перетворюються на суцільний масив тексту, з яким незручно працювати. Потрібен не транскрипт, а документ — короткий, структурований, придатний для пошуку.
Є ще дві вимоги. Медіафайли часто конфіденційні — вивантажувати їх у чужі хмари не можна або не хочеться. І обсяги великі: готові онлайн-сервіси розшифровки тарифікують кожну хвилину, тож за регулярної роботи це відчутні гроші. Тому Transcriber збудовано інакше: найважча обробка — розпізнавання мовлення — виконується локально, на власному GPU; назовні йде лише текст розшифровки. У клієнтському проєкті цю межу можна пересунути ще далі — аж до повністю закритого контуру, де й мовна модель працює локально.
Як це працює
Додавання запису
Два способи додати запис: завантажити файл — аудіо або відео (вебінтерфейс, drag-and-drop) — або вставити посилання, зокрема на YouTube (yt-dlp). З відео виділяється звукова доріжка; ffmpeg зводить будь-який формат до потрібного.
Транскрипція
Мовлення розпізнає локальна модель — faster-whisper(large-v3-turbo) — на власному GPU у CUDA-контейнері. Годинне відео обробляється приблизно за 10 хвилин на звичайній ігровій відеокарті; прогрес видно наживо — відсотки, швидкість, залишок часу. Собівартість — фактично електроенергія: близько 0,03 кВт·год на годину запису, тобто частки гривні.
Структурування (LLM-етап)
Транскрипт іде у велику мовну модель (LLM) Claude з шаблоном під завдання: очистити текст від слів-паразитів і обмовок, стиснути до тез із рішеннями або розгорнути в докладний конспект — чи виконати довільний промпт користувача; мову результату можна обрати з-поміж понад 25 мов. Шаблон — це пара «промпт + формат результату»: новий тип документа додається без зміни коду.
Отримання результату
Готовий документ можна завантажити у форматі TXT, Markdown, PDF або DOCX — поруч завжди лежать сирий транскрипт і оригінальне аудіо. Зареєстровані користувачі мають особистий список файлів; за бажанням результат надходить на email.
Інженерні рішення
Збій LLM не знищує зроблену роботу
Відмова LLM — передбачений сценарій, а не аварія. Якщо обробка тексту не вдалася навіть після повторних спроб, користувач однаково отримує сирий транскрипт і кнопку «обробити ще раз» — дорога GPU-робота не пропадає через збій наступного етапу. Спроєктувати поведінку в разі відмови ще до основного сценарію — це і є більша частина справжньої LLM-інтеграції.
Собівартість відома наперед
Найдорожча операція — розпізнавання мовлення — виконується на власному обладнанні, тож її гранична вартість — це електроенергія. Платний Claude API отримує лише текст, а не медіафайли; обсяг входу відомий із тривалості запису, вихід обмежено шаблоном — вартість виклику видно наперед. Економіка лишатиметься передбачуваною і зі зростанням обсягів.
Один образ, один деплой
.NET відповідає за API, чергу завдань, файли й профілі; Python — лише за ML (faster-whisper). Усе живе в одному multi-stage Docker-образі: CUDA + .NET + Python, з доступом контейнера до GPU. Жодних мікросервісів там, де вони не потрібні: таку систему одна людина тримає в голові й змінює за лічені години.
Живий прогрес замість порожнього спінера
Довгі GPU-завдання звітують про хід роботи: Python-воркер надсилає структуровані події — відсоток, швидкість, залишок часу — у .NET, а клієнт періодично запитує статус. Користувач бачить рух і не перезавантажує сторінку — а отже, не подвоює навантаження.
Стек
Результат
Робочий сервіс на власному GPU: вебінтерфейс, загальнодоступний, поки що безкоштовний.
Три готові шаблони обробки плюс довільний промпт; новий тип документа додається без зміни коду.
Годинне відео — близько 10 хвилин обробки; собівартість розшифровки — копійки за запис.
Сьогодні вся розшифровка локальна: медіафайли не залишають сервер, назовні йде лише текст.
Відомі межі та план розвитку
Сервіс запущено, не чекаючи, доки він стане «ідеальним», — свідомо. Нижче — відомі межі системи і план, як їх усунути. Так само я підходжу до клієнтських проєктів: спершу робоча система, потім масштабування під реальне навантаження.
Черга завдань зараз живе в пам’яті: завдання, що чекали в черзі в момент перезапуску, втрачаються (готові транскрипти й документи зберігаються на диску). Наступний крок — персистентна черга.
Коли власного GPU перестане вистачати — диспетчер завдань, що скеровуватиме частину розшифровок у хмарні сервіси, але лише за явним дозволом користувача: конфіденційні записи оброблятимуться тільки локально.
Білінг через Paddle: мінімальний тариф, що покриває собівартість.
Гнучкий вибір мовної моделі: рівень моделі — за тарифом, резервна модель на випадок збою основної, а для повністю закритого контуру — локальна відкрита модель на кшталт DeepSeek-R1 чи Llama.
Єдиний вхід для всієї екосистеми моїх сервісів: готовий модуль авторизації на фреймворці ABP (стандарт OpenID Connect), із входом через Google чи Facebook.
Де ця схема повторюється
Схема кейсу переноситься майже без змін: вхідні дані → важка обробка → LLM-етап за шаблоном → структурований результат. Кілька прикладів:
Дзвінки відділу продажу чи підтримки → протоколи, контроль якості, нотатки в CRM.
Робочі наради → протокол із рішеннями й задачами.
Подкасти та вебінари → статті, дайджести, дописи для соцмереж.
Архів інтерв’ю чи лекцій → база знань із пошуком.
Вхідні документи — PDF, скани, листи → структуровані дані у вашій системі.
Маєте записи, відео чи документи, з яких треба дістати користь?
Опишіть задачу своїми словами. Я спроєктую процес обробки під ваш продукт — від вхідних даних до готового результату, з передбачуваною вартістю та продуманою поведінкою в разі збоїв. Технічні деталі узгодимо після першої розмови.