Перейти к содержанию
Публикация AiManual

Jev от TypeSafe: как модель, которая не пишет текст, а принимает решения, экономит токены LLM

Jev от TypeSafe не генерирует текст, а возвращает типизированные ответы с вероятностями на вопросы Choice, Noul и Score, поэтому один HTTP-вызов заменяет десятк

Коротко

Что будет в материале

  1. 01

    Что такое Jev и зачем он нужен, если есть LLM

  2. 02

    Три типа вопросов: Choice, Noul и Score

  3. 03

    Type-safe by construction: почему Jev не галлюцинирует

  4. 04

    Архитектура «батареи вопросов»: один вызов вместо цикла LLM

Jev от TypeSafe принимает решения с вероятностями и не пишет ни строчки текста. Модель класса System One возвращает типизированный ответ на каждый заданный вопрос: ключ одной из опций, число от 0 до 1 или позицию на упорядоченной шкале. Экономия токенов LLM получается именно из-за отказа от генерации: там, где большая модель выдала бы абзац рассуждений, Jev отдаёт компактный результат, а дорогой вызов языковой модели происходит только на эскалации.

Формат ответа задаёт вызывающий код, а не модель. Это переворачивает привычную схему работы с AI: вместо «попроси модель подумать и распарси то, что она написала» код формулирует список вопросов, получает по каждому вероятность и сам решает, что делать дальше. Парсеры ответов, проверки на валидность JSON и повторы в стиле «модель вернула мусор, попробуем ещё раз» из схемы выпадают.

Разработчик модели в описании назван как TypeSafe; в русскоязычном конспекте, посвящённом тому же инструменту, компания упоминается как Typeface AI. Расхождение в названии стоит уточнить в официальной документации перед тем, как искать API и SDK.

Что такое Jev и зачем он нужен, если есть LLM

По описанию модели Jev создан для решений с вероятностями: он не рассуждает прозой и не пишет код. Ответ всегда укладывается в один из трёх типов вопросов, и вне заданных вариантов модель выдать ничего не может.

Чем Jev отличается от генеративных LLM

Генеративная модель платит токенами за каждый шаг: входной контекст, рассуждения, форматирование ответа. Если агенту нужно выбрать между двумя кнопками на странице, LLM всё равно прогонит через себя весь контекст и напишет текст, из которого потом нужно извлечь решение.

Jev при том же запросе возвращает ключ опции, распределение вероятностей по всем вариантам и confidence. Выходных токенов на «размышления» нет, поэтому и счёта за них нет. Подробный обзор модели с примерами использования показывает, что разница заметнее всего на повторяющихся решениях: классификация, маршрутизация, выбор элемента из списка.

Простая аналогия: LLM это универсальный собеседник, который всегда готов поддержать разговор. Jev это специализированный классификатор с вероятностями: он умеет только выбирать из предложенных вариантов, и в этом его сила.

Почему «тупой код» не всегда справляется

If/else, регулярки и словари ключевых слов бесплатны, быстры и предсказуемы, пока формулировки совпадают с ожидаемыми. Обращение «не могу зайти в кабинет после смены номера» правило по слову «номер» отправит в раздел смены контактов, хотя человек просит доступ. Перестановка слов ломает такие правила, а число условий растёт вместе с числом исключений.

Автор разбора описывает пространство между двумя крайностями: дешёвый, но негибкий код с одной стороны и умные, но дорогие LLM-агенты с другой. Jev встаёт в середину, где нужны дешёвые рефлексы с пониманием смысла: да или нет, помочь или не помочь, кликнуть сюда или туда.

Три типа вопросов: Choice, Noul и Score

Тип вопросаЧто вы спрашиваетеЧто получаете на выходе
ChoiceВыбери один вариант из N заданныхКлюч опции, полное распределение вероятностей и confidence
NoulКакова вероятность, что ответ «да»Одно число от 0 до 1, без отдельного confidence
ScoreОпредели положение на шкале уровнейПозиция на упорядоченной шкале из 2-10 уровней, описанных словами

