Открытый движок SGLang-Omni поддержал три типа голосовых ассистентов
Команда SGLang запустила в одной среде три схемы голосового ИИ, которого можно перебивать, и сравнила их на видеокарте H200. Ни одна схема не оказалась лучше во всём.
Команда открытого движка SGLang1 добавила в SGLang-Omni, его версию для моделей со звуком и видео, среду для голосового ИИ, который ведёт непрерывный разговор и замолкает, когда его перебивают. Разбор с кодом вышел 20 октября, а на следующий день ссылкой на него поделилась китайская MiniMax с припиской «Руководство и код, чтобы было с чем поэкспериментировать».
Почему это важно: голосовых ассистентов строят тремя разными способами. В SGLang-Omni их можно запускать на одной основе и проверять одинаковыми тестами, не собирая заново серверную часть под каждую схему.
Три схемы: среда поддерживает каждую из них:
- Модели в полнодуплексном голосовом режиме2 — MiniCPM-o, Nemotron VoiceChat, PersonaPlex — слышат человека, пока говорят, и сами решают, когда уступить слово.
- Пошаговые модели вроде Qwen3-Omni понимают речь, картинки и видео и отвечают голосом, но когда начать или оборвать ответ, решает внешний модуль.
- Каскадная архитектура3 собирается из отдельных моделей для распознавания речи, ответа и озвучки, и любую из них можно заменить, не обучая заново остальные.
Общая картина: над ИИ, с которым можно говорить без строгой очереди реплик, работают OpenAI, Google, Thinking Machines и ByteDance. Главный вопрос авторы считают открытым: сколько поведения в разговоре модель должна выучить сама, а сколько взять на себя окружающая система.
Как это работает: разговор держит сессия, которая живёт столько, сколько длится беседа, а не один запрос к модели. Модели, инструменты и модуль, решающий, чья очередь говорить, связаны в граф: по его связям они передают друг другу данные и команды. В каскаде отдельная модель Qwen3-ForcedAligner сверяет озвученную речь с текстом: если человек перебил, система знает, какую часть ответа он успел услышать, и правит историю разговора.
В цифрах: все схемы запускали на одной видеокарте H200 и проверяли бенчмарком Full-Duplex-Bench4 — на ответ системы накладывается второй голос, а модель-судья решает, верно ли повела себя система:
- MiniCPM-o 4.5 почти не сбивается, когда собеседник поддакивает, но откликается лишь на 56% настоящих перебиваний и замолкает в среднем через 1,6 секунды.
- Qwen3-Omni замолкает за 0,25 секунды и откликается на 96% перебиваний, но в тесте обрывала ответ всякий раз, когда звучали фоновые голоса или человек обращался к кому-то другому.
- Каскад с языковой моделью Qwen3.8-27B замолкает быстрее всех, за 0,17 секунды. При озвучке он теряет 0,4% слов ответа, две другие схемы — около 6%.
Детали: каскад держал 16 разговоров одновременно, но это предел, заданный вручную: видеокарта при нём не была загружена полностью. MiniCPM-o выдержала восемь, потому что непрерывно обрабатывает звук каждой сессии, даже пока слушает. Qwen3-Omni — только два. SGLang-Omni умеет разносить части одной модели по разным видеокартам, но в тесте все части Qwen3-Omni стояли на одной. Почему это ограничило её сильнее, чем каскад, авторы не объясняют.
Интрига: когда в каскаде заменили Qwen3.8-27B на маленькую Qwen3-4B, доля ответов, которые модель-судья признала годными по содержанию, упала с 87% до 72%. Зато отвечать система стала на 0,26 секунды быстрее. Реакция на чужую речь почти не изменилась: очередь в разговоре там определяет детектор речевой активности — модуль, который замечает, что человек заговорил, — а не языковая модель.
Но: открытые модели в полнодуплексном режиме, по оценке авторов, ещё отстают от ведущих закрытых систем. У каскада свой недостаток: фразы озвучиваются по отдельности, и голос от предложения к предложению меняется сильнее, чем у других схем.
Код, тесты и записи разговоров для проверки результатов выложены в открытый доступ, а для каждой из трёх схем есть веб-интерфейс для пробного разговора.