Jev-подобными моделями называют быстрые модели-классификаторы для голосовых ботов. Они не пишут текст, а за доли секунды отвечают на конкретные вопросы о разговоре: закончил ли абонент мысль, сменил ли тему, согласился ли на действие. В голосовом боте на большой языковой модели (LLM) такой классификатор берёт на себя решения, в которых LLM часто ошибается или тратит слишком много времени и денег.
Свой классификатор для голосовых ботов мы сделали ещё до того, как LLM стали массовыми. Потом казалось, что LLM сделали его ненужным, но на боевых звонках мы вернулись к той же идее, и примерно тогда вышел Jev. Наша интеграция Jev для VoxEngine пока в разработке, а в этой статье мы разбираем, как Jev и похожие модели уже применяют в голосовых ботах другие команды, сравниваем это с нашим опытом и предлагаем, с чего начать.
Зачем голосовому боту на LLM снова нужен классификатор?
На реальных звонках одна LLM редко вытягивает весь разговор. Рано или поздно она пропускает момент вызова инструмента или теряет контекст, а на крупных проектах ещё и обходится слишком дорого. Быстрый классификатор снимает с LLM часть нагрузки и решает за неё отдельные вопросы, например когда выполнить действие и когда сменить тему.
Мы знаем это по собственному опыту. В 2022–2024 годах LLM ещё не были в широком доступе, а голосовой бот уже должен был понимать, чего хочет абонент. Тогда мы сделали свой классификатор, Voximplant Avatar. Он быстро и дёшево определял интент абонента по каталогу, который настраивал заказчик, и находил в реплике сущности, то есть данные, с которыми боту нужно работать. Даты и время, числа, суммы, имена и места Avatar распознавал сам, а для конкретного проекта можно было добавить свои типы, например виды пиццы в меню ресторана. Как было устроено решение, видно по справочнику Avatar API. Работал Avatar неплохо и в некоторых проектах работает до сих пор.
Когда появились LLM, на какое-то время показалось, что классификаторы больше не нужны: модель сама поймёт абонента и сама сочинит ответ. Эйфория, как обычно, быстро прошла. На живых проектах средние модели сбивались от длинного системного промпта или после нескольких смен темы и начинали галлюцинировать. Большие модели справлялись, но либо ломали юнит-экономику решения, либо отвечали слишком медленно для живого звонка. А некоторые модели и вовсе были недоступны в отдельных регионах.
Если голосового бота делают для продакшена крупного заказчика, оптимизировать приходится всё сразу: качество ответов, попадание в метрики и бюджет. Разработчики ботов обходили эту проблему инженерией. Они делили бота на этапы, ставили на один номер нескольких агентов с моделью-маршрутизатором, а участки диалога, которые всегда идут по сценарию, писали скриптами.
Мы запускаем несколько сотен крупных коммерческих проектов в год и раз за разом видим одно и то же. Одна модель пропускает момент вызова инструмента, вылезает за контекстное окно или сжигает недопустимое количество токенов. Полагаться на одну модель на весь разговор в реальных проектах нельзя.
К тому моменту архитектура Avatar устарела, и мы начали менять его на похожую схему с небольшой языковой моделью, быстрой и дешёвой. А потом вышел Jev, и новое в очередной раз оказалось хорошо забытым старым.
Что такое Jev?
Jev сделала компания TypeSafe, ранний доступ к модели открыт с сентября 2026 года. Это модель для принятия решений (decision model): на вход она получает состояние звонка и список вопросов, а возвращает ответы в заданном формате.
Вы отправляете в Jev:
- что сейчас происходит в звонке, например последние слова абонента и последнюю реплику бота;
- вопросы о разговоре, например «абонент согласился?» или «чего хочет абонент?»;
- формат ответа для каждого вопроса.
На каждый вопрос Jev отвечает в том формате, который вы указали:
- выбирает один из заданных вариантов;
- ставит оценку по короткой шкале;
- оценивает вероятность ответа «да» на прямой вопрос.
Текст Jev не пишет, выходных токенов как таковых у него нет. Он отдаёт только структуру с ответами, а что с ней делать дальше, решает код бота. Официальное описание и типы вопросов есть на сайте jevtypesafeai.com.
Насколько быстро отвечает Jev?
Обычно быстрее чем за полсекунды, хотя опубликованные замеры расходятся. У одного разработчика ответы на 35 вопросов пришли примерно за 170 мс на прогретом соединении, у другого задержка составила от 332 до 892 мс. Сама TypeSafe указывает диапазон от 70 до 500 мс.
Какие есть аналоги Jev?
Jev не единственная модель такого типа. За последние месяцы вышло несколько Jev-подобных моделей, и у большинства открытые веса, то есть модель можно скачать и запустить у себя. Обзоры есть в Latent Space и в обсуждении на Reddit.
- Laya от исследователя из Convai Innovations. Самая популярная бесплатная альтернатива Jev, открытый код под лицензией Apache 2.0.
- Clef от Cloudflare. Открытая модель для сверхбыстрого принятия решений внутри программных систем.
- CMF от Cortiq. Лёгкая открытая модель весом 304,5 МБ, отвечает за миллисекунды и показывает высокую точность на задачах классификации.
- Bespoke Nimble от Bespoke Labs. Рецепт «открытого Jev» на базе модели Qwen3.5-9B, которая может отвечать только допустимыми вариантами.
- Kev от @jaredpalmer. Начинался как маленькая модель Kev-0.5B для запуска на обычном ноутбуке, а сейчас вырос в целое семейство моделей.
- CLM-8B от Стэнфорда и Nvidia. Кэширует повторяющиеся действия агентов и в тестах авторов работал до 9 раз быстрее Jev.
Дальше речь пойдёт о подходах, которые работают с любой из этих моделей. В примерах используется Jev, потому что с ним работали авторы кейсов.
Как классификатор распределяет звонки по темам?
Быстрый классификатор встречает звонок первым. Он определяет тему, подключает к разговору небольшого агента, заточенного под неё, и следит, не сменилась ли тема. Причём решает он это до того, как большая модель начнёт сочинять ответ.
Так решается типичная проблема голосового меню. Номер один, а тем внутри несколько: запись, статус заказа, претензия, «соедините с человеком». Если всё это живёт в одном промпте, средняя модель перегружается и после второй-третьей смены темы начинает путаться.
Пётр Зачек (Piotr Zaczek) показал такую схему в коротком ролике. С классификатором система решает сменить направление разговора примерно за 0,5 секунды, а без него почти за 5, и большая модель тратит меньше токенов. У Петра большой модели запрещено делать выводы и рассуждать за рамками своей темы, эту работу он отдал классификатору.
Схема работает, потому что у специализированного агента короткий промпт и один каталог инструментов, а классификатор дешёвый и быстрый, его не жалко спрашивать при каждой смене темы.
В том же посте Зачек называет ещё три задачи, для которых ему нравится Jev:
- разбор звонка после его окончания;
- фоновые ограничения, которые всегда включены и работают отдельно от речевого ответа;
- решение, когда передать звонок другому агенту или человеку.
Как проверить действие LLM до того, как оно выполнится?
LLM только предлагает действие. Прежде чем оно что-то изменит в ваших системах или в разговоре, классификатор отвечает на несколько простых вопросов «да/нет» о нём, и по этим ответам код решает, выполнять действие или нет.
Кто запускал бота на LLM на реальных звонках, знает эту проблему. Бот приятно разговаривает, но редко доводит дело до конца. Нашёл свободное окно и не дошёл до записи, записал клиента на старое имя, не положил трубку после «до свидания» или переспросил одно и то же.
Гиорги Ломидзе (Giorgi Lomidze) в посте «Jev в продакшене» от 24 сентября 2026 года рассказывает, как его команда за две недели вынесла такие решения из речевой модели в классификатор на Jev. Их продукт Pocos, телефонный ассистент для салонов и студий, работает на Voximplant, и мы благодарим автора за упоминание.
Устроено это так:
- Звонок приходит в Voximplant по SIP.
- Сценарий VoxEngine через RealtimeAPIClient соединяется с LLM (у Pocos это Gemini Live) и ведёт голосовой диалог: приветствие, перебивания, таймеры и завершение звонка.
- Речевая модель слушает абонента и предлагает вызвать инструмент, например записать его на приём.
- Прежде чем это решение что-то изменит, сценарий собирает короткий пакет фактов о звонке и задаёт Jev несколько вопросов «да/нет».
- Jev возвращает вероятности, и по ним код решает, что делать дальше.
Вопросы буквальные:
- Абонент подтвердил это действие?
- Последняя реплика меняет, подтверждает или отменяет то, что мы только что сказали?
- Абонент попрощался?
Пороги нужно подбирать под конкретную ситуацию. У Гиорги сильное согласие начинается с 0,9, слабое лежит ниже 0,1, а прощание засчитывается от 0,75, и только если абонент не поднял новую тему.
Суть подхода он формулирует так: LLM только предлагает, Jev оценивает, а решение принимает бизнес.
Как понять по смыслу, что абонент договорил?
Сначала конец реплики определяют по звуку, а затем Jev-подобной модели задают вопрос о тексте, закончил ли абонент мысль. Если звук говорит «договорил», а смысл говорит «нет», бот ждёт продолжения и не перебивает.
Одной тишины для этого мало. Абонент замолкает на полуслове, а таймер тишины уже готов отдать ход боту. При этом «да» после вопроса «перенести на вторник?» считается законченной репликой, а «я хотел сказать, что…» нет, хотя пауза такой же длины.
Для определения конца реплики по звуку у Voximplant есть модуль Agentic VoiceDSP. В нём работают детектор речи Silero VAD, детектор конца хода Pipecat Smart Turn и опциональный шумоподавитель Hush. Разработчик получает события хода (TurnStarted, TurnInferenceTriggered, TurnStopped) и может отреагировать на каждое. Когда абонент замолкает, Smart Turn решает, закончен ли ход, и если нет, модуль выдерживает паузу stopSecs. Так этот слой судит о конце реплики по звучанию речи.
Поверх него мы хотим определять конец реплики по смыслу, то есть понимать, закончена ли мысль или человек ищет следующее слово. Технически это должно сработать. Распознавание речи обычно занимает около 50 мс, классификация Jev около 200 мс, и вместе выходит примерно 250 мс. Это не мгновенно, но для большинства отраслей должно хватить, если бот построен по полнокаскадной архитектуре, в которой распознавание речи, LLM и синтез речи работают отдельными этапами.
Эксперимент, который мы хотим провести:
- Ход начинается с VoiceDSP и детектора речи.
- По промежуточному или финальному тексту Jev получает один вопрос: «говорящий закончил то, что хотел сказать?» Вместе с ним в состояние попадает последняя реплика бота, потому что «да» бывает полным ответом, только если перед ним был вопрос.
- Если детектор считает, что ход закончен, а Jev видит незаконченную мысль, считаем, что абонент хочет продолжить, и не передаём ход боту. Если оба согласны, бот начинает отвечать.
Суприт Таре (Supreet Tare) из Taritas использует ту же механику в боевом проекте голосового коучинга и описал её в статье «Семантическое определение конца реплики с Jev». У него после 350 мс тишины Jev получает один вопрос и отвечает примерно за 0,4 секунды. Дальше код выбирает, сколько ещё ждать. Если мысль закончена (вероятность от 0,75), бот ждёт 1,7 секунды, если ответ неуверенный, 2,8 секунды, а если фраза обрывается на «и», «но» или запятой, 4,5 секунды. Кажется, что это медленно, но в тренажёре Суприта важнее ничего не упустить, чем ответить быстро.
Как отличить перебивание от «угу» и реплики в сторону?
Для этого достаточно одного вызова Jev-подобной модели. Он сразу показывает, закончил ли абонент мысль, просит ли подождать, действительно ли перебивает бота и обращается ли вообще к нему.
Джей Албо (Jay Albo) разобрал такой кейс на Agora Conversational AI в посте «Jev VAD: определение реплик, которое понимает смысл», а код выложил в репозитории AgoraIO-Community/convoai-jev-vad. Контроль аудио и определение начала речи по энергии сигнала здесь опустим. Абонент начал говорить, текст ушёл в Jev, и один вызов вернул четыре вероятности:
turn_complete: абонент закончил мысль, и ход можно передавать боту.holding_floor: абонент прямо просит паузу, например «подождите, сейчас посмотрю…».addressed_to_agent: реплика действительно обращена к боту. Фраза «эй, потише там, я по телефону разговариваю» адресована не ему. Эта проверка показалась нам самой интересной, раньше мы такой не встречали.taking_floor: абонент действительно перебивает бота или это backchannel вроде «мм» и «угу». Некоторые модели сами распознают такие короткие звуки, но нестабильно, и смена или обновление модели может сломать бота именно в этом месте.
В тестах Джея вызов Jev возвращался примерно за 300 мс.
Может ли классификатор заполнять анкету в голосовом боте?
Да, если предметная область небольшая: запись на приём, перенос или отмена визита, вопрос по счёту. Вариантов здесь немного, но фразы живые, и абонент часто в одной реплике называет свои данные, специалиста, дату и время визита. LLM, которая к тому же ведёт разговор, для такой задачи избыточна. Нужен тот самый Avatar, классификатор, который выбирает из сказанного значимые данные и отдаёт их в код бота.
Джейсон Стайлз (Jason Stiles) собрал такую телефонную линию для вымышленной клиники и описал её в проекте Jev IVR, обновлённом 24 сентября 2026 года. Его стек включает Node, Twilio ConversationRelay, Deepgram для распознавания речи, ElevenLabs для голоса и Jev для понимания.
Код бота держит состояние анкеты и на каждом ходе отправляет в Jev один запрос примерно с 30–35 вопросами. Интент выбирается по описанию, поэтому «перенеси», «давайте другой день» и «мне нужно поменять запись» попадают в интент reschedule, то есть в перенос записи. В критериях описано, чего хочет человек, а не какими словами он это говорит.
Со структурированными данными сложнее, чем с интентами. Код сам находит кандидатов в транскрипте. Любой фрагмент, похожий на число, может оказаться годом рождения, а любой фрагмент из одного–четырёх слов именем, и Jev выбирает, какой из них год, а какой имя. Главное преимущество классификатора здесь в том, что галлюцинаций как явления нет. Выдумать дату Jev не может, и ошибка в данных всегда идёт из слов абонента. Подтверждение каждый раз запрашивается отдельно, и абонент либо соглашается, либо отказывается, либо называет поле, которое нужно поменять. Звучит старомодно, зато работает быстро и чётко.
Как выбрать между дешёвым и дорогим ответом?
Этот выбор можно поручить классификатору. На каждом ходе он решает, нужен ли дорогой ответ. Если не нужен, бот отвечает заготовкой или с помощью быстрой модели, а если нужен, к ответу подключается тяжёлая и дорогая модель.
Маршрутизатор тем выбирает, о чём говорить, а здесь выбор другой: какой ценой отвечать. На «да», почтовый индекс или вопрос о статусе заказа можно ответить дёшево. А если абонент запутался, просит инструкцию или подробное объяснение или боту нужно отказать, дешёвый ответ, скорее всего, не справится.
Дипеш Джаял (Deepesh Jayal) из Evalgent описал этот выбор в статье «Jev как маршрутизатор моделей». У него ответы делятся на три класса:
- Заготовка. Модель не вызывается, ответ даётся простым синтезом речи или скриптом.
- Быстрая модель для короткого фактического ответа.
- Тяжёлая и дорогая модель для неоднозначных ситуаций и высокой цены ошибки.
Дипеш опирается на ModelRouterMiddleware из пакета langchain-typesafe. Критерии выбора модели пишутся там обычным языком, а вероятности остаются в состоянии агента, так что разбор после звонка показывает, почему ход ушёл на дорогую модель.
Три правила из его статьи мы взяли бы без изменений:
- Низкая уверенность поднимает выбор на класс выше и не оставляет его на дешёвом.
- Вопрос с высокой ценой ошибки не попадает на дешёвый класс, даже если классификатор уверен, что вопрос простой.
- Поднятый посреди звонка класс не понижают. Дорогую модель уже подключили, и переход обратно на дешёвую на следующем «да» экономит немного, а контекст дорогой модели может пострадать.
С чего начать внедрение Jev-подобной модели в голосового бота?
Начните с конца реплики и перебиваний, затем добавьте маршрутизацию по темам, работу с анкетой, проверку изменений данных и в последнюю очередь выбор цены ответа. Порог уверенности на каждом шаге свой, его берут из опыта и подбирают под конкретный проект.
- Конец реплики. Классификатор проверяет, закончена ли мысль, и получает вместе с текстом последнюю реплику бота, потому что голое «да» считается законченным только после вопроса. На тексте это добавляет около 250 мс задержки, примерно 50 мс на распознавание речи и 200 мс на классификацию. Так устроено у Суприта Таре и в нашем эксперименте.
- Перебивание. Пока бот говорит, классификатор отвечает на вопросы «это backchannel?», «человек просит подождать?» и «реплика точно обращена к боту?». Так устроено у Джея Албо.
- Тематика. Если в голосовом меню больше одной темы, применяйте классификатор, как у Петра Зачека, и подключайте оптимизированного агента для каждой темы. Смену темы посреди звонка определяет тот же классификатор, а не догадка агента.
- Анкета. Запись, перенос, отмена, статус, счёт. Код нарезает кандидатов, Jev выбирает нужный фрагмент транскрипта, а фразы бот берёт из заготовок. Это подход Джейсона Стайлза.
- Изменение данных. Создать, перенести, отменить, списать, положить трубку. LLM предлагает, Jev оценивает, верно ли и уместно ли предложение. Если да, вносим изменение, а если есть расхождения, не вносим и решаем, что делать дальше. Это подход Гиорги Ломидзе.
- Цена ответа. Заготовка, быстрая или тяжёлая модель. Тяжёлую подключаем, когда классификатор считает ход сложным или когда цена ошибки и так высокая, и класс модели посреди звонка не понижаем. Эти правила взяты у Дипеша Джаяла.
С шагом 4 мы бы поспорили. Есть более эффективные способы выделять структурированные данные, чем бинарное деление классификатором. Но как эксперимент подход имеет право на жизнь, а для навигации по меню и нужным полям анкеты действительно заслуживает внимания.
Когда Jev появится в Voximplant?
Мы уже встраиваем Jev в AI-коннекторы VoxEngine и сообщим, как только интеграция будет готова. Скорее всего, она будет работать с вашим собственным API-ключом TypeSafe.
Ждать её, чтобы разобраться в подходах, не нужно, исходные материалы собраны в разделе «Источники». Расскажите в нашем Telegram-чате, что вы попробовали бы первым, и мы учтём это в первой версии интеграции.
Частые вопросы о Jev и Jev-подобных моделях
Генерирует ли Jev текст?
Нет. Jev возвращает ответ в заданном формате: выбор из вариантов, оценку по шкале или вероятность ответа «да». Что с ним делать, решает код бота.
Может ли Jev выдумать данные?
Нет. Jev выбирает только из вариантов или фрагментов разговора, которые ему передал код. Придумать дату или имя он не может, поэтому ошибка в данных всегда идёт из слов абонента.
Какую задержку добавляет классификатор в голосовом боте?
Опубликованные замеры Jev колеблются примерно от 70 до 892 мс в зависимости от настроек и соединения. Для определения конца реплики по смыслу мы оцениваем общую задержку примерно в 250 мс вместе с распознаванием речи.
Заменяет ли Jev-подобная модель LLM?
Нет. С абонентом по-прежнему разговаривает LLM, а классификатор помогает ей с отдельными решениями. Он распределяет звонок по темам, следит за ходами разговора, проверяет действия и выбирает модель для ответа.
Обязательно ли использовать именно Jev?
Нет. Открытые аналоги, например Laya, Kev и Bespoke Nimble, работают по тому же принципу. Подходы из статьи подходят для любой модели, которая отвечает в заданном формате достаточно быстро для телефонного звонка.
Источники
Часть материалов на английском.
О Voximplant:
- Agentic VoiceDSP в VoxEngine
- Варианты архитектуры голосового бота, включая полный каскад
- Gemini Live в VoxEngine
- Справочник модуля Gemini
- Справочник Voximplant Avatar API
- Руководство по сущностям Voximplant Avatar
О Jev и Jev-подобных моделях:
- Документация Jev от TypeSafe
- Hi-Tech Mail о бесплатной альтернативе Jev, модели Laya
- Хабр о модели CMF
- Latent Space, обзор клонов Jev
- Обсуждение на Reddit: лучшая self-hosted альтернатива Jev
Кейсы:
- Пётр Зачек о маршрутизации по темам с Jev
- Гиорги Ломидзе, «Jev в продакшене»
- Суприт Таре, «Семантическое определение конца реплики с Jev»
- Джей Албо, «Jev VAD: определение реплик, которое понимает смысл» и репозиторий AgoraIO-Community/convoai-jev-vad
- Джейсон Стайлз, Jev IVR
- Дипеш Джаял, «Jev как маршрутизатор моделей»




