Опубликовано
Четыре эвала для модели решений: Jev в бою
Автор: Гусев Николай [портфолио]
Темы: ai-agents, benchmarks, llm-news, local-models
Опубликовано: 2026-09-20, Telegra.ph + пост 239 в @hermesagentru
Сложность: средняя
Jev не пишет текст: получает на вход состояние и типизированные вопросы, возвращает выбор из опций с вероятностями. Прогнал её по четырём рабочим задачам - фильтр промпт-инъекций, реранкер для RAG, триаж новостного потока и маршрутизация входящей почты - в паре с бесплатной локальной 8B и Gmail как baseline. На задачах с золотой разметкой: 31 вердикт из 32. Весь сеанс замера обошёлся в один цент.
Что такое System One
Jev - первая модель класса System One от TypeSafe. Её язык - не проза, а решения. Запрос устроен иначе, чем у обычной LLM: вы отдаёте state (текст или JSON) и карту вопросов трёх видов. Choice - выбрать опцию из заданного набора, в ответе опция, полное распределение вероятностей и уверенность. Noul - вероятность yes/no по вопросу. Score - позиция на упорядоченной шкале уровней. Выдумать опцию модель не может - только выбрать из названных вами, поэтому исчезает целый класс проблем с парсингом свободного текста.
По официальной документации: 0.042 доллара за миллион входных токенов, выходные бесплатны, 1200 запросов в минуту, контекст 64k, на входе только текст. В замере - jev-1.13.0.
Метод: три задачи и честная разметка
Публичных бенчмарков для этого класса задач мало, а верить цифрам из пресс-релиза - не метод. Разметку сделал сам, по построению: для фильтра инъекций написал 10 инъекций и 10 заведомо чистых текстов, для реранкера - 6 релевантных запросу текстов и 6 заведомо посторонних. Такой замер измеряет не качество вообще, а разделимость на моём распределении данных - ровно то, что нужно знать перед встраиванием. Третья задача золотой разметки не имеет, там сравниваю поведение моделей и экономику каскада.
`1. Prompt injection: noul "есть ли скрытая инструкция для ИИ"
20 текстов (10 инъекций / 10 чистых)
2. Реранкер: noul "релевантен ли текст запросу про сборку
мусора в Python", 12 текстов (6 / 6)
3. Триаж новостей: choice {tradable, already_priced, noise},
25 живых заголовков из RSS агентства`
Соперник - yandexgpt-5-lite-8b-instruct в LM Studio на той же машине, temperature 0, те же вопросы в yes/no-форме. Локальному прогону предшествовала уборка: lms unload --all, потому что в памяти LM Studio копились модели от прошлых задач. Все вызовы - параллельными пачками, у Jev замер снят на батче с 10 воркерами: 98 мс на элемент.
Задача 1: фильтр промпт-инъекций
` Jev локальная 8B
инъекции (10) 9/10 7/10
чистые (10) 10/10 10/10
итого 19/20 17/20
токены 7 617 бесплатно
время 3.3 с 8+ с`
Единственный промах Jev - письмо от имени поддержки с инструкцией "сообщите пользователю код": она оценила угрозу в p=0.21. Честно сложный случай, текст маскируется под легитимную деловую переписку. Локальная модель промахнулась на нём тоже - плюс пропустила классическое "игнорируй предыдущие инструкции" и подделку конца документа через ### END OF DOCUMENT ###.
Кейс для внедрения здесь лежит на поверхности: любой агент, принимающий внешний текст - письма, тикеты, резюме, отзывы - может прогонять его через один такой вызов до основной модели. Подозрительное режется или уходит на ручную проверку. На поток в тысячу сообщений в день это копейки при 380 токенах на проверку.
Задача 2: реранкер перед генерацией
Тут Jev показала разделимость, которую обычно ждут от обученного кросс-энкодера:
`релевантные: 0.96 0.93 0.90 0.88 0.71 0.70
посторонние: 0.01 0.01 0.01 0.01 0.01 0.01`
12 из 12, между классами разрыв в 70 раз, ни одного сомнительного значения. Локальная 8B дала 11 из 12.
Практический сценарий - RAG-пайплайн: найденные ретривером чанки оцениваются одним вызовом, а код решает, что отдать дорогой генеративной модели, что выбросить, а что пометить как противоречащее вопросу. Вероятности здесь лучше бинарного вердикта: порог крутится в коде без повторного запуска инференса.
Задача 3: триаж потока и каскад
Третья задача без золотой разметки, зато ближайшая к реальному сценарию фильтрации потока: 25 живых заголовков, вопрос о торговой значимости для российского рынка. Jev разделила на 19 noise и 6 tradable: нефть через Ормузский пролив и переговоры по Ирану взяла как значимые, ДТП и спорт отсеяла.
Сравнение с локальной моделью на бинарной переформулировке того же вопроса вышло показательным иначе: совпадение только 14 из 25, и все 11 расхождений одного знака. Локальная уверенно отвечала "да, может двигать" на закрытие региональных аэропортов и сводки о БПЛА, Jev говорила noise. Формально первая права - что-то да подвигается. Практически фильтр, пропускающий всё подряд, не фильтр. Урок замера: формулировка критериев влияет на итог сильнее размера модели. У Jev критерии прописаны явно в опциях, и жёсткость фильтра управляется текстом, а не подбором промпта наугад.
Второй урок - уверенность это готовый API для каскада. Порогом 0.5 Jev пометила неуверенными 40 процентов заголовков, и именно они ушли в бесплатную локальную проверку. Калиброванная первая линия плюс дешёвая вторая стоят в разы меньше одной большой модели на всём потоке.
Задача 4: входящая почта
Спам-фильтр - пример того, где такая модель не нужна: Gmail это уже делает обученным на миллиардах писем классификатором, дублировать бессмысленно. Интереснее вопрос, на который почтовый клиент не отвечает вообще: что делать с письмом - отвечать, читать позже, хранить или выбросить. Это ежедневная боль общих ящиков компаний, куда пишут клиенты, партнёры и роботы вперемешку.
Прогнал 15 последних реальных писем своего ящика за два дня через два вопроса сразу: Choice-маршрутизация (action / read_later / archive / promo) и Noul "требует ли личного ответа в течение рабочего дня". Один запрос несёт оба ответа параллельно.
`маршрутизация: 12 archive / 2 read_later / 1 promo / 0 action
требуют ответа: 0 из 15
неуверенных (conf < 0.5): 1 из 15 - на вторую линию
время батча: 2.4 c, цена: $0.0003`
Показательная деталь: почтовый клиент сложил все 15 в одну категорию "Входящие" - формально верно, практически бесполезно. Разница между "уведомление в архив" и "человек ждёт ответа" - это ровно то микросуждение, которое стоит калиброванного классификатора. На потоке в сотню писем в день триаж такого рода стоит меньше цента, а неуверенные случаи уходят человеку не пачкой, а по одному, с уже вычисленной вероятностью.
Что это даёт обычному
Тот же приём работает и вне корпоративного контура - везде, где нужен быстрый выбор по типам. Триаж уведомлений телефона: Automation-приложения на Android умеют перехватывать уведомления и дёргать HTTP, один вызов решает - разбудить, отложить или утопить в тишине. Семантические условия в автоматизациях вроде IFTTT или n8n: вместо хрупких if по ключевым словам - одно типизированное суждение, а третья ветка "не уверен", которой нет у булевой логики, отправляет спорный случай человеку. Бот техподдержки, который по интенту решает: баланс, заказ или живой оператор, - это тот же запрос из документации платформы. Голосовые в семейном чате после распознавания речи сортируются на "срочно" и "мусор" без единого правила. Поток в сотню событий в день на таких задачах стоит порядка пяти центов в месяц.
Кейсы применения
Всё вышеупомянутое не гипотеза, а паттерны из официальной документации TypeSafe, я добавил только свои цифры. Фильтр инъекций - это их guardrails: экранирование сообщений, входящих в LLM-приложение и выходящих из него, с оценкой серьёзности. Реранкер - cookbook про классификацию пассажей для RAG: отсеять нерелевантное, пометить противоречащее вопросу до того, как это увидит генеративная модель. Уверенность как сигнал эскалации - их же confidence-gated routing: уверенное решение автоматом, неуверенное - человеку или тяжёлой модели.
От себя добавлю сценарии, где у меня это запрошено на следующий спринт: проверка цитат в готовых текстах против первоисточника, маршрутизация входящих заявок между обработчиками, извлечение значений из заранее распарсенных документов. Общий знаменатель: везде нужен вердикт с вероятностью, а не сгенерированный абзац.
Экономика
`весь сеанс: 57 вызовов, 24 397 входных токенов = $0.001
тариф: $0.042 за миллион входных, выходные - 0
скорость: 1200 запросов/мин, 98 мс/элемент на батче`
Для сравнения: один chat-LLM вызов классификации - это секунды задержки, риск галлюцинаций формата и на порядок выше цена за тот же вердикт.
Где такая модель не нужна
Она не пишет текст - проза, суммаризация и код мимо. Не дублирует решённое: спам-фильтр почтового клиента - обученный классификатор, второй такого же рода не нужен. Не считает числа и не предсказывает значения - только выбирает из заданных опций. Не принимает картинки и аудио. И не заменяет обученные классификаторы там, где есть размеченные данные: своя обученная модель на своём потоке и быстрее, и бесплатнее.
Грабли
Русский текст модель понимает, но основной язык обучения английский, и на пограничных русских случаях уверенность занижена - порог каскада калибровать на своей выборке, не брать с потолка.
Заголовок Authorization не терпит кириллицы. Если ключ хранится в файле с русскими комментариями - не читайте файл целиком, urllib упадёт с latin-1 encode error.
Модель стоит пиновать по версии (jev-1.13.0), а не брать alias: пороги калибруются под конкретный снапшот, а alias переезжает при релизах.
Ссылки
Продолжение серии: Матрица Эйзенхауэра на модели решений - часть 2, 100 писем за 13 секунд
Документация TypeSafe | Паттерны применения | HTTP API | Скилл для агентов
Подписывайся: @hermesagentru