Головна / Статті

Агенти голосу GPT-Live-1: сеанси, режими делегування та реальні витрати на телефонні лінії.

Практична екскурсія по повнодуплексній моделі голосу OpenAI: як працює сеанс, відповіді проти делегування клієнтом, розрахунок витрат та підводні камені в документації.

Видавець: REACTAPP.TOP8 хв читання1874 слів

Джерела: How to Use GPT-Live-1: Build a Voice Agent That Listens While It Talks

Кожен, хто телефонував до ресторану та потрапляв на голосового бота, знає цей момент. Ви щось кажете, настає пауза, а потім бот починає відповідати на запитання, яке ви поставили п’ять секунд тому, саме тоді, коли намагаєтесь виправитися. Більшість людей у підсумку натискають 0, щоб поговорити з людиною.

Цей незручний ритм є частиною звичайного дизайну. Класичний голосовий бот чекає, поки ви закінчите говорити, перетворює аудіо на текст, обмірковує відповідь, знову перетворює її на мову та відтворює. Ніхто не може перекристи іншого.

GPT-Live-1 — це спроба OpenAI створити інший підхід. Це модель, яка лежить в основі ChatGPT Voice та доступна через API; вона слухає під час розмови. На цій сторінці розглядається, що робить її унікальною, як відбувається сеанс, як вона передає складні запитання на бекенд-модель та скільки коштуватиме невелика телефонна лінія.

Що таке GPT-Live-1

Це модель голосу з повнодуплексним зв’язком. Повнодуплексний зв’язок означає, що обидві сторони можуть говорити одночасно, як під час звичайного телефонного дзвінка. Якщо абонент перериває та пропонує: «Власне, нехай буде чотири особи», модель зупиняється, коригується та продовжує роботу.

Модель також залишає складні обчислення комусь іншому. Кожного разу, коли для виконання запиту потрібні значні зусилля — чи то пошук, перевірка в системі бронювання чи ретельне міркування — завдання передається окремій моделі на сервері. У матеріалах від OpenAI зазначено затримку у чергуванні приблизно 0,8 секунди, що є покращенням порівняно з приблизно 1,4 секунди у попередній моделі голосу. Вважайте це даними від виробника.

Практичним наслідком є те, що функції голосу та обробки інформації стають окремими завданнями. Голос відповідає за розмову, а серверна частина — за міркування та використання інструментів.

Делегування: голос, який говорить, та „мозок“, який думає

Цей процес передачі завдань — це те, що OpenAI називає делегуванням. Постійно, протягом дрібних проміжків часу, модель голосу вирішує, чи залишатися мовчазною та слухати, зупинитися, говорити чи передати завдання на обробку на бекенд. Дзвінок ніколи не заморожується під час виконання цього завдання, адже голос може сказати швидко «дозвольте перевірити» та продовжити розмову.

Уявіть собі абонента, який запитує у черзі ресторану, чи є вільний столик на чотирьох о 7:30 у п’ятницю. Модель каже «дозвольте перевірити», надсилає запит про наявність місць на бекенд та повідомляє абоненту результат, як тільки він повертається.

Цей розподіл також вирішує проблему обмеженого охоплення інформацією. Згідно зі сторінкою моделі, знання моделі голосу закінчуються 31 липня 2025 року, тому будь-яка актуальна інформація все одно мусить надходити з бекенду.

Початок роботи голосової сесії

Варіанти підключення — це WebRTC для браузерних додатків, WebSockets для аудіо з сервера та SIP-телефонія для справжніх телефонних номерів. Який би варіант ви не обрали, події залишаються схожими, тому нижче наведені відповідні кроки.

Крок 1: зберігати ключ API на сервері

Тримайте ключ подалі від браузерів. Ваш власний надійний сервер створює сеанс, тоді як браузер відповідає лише за мікрофон та динамік. Потрібен платний акаунт, оскільки безкоштовний тариф не підтримується, а обмеження на кількість одночасних прямих сеансів зростають з рівнем вашого використання.

Крок 2: запустити сеанс

Після підключення ви надсилаєте одну подію session.start, яка містить ваші налаштування.

