Голосовые агенты GPT-Live-1: сессии, режимы делегирования и реальные затраты на использование телефонной линии.
Практическое руководство по полнодуплексной голосовой модели OpenAI: как проходит сессия, отличия между ответами и делегированием задач клиенту, пример расчета затрат и подводные камни в документации.
Источники: 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 называется делегированием. Каждую долю секунды модель голоса решает, стоит ли молчать и слушать, остановиться, говорить или передать задачу на обработку на бэкенде. Звонок никогда не замирает во время выполнения этой задачи, поскольку голос может сказать коротко «дайте проверю» и продолжить разговор.
Представьте, что звонящий спрашивает в очереди ресторана, свободен ли стол на четверых в пятницу в 19: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 перестает быть просто приятным голосом и превращается в полезного агента. При запуске сессии выбирается один из двух режимов делегирования, и его нельзя изменить в процессе работы. Чтобы сменить режим, необходимо начать новую сессию.
Вариант А: Делегирование ответов
Вы указываете имя модели ответов, к которой должен обращаться голос, а также инструменты, которые он может использовать. Настройки хранятся в объекте сессии вместе с именем модели.
"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 доллара за минуту, что при 2000 звонках в месяц приводит к расходам около 480 долларов при небольшой нагрузке на сервер с учетом вышеуказанных предположений.
- Если звонящий прервет разговор, работа сервера продолжается, поэтому ваше приложение должно самостоятельно справляться с ситуацией прерывания.