Внутри агента часто встречается место, где регулярка по ответу модели решает судьбу шага. Маршрутизация: отправить в поиск или в БД. Классификация: спам это или нет. Проверка результата: продолжать или звать человека. На входе свободный текст, на выходе одно значение из списка, и где-то в коде стоит парсер.
Это место обычно и ломается. Модель лишний перевод строки добавила, JSON обернула в пояснение, на неоднозначном вводе выдала один лейбл, а в другой раз другой. Каждый такой случай тянет за собой правки промпта, страховки в коде, ветки обработки ошибок.
Jev от TypeSafe AI предлагает другой контракт. На входе контекст и список вариантов, на выходе значение из списка и вероятность. Текста нет. Парсера нет. В коде остаётся обычная ветка по enum.
Что именно возвращает Jev
TypeSafe называет такие модели System One. Идея в разделении труда. Frontier LLM остаётся для генерации и сложного рассуждения. Узкие повторяющиеся решения, такие как классификация, роутинг и выбор следующего действия, отдаются модели, которая возвращает типизированный ответ с вероятностью.
В материале LangChain этот контракт описывается через четыре свойства. Структурированность: значение и вероятность, без свободного текста. Параллельность: несколько вопросов к одному состоянию за один запуск. Скорость. И самосогласованность: на одном и том же входе модель возвращает одинаковый ответ. В эксперименте LangChain с оценкой через LLM-судью разброс по 100 повторам был заметно меньше, чем у обычной LLM.
Почему контракт важнее бенчмарков
TypeSafe заявляет разницу до 200× по скорости и до 400× по цене на узких задачах. Habr со ссылкой на материал упоминает цифры около 194× и 445×, но подчёркивает: это данные самой компании, переносить их на любые задачи нельзя. Полезнее смотреть на сам контракт. В примере с ревью документов для судебного процесса Jev закрывал три классификации за один запрос, и каждая определяла маршрут в графе. По данным LangChain, на этом шаге Jev оказался в 5–6 раз быстрее Sonnet. В браузерном агенте Stagehand от Browserbase медианная задержка act упала с 1.97 до 0.46 секунды, примерно в 4.3 раза, а всё, что ниже порога уверенности 0.7, уходило к LLM.
Главное здесь не конкретные числа, а место модели в схеме. Когда на выходе enum и число, пропадает необходимость парсить ответ. Когда есть вероятность, в коде появляется явный порог. Ниже порога эскалация на LLM или человеку, выше автоматический шаг.
Где это перекладывает проблему, а не решает её
Подмена «текст → парсер» на «enum → if по вероятности» не убирает ошибки модели. Jev всё ещё может поставить low там, где правильно high. Авторы TypeSafe признают: формулировка «не может галлюцинировать» означает лишь то, что модель не вернёт значение вне заданного списка. Решение при этом может быть просто неправильным.
Отсюда два честных ограничения. Если задача требует глубокого пошагового рассуждения, скажем, в математике или сложном многошаговом плане, Jev проигрывает reasoning-моделям. И список вариантов нужно задать заранее: модель не придумает новый класс, которого нет в постановке. В обоих случаях это не баг схемы, а её рамки.
Как применить
- Найдите в агенте место, где сейчас стоит парсинг свободного текста от LLM: классификация входящего письма, выбор следующего действия, проверка качества ответа субагента. Это первый кандидат.
- Опишите задачу как «состояние плюс конечный список значений». Например: эскалация это true или false; категория это спам, фишинг или легитимное; следующий шаг это search, escalate или finish. Без размытых формулировок вроде «выбери сам», иначе Jev просто не выйдет за рамки списка.
- Подключите Jev как отдельный шаг в обвязке. На вход подайте только то состояние, которое реально нужно для решения, и зафиксируйте набор вариантов в схеме. Возвращаемое значение сразу идёт в ветку роутера, без регулярок и json.loads.
- По вероятности выставите порог. Выше порога автоматический шаг. Ниже тот же шаг, но через LLM или с подтверждением человеком. Этот порог и есть главная новая ручка, которая появляется в коде.
- Замерьте, что класс ошибок действительно ушёл. Соберите выборку кейсов, на которых старый шаг падал: модель добавила пояснение, вернула не тот лейбл, неоднозначно выбрала между вариантами. Прогоните через Jev и сравните. Если улучшения нет, задача не про классификацию, и контракт здесь не поможет.
- Если задача требует генерации текста или многошагового рассуждения, оставьте её за LLM. Jev закрывает узкие повторяющиеся решения, остальное продолжает жить в обычном пайплайне.