КЕЙС // AI-ІНТЕГРАЦІЯ · LLM-01

Довгі відео й записи розмов — у короткі структуровані документи

Це кейс: приклад того, як я проєктую та запускаю AI-інтеграції. Сервіс Transcriber бере довге відео чи аудіозапис — YouTube-лекцію, робочу нараду, інтерв'ю — і повертає готовий документ: конспект, тези або чистий текст.

Сервіс у щоденній роботі на власному GPU, загальнодоступний і поки що безкоштовний. Архітектура, бекенд, ML-пайплайн, інфраструктура, деплой — усе зроблено однією людиною.

.NET 10Claude APIfaster-whisperCUDA / Dockeryt-dlpffmpeg
01 /

Проблема

Знайома ситуація: двогодинна лекція на YouTube, яку все нема коли подивитися; запис наради, який ніхто не переслухає; інтерв'ю, що місяць чекає на розшифровку. Передивлятися — довго. А сама розшифровка — ще не розв'язання: 90 хвилин розмови перетворюються на суцільний масив тексту, з яким незручно працювати. Потрібен не транскрипт, а документ — короткий, структурований, придатний для пошуку.

Є ще дві вимоги. Медіафайли часто конфіденційні — вивантажувати їх у чужі хмари не можна або не хочеться. І обсяги великі: готові онлайн-сервіси розшифровки тарифікують кожну хвилину, тож за регулярної роботи це відчутні гроші. Тому Transcriber збудовано інакше: найважча обробка — розпізнавання мовлення — виконується локально, на власному GPU; назовні йде лише текст розшифровки. У клієнтському проєкті цю межу можна пересунути ще далі — аж до повністю закритого контуру, де й мовна модель працює локально.

PIPELINEaudio → structured document01INGESTweb uploaddrag & dropURL · yt-dlp02NORMALIZEffmpegany format → wav03TRANSCRIBEfaster-whisperown GPU · CUDAlive progress: % · ETA04STRUCTUREClaude APItask templatestext in — doc out05DELIVERweb UI · downloadTXT · MD · PDF · DOCX+ raw transcriptLLM failed?retries → still failing:deliver raw transcript + retry buttondegradation path is designed first:GPU work is never wasted on adownstream LLM failure
Пайплайн: від відео чи аудіо до структурованого документа. Пунктирна гілка — передбачений сценарій обробки збою.
02 /

Як це працює

01

Додавання запису

Два способи додати запис: завантажити файл — аудіо або відео (вебінтерфейс, drag-and-drop) — або вставити посилання, зокрема на YouTube (yt-dlp). З відео виділяється звукова доріжка; ffmpeg зводить будь-який формат до потрібного.

02

Транскрипція

Мовлення розпізнає локальна модель — faster-whisper(large-v3-turbo) — на власному GPU у CUDA-контейнері. Годинне відео обробляється приблизно за 10 хвилин на звичайній ігровій відеокарті; прогрес видно наживо — відсотки, швидкість, залишок часу. Собівартість — фактично електроенергія: близько 0,03 кВт·год на годину запису, тобто частки гривні.

03

Структурування (LLM-етап)

Транскрипт іде у велику мовну модель (LLM) Claude з шаблоном під завдання: очистити текст від слів-паразитів і обмовок, стиснути до тез із рішеннями або розгорнути в докладний конспект — чи виконати довільний промпт користувача; мову результату можна обрати з-поміж понад 25 мов. Шаблон — це пара «промпт + формат результату»: новий тип документа додається без зміни коду.

04

Отримання результату

Готовий документ можна завантажити у форматі TXT, Markdown, PDF або DOCX — поруч завжди лежать сирий транскрипт і оригінальне аудіо. Зареєстровані користувачі мають особистий список файлів; за бажанням результат надходить на email.

03 /

Інженерні рішення

Збій LLM не знищує зроблену роботу

Відмова LLM — передбачений сценарій, а не аварія. Якщо обробка тексту не вдалася навіть після повторних спроб, користувач однаково отримує сирий транскрипт і кнопку «обробити ще раз» — дорога GPU-робота не пропадає через збій наступного етапу. Спроєктувати поведінку в разі відмови ще до основного сценарію — це і є більша частина справжньої LLM-інтеграції.

Собівартість відома наперед

Найдорожча операція — розпізнавання мовлення — виконується на власному обладнанні, тож її гранична вартість — це електроенергія. Платний Claude API отримує лише текст, а не медіафайли; обсяг входу відомий із тривалості запису, вихід обмежено шаблоном — вартість виклику видно наперед. Економіка лишатиметься передбачуваною і зі зростанням обсягів.

