Архитектура голосового агента на GPT-Live-1: как соединить речь и фоновую логику
Разбор архитектуры голосового агента на GPT-Live-1: как распределить роли между речевым слоем и фоновым бэкендом, как устроено делегирование инструментов и что проверить перед запуском.
Содержание

Сборка голосового ассистента долгое время сводилась к связыванию трех отдельных звеньев: распознавания речи (STT), языковой модели (LLM) и синтеза речи (TTS). На практике такая цепочка создает ощутимую задержку и усложняет управление живым разговором. Когда собеседник берет паузу, меняет мысль или перебивает ассистента, разработчику приходится вручную отслеживать состояние, сбрасывать аудиопоток и синхронизировать контекст между тремя сервисами.
10 сентября 2026 года OpenAI открыла доступ к модели GPT-Live-1 в API (официальный релиз). Вместо пошаговой склейки сервисов модель предлагает полнодуплексный (full-duplex) аудиослой: она способна одновременно принимать входящий звуковой поток и генерировать ответную речь.
Разделение речи и вычислений
Если выполнение задач на бэкенде требует времени, их отделяют от речевого слоя, чтобы поддерживать непрерывное голосовое взаимодействие. Практичная архитектура на базе GPT-Live-1 строится на разделении ответственности:
- Голосовой фронтенд. Модель одновременно обрабатывает входящее и исходящее аудио. По заявлению разработчиков, такой подход лучше переносит фоновый шум, паузы и перебивания по сравнению с каскадом STT–LLM–TTS, а также поддерживает нативное определение границ реплик (turn detection).
- Фоновый бэкенд. Сложный анализ данных, обращение к базам и вызовы инструментов (tool calling) передаются отдельным текстовым моделям или внешним агентам.
Такая схема рассчитана на то, чтобы интерфейс мог удерживать контакт со слушателем и не зависать в тишине, пока фоновый сервис готовит содержательный ответ. При этом реальную задержку и гладкость перехода все равно необходимо проверять на конкретном стеке.
Как устроено делегирование задач
Голос и бэкенд работают асинхронно. Когда пользователь запрашивает статус заказа или поиск по репозиторию, приложение организует отправку задачи на свой бэкенд.
В официальной документации приведен концептуальный пример такой координации с использованием Codex SDK:
import { Codex } from "@openai/codex-sdk";
const thread = new Codex().startThread({
workingDirectory: "./repo",
sandboxMode: "read-only",
approvalPolicy: "never",
});
async function answer(live, delegationId, context) {
const { finalResponse } = await thread.run(
`Answer the latest question using this repo.
Reply in two short spoken sentences.\n${context}`
);
live.send({
type: "session.commentary.append",
delegation_id: delegationId,
content: finalResponse,
});
}
Приведенный код — лишь официальный фрагмент интеграции: инициализация соединения и обработка событий делегирования опущены, поэтому он не предназначен для самостоятельного запуска.
Этот фрагмент показывает общий принцип взаимодействия: приложение передает контекст реплики в рабочий поток инструмента, а полученный ответ возвращает обратно в аудиосессию событием session.commentary.append. Голосовой канал остается активным, что позволяет агенту при необходимости произнести короткую вводную фразу, пока бэкенд завершает вычисления.
Критерии выбора архитектуры
На дату публикации стоимость голосового слоя составляет $0.05 за минуту, что не включает расходы на фоновые модели и вызовы инструментов. Схема актуальна в сценариях, где критична непрерывность диалога:
- Телефонные звонки и запись на услуги. Процессы, где любая неестественная пауза между репликами заставляет клиента переспрашивать, слышно ли его.
- Поддержка со свободной речью. Диалоги, в которых люди часто запинаются, меняют формулировки на ходу или говорят неполными предложениями.
- Голосовое парное взаимодействие. Интерактивная работа с кодом или документами, когда человек рассуждает вслух и не хочет ждать завершения каждой отдельной реплики.
Если задача ограничивается вводом жестких команд, диктовкой заметок или заполнением стандартных форм, имеет смысл сравнить это решение с традиционным каскадом на базе STT.
С чего начать проверку прототипа
Шаги ниже представляют собой рекомендации для проверки прототипа, а не отчет о завершенных тестах. Прежде чем переводить рабочий процесс на новую архитектуру, имеет смысл выполнить базовые шаги:
- Измерьте время ответа бэкенда. Если обращение к вашей базе или внешней модели требует времени, настройте голосовой слой так, чтобы он естественной короткой фразой подтверждал начало операции, а не держал молчание.
- Проверьте поведение в зашумленной среде. Протестируйте прототип в реальных условиях: при наличии уличных звуков, разговоров на заднем плане или нестабильного микрофона.
- Ограничьте формат ответов фоновой модели. В системном промпте для бэкенда явно укажите, что ответы должны укладываться в одно-два емких предложения, удобных для восприятия на слух.
- Установите лимиты длительности сессий. При ставке $0.05 за минуту голосового слоя полезно программно ограничивать максимальное время тестового звонка, чтобы избежать лишних списаний при зависании клиента.
Такая последовательность шагов помогает заранее увидеть реальные задержки инструментов и скорректировать промпты до масштабирования системы.