Все три типа вопросов отправляются к одному состоянию и обрабатываются в рамках одного запроса: контекст, текст тикета, фрагмент DOM, метаданные. Дополнительный вопрос к тому же состоянию добавляет немного времени и стоимости, а не полный новый прогон контекста.

Choice: выбор одного варианта из N

Вопрос формулируется как «выбери один вариант из списка», а сам список задаёт разработчик: «техническая проблема», «оплата», «возврат», «другое». На выходе приходит ключ выбранной опции, полное распределение вероятностей по всем вариантам и отдельный confidence.

Распределение важнее самого выбора. Если модель отдала 0,94 на «оплату» и по 0,03 на остальные варианты, решение можно выполнять без проверки. Если вероятности размазаны как 0,51 на 0,45, разумнее не гадать, а передать задачу дальше. Confidence отвечает на другой вопрос: насколько модель уверена в собственном распределении, а не какая опция лидирует.

Noul: вероятность «да» одним числом

Noul отвечает на бинарный вопрос: какова вероятность того, что ответ «да». На выходе одно число от 0 до 1, отдельного confidence здесь нет, и он не нужен: в бинарной постановке сама вероятность и есть мера уверенности.

Пример: «стоит ли эскалировать этот тикет на вторую линию?» Ответ 0,07 означает, что человек не нужен, 0,93 просит вмешательства. Пороги задаёт код: например, выше 0,8 отдать оператору, ниже 0,2 закрыть автоматически, а середину передать LLM.

Score: положение на упорядоченной шкале

Score определяет позицию на шкале из 2-10 уровней. Уровни описываются словами и означают конкретные ситуации, а не абстрактные числа: «нейтрально», «раздражённо», «агрессивно» для тональности или «полностью соответствует», «частично соответствует», «не соответствует» для проверки требований к документу.

Формулировка шкалы определяет качество ответа. Если уровни назвать просто «1, 2, 3», модель получит задачу без опоры: разницу между четвёркой и пятёркой невозможно вывести из текста. Когда каждому уровню соответствует описанная словами ситуация, Score превращается в оценку степени выраженности признака.

Type-safe by construction: почему Jev не галлюцинирует

Главное архитектурное свойство Jev: модель физически не может вернуть значение вне заданных опций. Свободной генерации нет, поэтому нет и возможности написать что-то своё. Для агентных систем это снимает целый класс отказов: вызов несуществующей функции, недопустимый параметр, название инструмента с опечаткой, ответ не в том формате, который ждёт код.

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

Пост-трейнинг модели описан как RLCD, reinforcement learning for calibrated decisions: обучение нацелено на калиброванные решения для программ, а не на человеческие предпочтения. Разбор подхода к AI-примитивам в коде подробнее останавливается на этом и на том, какие вопросы к методу остаются открытыми.

Архитектура «батареи вопросов»: один вызов вместо цикла LLM

Схема такая. Код владеет циклом и состоянием: собирает контекст, формулирует список вопросов и отправляет их одним HTTP-вызовом. Jev обрабатывает всю батарею вопросов к одному состоянию и возвращает ответы сразу на все. Дальше код применяет пороги: уверенные решения выполняются, неуверенные уходят на эскалацию к LLM.

state = собрать_состояние()              # текст тикета, фрагмент DOM, метаданные
answers = jev(state, батарея_вопросов)   # один HTTP-вызов на всю батарею
if answers.confidence < порог:
    ответ = llm_эскалация(state)         # дорогой путь, только на исключениях
else:
    действовать(answers.choice.key)

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

Как код управляет циклом и когда подключается LLM

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

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

Экономия токенов: цифры и логика

Экономия складывается из трёх вещей. Выходных токенов на рассуждения нет. Батарея вопросов идёт одним вызовом вместо последовательных обращений к LLM. Дорогая модель получает только те случаи, где вероятность оказалась в серой зоне или сценарий выходит за рамки известных категорий.

Порядок величин можно оценить по конспекту разбора на VibeCoderz: там приводится сценарий, где 300 заявок классифицируются за 1 цент. Цифру стоит читать как иллюстрацию порядка затрат на узкую задачу, а не как гарантию для любого пайплайна: итог зависит от формулировки вопросов и доли эскалаций.

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