{
  "type": "session.start",
  "session": {
    "model": "gpt-live-1",
    "instructions": "Be concise and ask before taking an external action.",
    "audio": { "output": { "voice": "marin" } },
    "delegation": { "type": "client" }
  }
}

Ця подія вибирає модель, надає інструкції, обирає голос та визначає, хто виконуватиме роботу на сервері. Відкладіть вимову, поки не повернеться значення session.started. Як тільки сесія розпочинається, модель, інструкції та голос зафіксовуються, тому подальші правила додаються через session.instructions.append, а не замінюють початковий текст.

Крок 3: трансляція аудіо в обох напрямках

За допомогою WebRTC браузер сам керує аудіо. Через WebSockets ви надсилаєте невеликі фрагменти через події session.input_audio.append. Формат є суворо визначеним: сире моно-аудіо у форматі 16 біт PCM, закодоване у форматі base64, без заголовка WAV, з частотою дискретизації, встановленою під час запуску (стандартно 24 кГц). Голос моделі повертається таким самим чином, через події session.output_audio.delta. Якщо ваше вхідне аудіо має іншу частоту дискретизації, переробіть його самостійно, адже зміна налаштувань формату не перетворює ваші байти.

Крок 4: читання транскрипцій

Текст у реальному часі від обох сторін надходить через події session.input_transcript.delta та session.output_transcript.delta. Інформації про завершення черги мовлення немає, оскільки обидві сторони можуть говорити одночасно. Якщо ваш додаток потребує організованих записів для журналів, групуйте фрагменти у себе.

Крок 5: чисте закриття

Надішліть session.close та продовжуйте читати, поки не з’явиться session.closed. Ця остання подія містить дані про обсяг використання, за які буде нараховано плату. Якщо з’єднання просто обірветься до її надходження, підтвердження обсягу використання не буде, що має значення під час узгодження рахунку.

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

Передача роботи на бекенд

Тут GPT-Live-1 перестає бути приємним голосом та стає корисним агентом. Під час початку сеансу обирається один із двох режимів делегування, і його не можна змінити посеред процесу. Щоб змінити режим, потрібно розпочати новий сеанс.

Варіант А: Делегування відповідей

Ви вказуєте назву моделі Responses, до якої має звертатися голос, та інструменти, які він може використовувати. Конфігурація знаходиться в об’єкті сеансу разом із назвою моделі.

"delegation": {
  "type": "responses",
  "responses": {
    "model": "gpt-5.5",
    "instructions": "Use tools when current information is required.",
    "tools": [{ "type": "web_search" }],
    "tool_choice": "auto"
  }
}

З того моменту запит абонента, який потребує пошуку, обробляється бекендом, а результат надсилається у поточну розмову. Для користувацьких функцій ситуація інша. Функція на кшталт check_table не виконується бекендом. Ваш додаток отримує виклик, виконує функцію, повертає результат та потім просить бекенд продовжити роботу.

Уявіть собі, що абонент запитує, чи буде дощ у п’ятницю ввечері, адже група може сидіти на вулиці. Бекенд виконує пошук в Інтернеті, система голосу повідомляє, що очікується легкий дощ після шостої, тож краще залишитися в приміщенні, і абонент не залишається у довгій тиші.

Варіант B: делегування клієнтом

Тут ваш власний додаток виступає бекендом. Коли моделі потрібна допомога, ви отримуєте подію session.delegation.created із ідентифікатором. Ви виконуєте роботу на свій розсуд та надсилаєте відповідь разом із цим же ідентифікатором.

{
  "type": "session.commentary.append",
  "delegation_id": "item_delegation_123",
  "content": "Table for 4 is confirmed at 7:30 pm Friday."
}

Повідомлення-коментар означає, що модель має прочитати текст вголос. Якщо модель має щось знати тихо, замість цього використовується session.thinking.append. Кожне повідомлення може містити близько 500 токенів. У принципі, обробник клієнта може передати завдання фреймворку агентів на ваш вибір, проте така комбінація потребує окремих тестів перед тим, як покладатися на неї.

Розумним підходом є початок із керованої делегації відповідей та перехід до делегації на рівні клієнта, коли знадобиться більший контроль над дозволами, підтвердженнями чи самим процесом роботи.

Яка це коштує

