Audio Ai agent Pipeline

від

у

Аудіо-агент на базі штучного інтелекту: конвеєр
https://ift.tt/guXB1o6

Вступ
Голосом керовані AI-агенти традиційно вимагали дорогих хмарних API, стабільного з’єднання з Інтернетом та готовності надсилати чутливу аудіо-ділянку на сторонні сервери. Цей проєкт ламає усталений зразок, створюючи кінцевий процес від голосу до дії локально, з інференсом на вашому комп’ютері. Ви говорите — або завантажуєте аудіофайл — система розпізнає, розуміє, маршрутизовує та виконує дії без виходу за межі вашої машини (за винятком виклику Groq-hosted Whisper на етапі STT). Стек свідомо мінімальний, але готовий до продакшну:
– Whisper Large V3 через Groq API для майже реального часу та високої точності розпізнавання мови в текст
– Llama 3 через Ollama як локальний рушій для інтерпретації наміру та генерації відповідей
– Streamlit як frontend у браузері з преміальним дизайном glassmorphism UI
– Шар інструментів на Python для ізольованого створення файлів, генерації коду, підсумовування та загального чату

У цій статті розглянуто кожен шар конвеєра — як працює кожен компонент, як вони з’єднуються та які рішення дизайну лежать в основі архітектури.

Системна архітектура
Агент слідує строго лінійному конвеєру: аудіо в → текст out → намір out → виконання інструмента → зворотний зв’язок UI. Між етапами немає спільних змінних станів, що полегшує розуміння та розширення системи.

Етап 1 — Вхід аудіо
Frontend підтримує два режими введення:
– Запис мікрофона — кнопка Streamlit st.button запускає виклик Python до sounddevice.rec(). Сирий PCM буфер збирається з частотою 16 кГц (моно), обраною тому, що Whisper навчався на такій частоті, і зберігається як тимчасовий .wav файл за допомогою scipy.io.wavfile.write.
– Завантаження файлу — Streamlit st.file_uploader приймає .wav, .mp3, .m4a та інші звичайні аудіоконтейнери. Дані записуються у тимчасовий файл і далі обробляються так само, як і запис з мікрофона.

Етап 2 — Розпізнавання мови за Whisper Large V3
Чому Whisper Large V3?
Whisper від OpenAI — це енкодер-декодер-трансформер, навчений на 680 000 годах мультимовного, багатозадачного навчального аудіоданих. Варіант Large V3 (1,55 мільярда параметрів) досягає найнижчого показника помилки слів в серії та додає кращу стабільність до шумів та визначення мови порівняно з V2.
Ключові покращення у V3 порівняно з V2:
– Зменшення галюцинацій на тиші або майже тиші сегментах
– Краще обробляє мовне змішування (code-switching) всередині речення
– Посилення пунктуації, що важливо для подальшої NLP
– Вхід у 80-канальний лог-Mel спектрограм для більшої роздільної здатності за частотами
– Інтеграція через Groq API — локальні обчислення з доступом до V3 якості транскрипції з затримкою менше секунди на типових фрагментах голосу
– Контроль людини в ланцюжку (Human-in-the-Loop): транскрипція спочатку відображається у редагуваному полі text_area, що дозволяє користувачу виправити помилки перед виконанням, запобігаючи розповсюдженню хибних намірів через виправлення транскрипції

Етап 3 — Виявлення наміру за Llama 3 (локально)
Чому Llama 3 через Ollama?
Meta’s Llama 3 (8B версія з навчанням за інструкціями) виконується повністю на пристрої через Ollama, який управляє завантаженням моделі, квантизацією (4-біт за замовчуванням) та локальним REST API, що відображає формат OpenAI чат-відповідей.

Переваги використання локального LLM для визначення наміру над іншим хмарним API:
– Конфіденційність — транскрипт ніколи не виходить за межі машини після Groq STT
– Затримка — відсутність мережевого раунду; скорочена обробка на сучасному CPU займає 1–3 секунди
– Вартість — відсутність за-token оплати для високочастотного та короткого контекстного визначення намірів

