← Все статьи

Голосовой звонок сразу нескольким ИИ в одном окне: как сделать «позвонить Claude, GPT и DeepSeek» с перебиванием

Голосовой звонок сразу нескольким ИИ в одном окне: как сделать «позвонить Claude, GPT и DeepSeek» с перебиванием

Коротко о главном (BLUF)

Сравнивать ответы моделей по очереди неудобно, а «надиктовка» — это ещё не разговор. Мы сделали голосовой звонок, где Claude, GPT и DeepSeek отвечают в одном окне. Рассказываем, чем звонок отличается от диктовки, как устроена архитектура и на какие грабли наступили.

В большинстве чатов с ИИ голос выглядит так: диктуешь сообщение, ждёшь, читаешь ответ. Это не разговор — это надиктовка. Мы в NeuralSpace сделали в разделе «Чат» полноценный голосовой звонок: ты говоришь, модель отвечает голосом в реальном времени, её можно перебивать, и позвонить можно любой модели — Claude, GPT, DeepSeek — в одном и том же окне. Разбор, как это устроено и почему сложнее, чем кажется.

Почему «надиктовка» ≠ разговор

Живой разговор держится на двух вещах, которых нет у push-to-talk интерфейсов:

  1. Низкая задержка. Пауза в 3–4 секунды между вашей репликой и ответом убивает ощущение диалога. Модель должна начинать отвечать почти сразу.
  2. Перебивание (barge-in). В живой речи мы перебиваем постоянно: «стоп, не то», «короче», «а можно…». Если ассистент договаривает свою длинную мысль, игнорируя, что вы уже говорите, — это не собеседник, это автоответчик.

Оба пункта — про архитектуру потоков, а не про «подключить синтез речи».

Архитектура

Полнодуплексный тракт: непрерывный вход, стриминг токенов в озвучку, обрыв ответа при перебивании
Полнодуплексный тракт: непрерывный вход, стриминг токенов в озвучку, обрыв ответа при перебивании

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

Модель-агностик. Самое интересное решение — единый голосовой слой поверх разных моделей. Пользователь в одном окне переключает собеседника: сейчас разговаривает с Claude, через минуту — с GPT, потом с DeepSeek. Для этого голосовой тракт (распознавание + детекция речи + логика перебивания + синтез) отвязан от конкретной модели: модель — это сменный «мозг» за общим голосовым интерфейсом. Тракт работает с абстрактным потоком «реплика → поток токенов ответа → озвучка» и не знает, кто стоит за ним.

Стриминг ответа в озвучку. Чтобы не ждать, пока модель допишет весь ответ, токены уходят в синтез по мере генерации, чанками по границам предложений. Это даёт низкую задержку и делает перебивание естественным: обрываем ровно на том, что уже произнесено.

Грабли

  • Ложное срабатывание barge-in. Кашель, фоновый шум, «угу» — модель замолкает не вовремя. Пришлось калибровать порог детектора речи, чтобы отличать реальную реплику от шума.
  • Контекст после перебивания. Если просто выкинуть недоговорённый ответ, модель «забывает», что вообще отвечала. Мы сохраняем произнесённую часть как её ход в диалоге — тогда «стоп, а вот про второе подробнее» работает осмысленно.
  • Переключение модели в живом разговоре. История диалога общая, но у моделей разные форматы и «характер». Мы нормализуем историю так, чтобы новая модель подхватывала разговор, а не начинала с чистого листа.

Зачем это

Разные модели сильны в разном: одна лучше рассуждает, другая креативнее, третья быстрее и дешевле для болтовни. Голосовой звонок с переключением превращает это в естественный сценарий: обсудил идею с одной, попросил вторую покритиковать, третью — накидать вариантов. Всё голосом, в одном окне, с возможностью перебить в любой момент. Тот же голосовой тракт лежит под голосовым агентом для сайтов — там он ещё и кнопки нажимает.

Если строите голосовые интерфейсы поверх языковых моделей — интересно обсудить, как вы решаете barge-in и сохранение контекста при обрыве. Попробовать звонок: neuralspace.pro/chat.

Full-duplex pipeline: continuous input, tokens streamed into speech, playback cut on interruption
Full-duplex pipeline: continuous input, tokens streamed into speech, playback cut on interruption

Часто задаваемые вопросы (FAQ)

Вопрос: Как получить лучший результат от нейросети?
Ответ: Используйте подробные промпты (описания) на английском языке, задавайте стиль и детали сцены.

Вопрос: Можно ли использовать эти материалы в коммерческих целях?
Ответ: Да, сгенерированный контент полностью принадлежит вам.