Шар голосу коштує 0,05 долара за хвилину, рахується за секунду. Це дорівнює 3 доларам на годину або 72 доларам на день для лінії, яка працює цілодобово. Бекенд-моделі та інструменти оплачуються окремо, тож фактична сума залежить від того, як часто дзвінки потребують допомоги.

Приклад із припущеними цифрами:

  • Припустимо, що до ресторанної лінії щомісяця надходить 2 000 дзвінків по 3 хвилини кожен. Це 6 000 хвилин, тож лише витрати на голосовий зв’язок становлять 6 000 на 0,05 долара, тобто 300 доларів.
  • Далі припустимо, що на кожен дзвінок відбувається два передачі даних, кожна з яких вимагає приблизно 3 000 вхідних та 300 вихідних токенів. Вартість обробки на бекенді становить 10 доларів за мільйон вхідних та 50 доларів за мільйон вихідних токенів. Одна передача коштує 0,03 долара плюс 0,015 долара, тобто 0,045 долара. Дві передачі коштують 0,09 долара за дзвінок, тож 2 000 дзвінків додають ще 180 доларів.
  • Загальна сума становить приблизно 480 доларів на місяць, або близько 24 центів за дзвінок.

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

Деталі, які пропускаються у постах про запуск

Переривання не скасовує виконання завдання

Згідно з документацією, припинення мовлення асистента не автоматично зупиняє роботу серверної частини. Абонент, який каже «не важливо», все одно може отримати результат пошуку чи бронювання, якщо тільки ваш додаток це не зупинить. Це не має значення для пошуку погоди, але є серйозною проблемою у випадку команди «забронювати» за якою слідує «чекайте, ні».

Отримано, але не почуто

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

Цифри тестування варіюються залежно від джерела

Опубліковані показники продуктивності моделі у завданнях обслуговування клієнтів відрізняються між власними публікаціями OpenAI та прес-релізами. У будь-якому разі зростання продуктивності порівняно зі старішою моделлю є значним, але це результати, надані виробником, а незалежних тестів майже немає. Історії клієнтів, наприклад, коли компанія з навчання мови повідомляє про значно менше перерв під час перерв у мисленні учнів, є анекдотами, а не дослідженнями.

Тихий контекст — не надійне місце для секретів

Будь-що, що потрапляє через session.thinking.append, все одно може вплинути на подальшу розмову. Не включайте до цього номери рахунків та приватні нотатки.

Коли це підходить, а коли — ні

Це підходить:

  • Для телефонних ліній для бронювання, замовлень та простої підтримки
  • Для додатків для навчання, де користувачі зупиняються та думають між реченнями
  • Для команд, які хочуть замінити складну систему з трьох окремих моделей

Обережно ставіться до:

  • Дзвінків, де одна неправильна дія має великі наслідки, наприклад платежів
  • Продуктів, які потребують індивідуальних голосів бренду прямо зараз, оскільки вони проходять окрему процедуру схвалення
  • Будь-чого, що потребує вхідних даних у вигляді зображень чи відео, які модель не приймає

Ризикованим підходом є дозвіл бекенду підтверджувати бронювання відразу після того, як абонент каже «гаразд», не перевіряючи потім його слова. Безпечніший варіант — прочитати підтвердження назад, дочекатися чіткого «так» та зробити так, щоб ваш додаток скасував поточні дії, якщо абонент змінить думку. Голос може бути чудовим, але відповідальність за безпеку все одно лежить на вашому додатку.

Ключові моменти

  • Абоненти можуть перервати розмову чи змінити тему посеред речення, оскільки модель продовжує прослуховувати під час їхньої розмови.
  • Суттєві завдання передаються на бекенд-модель, незалежно від того, чи керує нею OpenAI, чи ваш власний додаток.
  • Кожна сесія складається з п’яти кроків: початок, очікування на session.started, трансляція аудіо, об’єднання слів з фрагментів транскрипції та чисте завершення.
  • Використання голосу коштує $0,05 за хвилину, тож лінія для 2 000 дзвінків обійдеться приблизно у $480 на місяць за умови простого бекенду, зазначеного вище.
  • Якщо абонент перерветься, робота бекенду продовжується, тому ваш додаток має самостійно вирішувати ситуацію „очікуй, ні“.