Етап 4 — Виконання інструментів (tools.py)
Після витягування наміру та даних відправляється простий маршрутизатор match / if-elif в app.py, який викликає відповідну функцію з tools.py. Вивід записується в ізольований каталог output/, щоб уникнути перезапису вихідних файлів у корені проєкту. Кожен інструмент — це тонка обгортка, що формує підказку для Llama 3, викликає ollama.chat() та повертає результат у вигляді рядка. Інструмент write_code додатково зберігає фрагмент коду на диск і повертає шлях до файлу.

Етап 5 — Streamlit UI
Макет
Streamlit вибрано тому, що воно усуває розмежування клієнт-сервер для швидкого прототипування: процес Python одночасно є логікою застосунку і веб-сервером. Інтерфейс користувача використовує власний CSS, вставлений через st.markdown(…, unsafe_allow_html=True) для досягнення ефекту glassmorphism, описаного у README. Це дає користувачам реальний огляд того, на якій стадії конвеєра перебуває процес, що важливо, оскільки етап інференсу Llama 3 може зайняти 2–5 секунд на CPU.

Потік даних — покроково
Ось повна трансформація даних на кожному етапі для зразкової фрази: “Напиши функцію на Python, яка зворотно перетворює рядок”
Дані ілюструються зображеннями, що демонструють перетворення на кожному етапі.

Дизайн рішення та компроміси
Хмарний STT проти повністю локального STT
Запуск Whisper Large V3 локально потребує ≥10 GB VRAM на GPU і додає помітну затримку запуску. Роутинг STT через Groq API забезпечує транскрипцію якості V3 з затримкою менше секунди без відповідних апаратних вимог. Недолік — одна залежність від хмарного сервісу на кожний голосовий взаємодій; для більшої автономії його можна замінити локальною моделлю Whisper.

4-бітова квантизація Llama 3 порівняно з повною точністю
За умовчанням Ollama використовується 4-бітова квантизація (Q4_K_M), що зменшує модель 8B з приблизно 16 ГБ до близько 4,7 ГБ. За такої компресії якість класифікації наміру та короткої генерації коду фактично не відрізняється від повноформатного інференсу. Для довших генерацій коду або більш складного мислення користувачі можуть використати llama3:8b-instruct-fp16 за приблизно втричі більшої потреби пам’яті.

Ізольований каталог вихідних файлів
Усі згенеровані файли зберігаються в output/, а не в корені проєкту. Це запобігає випадковому перезаписуванню вихідних файлів під час задач генерації коду та спрощує очищення. Майбутнім поліпшенням може бути монтування output/ як Docker-тома.

Безстанові функції інструментів
Кожна функція інструменту у tools.py є чистою в сенсі: на вході рядок, на виході — рядок (плюс побічний запис на диск). Це дозволяє окремо тестувати кожен інструмент та легко розширювати — додавання нового наміру вимагає лише: (а) додати мітку наміру до системного підказу, (б) написати нову функцію в tools.py та (в) додати випадок у маршрутизатор.

Висновок
Цей проєкт демонструє, що повністю функціонального, керованого голосом AI-агента можна побудувати з використанням відкритих компонентів та мінімальної інфраструктури. Архітектура навмисно проста — п’ятиетапний лінійний конвеєр, де кожен етап має одну відповідальність та чіткий вхід/вихід. Whisper Large V3 обробляє перцептивну складову (розпізнавання мови), Llama 3 — семантику (розуміння наміру), а Streamlit — UX (реальний зворотний зв’язок) без потреби в JavaScript-білд-році.

Гумані в ланцюжку між STT та LLM — найважливіша характеристика надійності системи: вона визнає, що жодна транскрипційна модель не досконала, і дає користувачу контроль перед виконанням будь-якої незворотної дії. Кодова база має невеликий обсяг для прочитання за день, модульна для швидкого розширення за годину та принципова для безпеки деплою.

HI-FI News
via DEV Community https://dev.to

14 квітня 2026 року, 15:34
Українською. Текст, що підлягає перекладу, лише переведено.

April 12, 2026 at 03:34PM