Один образ, один деплой

.NET відповідає за API, чергу завдань, файли й профілі; Python — лише за ML (faster-whisper). Усе живе в одному multi-stage Docker-образі: CUDA + .NET + Python, з доступом контейнера до GPU. Жодних мікросервісів там, де вони не потрібні: таку систему одна людина тримає в голові й змінює за лічені години.

Живий прогрес замість порожнього спінера

Довгі GPU-завдання звітують про хід роботи: Python-воркер надсилає структуровані події — відсоток, швидкість, залишок часу — у .NET, а клієнт періодично запитує статус. Користувач бачить рух і не перезавантажує сторінку — а отже, не подвоює навантаження.

COST & DATA BOUNDARYheavy compute stays in-house · only text is billedOWNED INFRASTRUCTUREmarginal cost ≈ electricity · audio never leavesINGESTweb upload · URLffmpeg · yt-dlpaudio · videoGPU TRANSCRIBEfaster-whisperCUDA · Dockerminutes → textSTOREraw transcriptresults · historycompact text onlyno audio crossesthis lineMETERED EXTERNALpay per token · bounded by templateCLAUDE APItemplate-driven promptsstructured outputcost per doc: predictabletoken usage bounded bytemplate design, not by luck
Межа вартості й даних: важкі обчислення лишаються вдома, назовні йде лише текст.
04 /

Стек

Бекенд.NET 10, ASP.NET Core (Razor Pages + Web API)
Розпізнавання мовленняfaster-whisper (large-v3-turbo), CUDA
LLM-етапClaude API, шаблонні промпти
Вхідffmpeg, yt-dlp
ВихідTXT, Markdown, PDF, DOCX; email (Resend)
ІнфраструктураDocker (multi-stage, GPU), Cloudflare Tunnel, GitHub Actions → Docker Hub → auto-deploy
05 /

Результат

Робочий сервіс на власному GPU: вебінтерфейс, загальнодоступний, поки що безкоштовний.

Три готові шаблони обробки плюс довільний промпт; новий тип документа додається без зміни коду.

Годинне відео — близько 10 хвилин обробки; собівартість розшифровки — копійки за запис.

Сьогодні вся розшифровка локальна: медіафайли не залишають сервер, назовні йде лише текст.

спробувати наживо → transcribe.iquesoft.net

06 /

Відомі межі та план розвитку

Сервіс запущено, не чекаючи, доки він стане «ідеальним», — свідомо. Нижче — відомі межі системи і план, як їх усунути. Так само я підходжу до клієнтських проєктів: спершу робоча система, потім масштабування під реальне навантаження.

Черга завдань зараз живе в пам’яті: завдання, що чекали в черзі в момент перезапуску, втрачаються (готові транскрипти й документи зберігаються на диску). Наступний крок — персистентна черга.

Коли власного GPU перестане вистачати — диспетчер завдань, що скеровуватиме частину розшифровок у хмарні сервіси, але лише за явним дозволом користувача: конфіденційні записи оброблятимуться тільки локально.

Білінг через Paddle: мінімальний тариф, що покриває собівартість.

Гнучкий вибір мовної моделі: рівень моделі — за тарифом, резервна модель на випадок збою основної, а для повністю закритого контуру — локальна відкрита модель на кшталт DeepSeek-R1 чи Llama.

Єдиний вхід для всієї екосистеми моїх сервісів: готовий модуль авторизації на фреймворці ABP (стандарт OpenID Connect), із входом через Google чи Facebook.

07 /

Де ця схема повторюється

Схема кейсу переноситься майже без змін: вхідні дані → важка обробка → LLM-етап за шаблоном → структурований результат. Кілька прикладів:

Дзвінки відділу продажу чи підтримки → протоколи, контроль якості, нотатки в CRM.

Робочі наради → протокол із рішеннями й задачами.

Подкасти та вебінари → статті, дайджести, дописи для соцмереж.

Архів інтерв’ю чи лекцій → база знань із пошуком.

Вхідні документи — PDF, скани, листи → структуровані дані у вашій системі.

Маєте записи, відео чи документи, з яких треба дістати користь?

Опишіть задачу своїми словами. Я спроєктую процес обробки під ваш продукт — від вхідних даних до готового результату, з передбачуваною вартістю та продуманою поведінкою в разі збоїв. Технічні деталі узгодимо після першої розмови.