Дешёвый предфильтр перед Claude Sonnet собирается из двух частей: модели Jev от TypeSafe, которая вместо текста возвращает вероятности по закрытым вопросам, и обычного условия if, которое сравнивает эту вероятность с порогом. Материал, не прошедший порог, до дорогой модели не доходит, поэтому лимит Sonnet расходуется только на то, что действительно стоит разбора.
Jev доступен через Cloudflare Workers AI под именем typesafe/jev. Он не пишет текст, а отвечает на заранее заданные вопросы: подходит ли материал, к какой категории относится, насколько срочный. Ответ всегда лежит в заданном списке вариантов, его не нужно разбирать регулярками.
Главный вывод опубликованного кейса: формулировка вопроса значит больше, чем сама модель. Общий вопрос про «полезность» дал AUC 0,46, то есть уровень случайного угадывания. Вопрос, переписанный через реальные причины отказа, дал AUC 0,95.
Задача: дорогая модель тратит лимит на мусор
Конвейер автора кейса выглядит так. Всё интересное за день, рилсы, посты и ссылки на репозитории, сохраняется в Telegram. Раз в сутки скрипт забирает новое, и Claude Sonnet пишет по каждому материалу разбор-инструкцию. Второй проход в роли редактора решает, публиковать разбор или отправить в архив. Описание кейса и логики конвейера приведено в исходном разборе на Habr.
Проблема в пропорциях. Когда автор разметил 67 материалов, лишними для блога оказались 28. Это 42% потока: Sonnet писал по ним полный разбор, а редактор потом выбрасывал готовую работу.
Sonnet работает через подписку Claude Code, поэтому экономия идёт в первую очередь по недельному лимиту, а не по деньгам. Однажды лимит кончился посреди недели, и всё, что на нём держалось, молча встало. Цель предфильтра сформулирована прямо: дёшево отсеивать очевидный мусор ещё до большой модели.
Что такое Jev и почему это модель для закрытых вопросов
Jev выпустил стартап TypeSafe 15 сентября 2026 года. Это модель для закрытых вопросов: на вход подаётся текст и словарь вопросов, на выходе приходят значения с вероятностями вместо абзаца текста. Все вопросы про один текст считаются за один проход, поэтому добавление новых вопросов почти не растягивает задержку.
Для фильтра это даёт три практических свойства. Ответ всегда из заданного списка. Вероятность сравнивается с порогом обычным if. Логика решения остаётся в детерминированном коде, а не в разборе свободного текста через регулярки. Подробнее о том, как устроены примитивы Choice, Noul и Score и почему один HTTP-вызов заменяет десятки обращений к LLM, разобрано в материале про модель, которая не пишет текст, а принимает решения.
Правильность ответа при этом никто не обещает. По замерам самой TypeSafe ответы Jev совпадают с эталоном из больших моделей примерно в двух случаях из трёх, то есть около 68%. Это не замена дорогой модели, а способ снять с неё часть нагрузки.
Три типа вопросов: noul, choice, score
- noul возвращает вероятность «да» в диапазоне от 0 до 1. Для предфильтра это основной тип: материал подходит или нет.
- choice выбирает один вариант из вашего списка, до 255 вариантов, и отдаёт вероятность каждого плюс confidence. Годится, когда нужно не просто отсеять, а разложить поток по категориям: тип материала, причина отказа, рубрика блога.
- score оценивает по упорядоченной шкале. Пригодится, если решение не бинарное: откровенный мусор, слабый материал, сильный материал.
Для большинства предфильтров хватает noul. Choice добавляет понятную причину отсева: по вероятностям видно, что именно смутило модель. Score полезен, когда решение принимается по нескольким уровням, а не по одному порогу.
Подключение Jev через Cloudflare Workers AI и AI Gateway
Jev есть в Cloudflare Workers AI под именем typesafe/jev с пометкой Zero data retention. Когда автор кейса пробовал, TypeSafe новых пользователей не регистрировала, поэтому Cloudflare был практическим путём доступа к модели. Русский язык Jev понимает нормально: вопросы и варианты можно писать по-русски.
Вызов это обычный POST-запрос с телом, где есть модель, состояние и словарь вопросов:
curl -X POST \
"https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev",
"input": {
"state": "текст материала",
"questions": {
"urgency": {"type": "noul", "instructions": "Сообщение срочное?"}
}
}
}'
Оплата и лимиты: почему нужен предоплаченный баланс AI Gateway
Платить можно только с предоплаченного баланса AI Gateway. Бесплатный лимит Workers AI на партнёрские модели не распространяется, и без баланса вызов вернёт ошибку Insufficient balance с кодом 2021. Совет простой: пополнить баланс заранее, до того как конвейер начнёт работать по расписанию, иначе ночной прогон упадёт целиком, а не постепенно.
Разбор ответа: где лежат вероятности
Ответ в Cloudflare Workers AI лежит на уровень глубже, чем в документации TypeSafe: result.result.answers. Если писать парсер по документации провайдера модели, он вернёт пустоту, и это самая частая точка отладки при первом подключении. Дальше всё тривиально: достать вероятность и сравнить с порогом.
Как встроить предфильтр в конвейер перед Claude Sonnet
Jev не заменяет Sonnet, а снимает с него часть работы. Материал из Telegram сначала уходит в дешёвую модель, и только прошедшие порог попадают в очередь на разбор. Sonnet по-прежнему пишет текст, Jev решает, стоит ли его писать вообще.
Решение принимается по вероятности. Порог держат в диапазоне 0-0,4, а не выкручивают ближе к единице: так фильтр не начинает рубить всё подряд из-за случайной высокой вероятности. Логика простая: всё, что ниже порога, идёт в архив, всё, что выше, идёт к большой модели. Как подбирать такие пороги на собственных размеченных данных и в каких сценариях экономия заметнее всего, разобрано в материале о 16 000 вызовов Jev на открытых и внутренних данных.
Предохранители: таймаут, кеш и возврат отсеянного
- При ошибке или таймауте материал уходит к большой модели. Логика fail-open: сбой дешёвой модели стоит денег, но не теряет материал.
- Ответы кешируются, поэтому повторный прогон по тем же материалам не оплачивается второй раз.
- Отсеянное можно вернуть, если фильтр ошибся: материалы не удаляются безвозвратно.
- Порог ограничен диапазоном 0-0,4, что защищает от слишком агрессивной отсечки.
Смысл предохранителей в одном: конвейер не должен молча ломаться и терять материалы. Автоматический ночной прогон, который падает без уведомления, хуже отсутствия автоматизации, потому что о потере узнаёшь через неделю.
Формулировка вопроса важнее модели: AUC 0,46 против 0,95
Первый вопрос был общий: что-то вроде «материал полезен для блога». AUC 0,46 означает, что фильтр разделял полезное и мусор почти случайно, то есть был бесполезен. Причина понятна: у абстрактной «полезности» нет признаков в тексте. Один пост про нейросети выглядит полезным, другой, почти такой же по форме, уже нет, и модель не может угадать, что решит редактор.
Переписанный вопрос дал AUC 0,95. Разбор кейса с обоими замерами описывает ту же механику: вопрос стал про наблюдаемые причины отказа, а не про вкус. Проверка шла на размеченной выборке из 67 материалов, где 28 оказались лишними для блога.
Как переписать вопрос, чтобы фильтр заработал
Замените абстракцию на признаки, которые видно в тексте. Вместо «полезен ли материал» вопрос строится вокруг конкретных причин, по которым материал уходит в архив: это реклама, это дубликат уже разобранного, это не про AI, это слишком общее описание без деталей. Каждую причину можно проверить по самому тексту, и именно поэтому фильтр начинает работать.
Правило простое: если причину отказа нельзя объяснить двумя предложениями, её нельзя и спросить у модели. Формулировка на русском работает так же, как на английском: вопросы и варианты можно писать по-русски. Общие принципы построения примитивов Choice, Noulli и Score разобраны в материале про System One модели и AI-примитивы в коде.
Экономика: 26 вызовов за $0,0028 за две недели
Вход Jev стоит $0,042 за миллион токенов, выход бесплатный, потому что текста на выходе нет. Журнал за две недели показал 26 вызовов примерно на $0,0028. Итоги первых двух недель работы фильтра приведены в исходном разборе кейса.
Честная оценка: как денежная экономия это ничто, сумма символическая. Ценность в другом. Sonnet работает через подписку Claude Code, и её недельный лимит конечен. Предфильтр переводит этот редкий ресурс на материалы, которые проходят порог, поэтому большая модель перестаёт писать разборы, которые редактор потом выбрасывает. Экономия измеряется не в долларах, а в сохранённой ёмкости подписки.
Такой размен имеет смысл, когда поток материалов большой, а доля мусора высокая. В кейсе речь шла о 42% лишних разборов из разметки. Если мусора мало, выигрыш будет меньше, а сложность конвейера останется той же. Сопоставление Jev с LLM по стоимости и скорости приведено в разборе модели без текста на выходе.
Ограничения Jev: когда предфильтр не подходит
Ограничения стоит назвать прямо, до того как вы начнёте строить конвейер.
- Открытые задачи, где нет закрытого набора вариантов ответа. Спросить «в чём суть материала» нельзя, вопрос должен иметь конечный список ответов.
- Вкусовые решения без чётких признаков. Если два редактора не сойдутся в оценке материала, модель тоже не сойдётся.
- Счёт и даты. Точные числа и временные интервалы лучше не поручать фильтру такого класса.
- Чувствительные данные. Решение о передаче таких данных провайдеру принимается отдельно, с учётом требований к хранению.
К этому добавляется точность: совпадение с эталоном из больших моделей около 68%, то есть примерно в трети случаев ответ может расходиться с тем, что решила бы большая модель. Правильность ответа никто не обещает. Именно поэтому предохранители в конвейере нужны не для красоты: при ошибке или таймауте материал уходит к большой модели, а отсеянное можно вернуть. Порог в диапазоне 0-0,4 и кеш ответов работают по той же логике: дешёвая модель фильтрует поток, но не принимает окончательное решение в одиночку.
Стоит ли пробовать: кому подойдёт такой предфильтр
Предфильтр на Jev оправдан, если у вас есть конвейер на дорогой модели с лимитами, поток материалов большой и заметная доля содержимого заведомо мусор. Тогда дешёвая модель снимает нагрузку, а вы платите за инференс доли цента.
Не подойдёт он там, где задачи открытые, вкусовые или связаны со счётом, датами и чувствительными данными. Также не стоит ставить Jev туда, где нет размеченной выборки: без неё проверить формулировку вопроса и порог невозможно.
Доступ: Jev есть в Cloudflare Workers AI под именем typesafe/jev, с оплатой с предоплаченного баланса AI Gateway. Когда автор кейса пробовал, TypeSafe новых пользователей не регистрировала, поэтому рассчитывать стоит на путь через Cloudflare, а не на прямой доступ к API провайдера.
Порядок действий практичный и короткий. Разметьте 50-70 своих материалов, отметьте, какие из них действительно лишние. Сформулируйте вопрос через наблюдаемые причины отказа, а не через общую «полезность». Прогоните выборку и посмотрите на AUC, а не на отдельные примеры. И только после этого считайте экономику недельного лимита, потому что деньги здесь не главный аргумент.