Практические кейсы: браузерный агент, Service Desk и элемент-пикер

Три кейса ниже описаны в публичных материалах о Jev; AI-Manual их не воспроизводил и не измерял. Смотрите на них как на схемы применения, которые нужно проверять на своих данных.

Браузерный агент на trip.com

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

Jev решает рутинные переходы, а LLM подключается, когда состояние страницы не укладывается в знакомые варианты: нестандартная верстка, капча, неожиданный диалог. Дорогие вызовы остаются на исключениях, а не на каждом клике.

Service Desk на 100 тикетов

Здесь работают два типа вопросов сразу. Choice определяет категорию обращения, Noul отвечает на вопрос об эскалации. Сто тикетов прогоняются через классификацию и маршрутизацию с минимальными затратами: код получает по каждому тикету категорию, вероятность ошибки и решение о передаче человеку.

Полезный побочный эффект: для каждого тикета остаётся число, по которому видно, где автоматика уверена, а где нет. Это даёт материал для настройки порогов без ручного разбора всех обращений.

Элемент-пикер

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

Общее у трёх кейсов одно: набор возможных решений ограничен и известен заранее. Именно в таких условиях модель без генерации текста выигрывает у универсальной LLM.

Честные ограничения: налог на интеграцию, пороги и confidence

Налог на интеграцию: сколько усилий требует Jev

Jev не подключается одной строчкой. Нужно спроектировать батарею вопросов, описать опции так, чтобы они не пересекались по смыслу, продумать шкалу для Score, настроить вызов и разобрать ответы в коде. Для задачи из двух условий это избыточно: if/else справится быстрее и дешевле.

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

Тюнинг порогов: как не ошибиться с эскалацией

Порог определяет, когда Jev действует сам, а когда зовёт LLM. Низкий порог даёт много эскалаций и съедает экономию. Высокий порог оставляет больше решений на автоматике и повышает риск ошибки в спорных случаях. Универсального значения не существует: он зависит от цены ошибки и доли пограничных случаев в ваших данных.

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

Вероятность и confidence: в чём разница и как использовать

В Choice приходят два разных показателя. Распределение вероятностей говорит, насколько модель склоняется к каждой опции. Confidence говорит, насколько она уверена в этом распределении. Значения не совпадают по смыслу: вероятность 0,6 на одной опции при confidence 0,9 описывает ситуацию, где выбор объективно неочевиден, но модель не сомневается в своей картине мира.

Для решений полезнее комбинация. Уверенный перевес одной опции и высокий confidence дают зелёный свет автоматике. Высокий confidence при почти равных вероятностях означает, что входных данных мало: тут помогает не повторный запрос, а дополнительный контекст. В Noul отдельного confidence нет, поэтому порог ставят по самой вероятности.

Кому и когда стоит использовать Jev

Jev подходит задачам, где решение сводится к выбору, оценке вероятности или позиции на шкале: классификация обращений, маршрутизация между обработчиками, бинарные решения об эскалации, выбор элемента из списка. Модель не подходит для генерации текста, открытых рассуждений и творческих задач: она не пишет прозу и не строит цепочек размышлений.

Сравнение с альтернативами держите под рукой. If/else и регулярки берите, когда формулировки стабильны и контекст не важен. LLM нужна там, где требуется рассуждение, работа с длинным документом или свободный ответ. Jev занимает промежуток: смысл он понимает, а стоит как узкий классификатор.

Чек-лист перед стартом:

  • У вас есть повторяющиеся решения с заранее известным набором вариантов.
  • Формулировки опций можно развести по смыслу без пересечений.
  • Есть размеченные примеры, чтобы подобрать пороги эскалации.
  • Вы готовы держать оркестрацию в коде, а не отдавать управление модели.
  • Есть сценарий эскалации: кому уходит неуверенный случай, человеку или LLM.

Дополнительный сценарий из того же конспекта касается роутера моделей и скилла для Claude Code, где Jev выбирает, какая модель или инструмент подходит запросу. Начните с одного узкого участка, измерьте долю эскалаций на своих данных и только после этого расширяйте батарею вопросов.

Подписаться на канал