В протоколе «Форма» каждый узел делает свою работу. Чтобы не тратить на подготовку лишнее, нужен независимый, быстрый и дешёвый выбор: какая готовая роль подходит этой задаче. Этот выбор у нас делает Jev, модель решений. Она не пишет текст, а возвращает типизированный ответ с вероятностями.
Каждый узел занят своим
Пять узлов делят работу так:
Intentдержит замысел и принимает результат.Specнарезает цель на задачи и собирает их в волны. За два-три захода он раскладывает несколько волн, поэтому работа идёт не вслепую, а по плану.Kitготовит окружение для исполнителя: роль, навык, инструмент, доступ, данные, модель. Сам он работу не делает, он готовит её.Runисполняет. Большую часть времени в протоколе работает именно он.Coreвыносит вердикт по кругу.
Самое важное слово здесь «готовит». Kit не исполнитель и не оценщик. Его продукт — роль: профиль с критериями «берёт / не берёт», навыками и допусками, по которому Run может сразу работать.
Проблема: Kit стоял на каждом шаге
Работа в проекте часто однотипна. Одна роль подходит для большинства однородных задач, и в проекте их накапливается десять или двадцать на разные виды работы: сборка страницы, текст, PHP-проба, проверка вида, механический прогон.
Раньше Kit вызывался на каждой карточке. Он читал задачу, сверял её с тем, что есть, и собирал снаряжение. В большинстве случаев ничего нового он не создавал: подходящая роль уже была, и он лишь подтверждал это. Такая работа копится с каждой карточкой, стоит токенов и времени, а прироста не даёт.
Решение очевидно: создать роль один раз и использовать её много раз. Но тогда возникает вопрос, кто и как выбирает роль под очередную задачу. Если выбирает сам Kit, мы возвращаемся к той же проходной будке. Выбирать должен независимый источник: быстрый, дешёвый и более точный, чем самооценка комплектовщика.
Отвес и Jev
Эту работу делает Отвес (Plumb). Это не шестой узел: он не берёт карточек, ничего не решает и ничего не подтверждает. Он читает очищенную карточку, нарезанную Spec, и каталог ролей и возвращает числа. Решение принимает Spec по порогам из PROJECT.md.
Почему «отвес»
Отвес — это нить с грузом: она показывает истинную вертикаль, и по ней проверяют, ровно ли стоит стена. Он не строит и не чинит, а только говорит: ровно или перекошено. Так и здесь. «Форма» выстраивает конструкции из карточек, ролей и узлов, и Отвес смотрит, ровно ли всё легло: подходит ли роль задаче, ясна ли сама задача. Чтобы структура держалась как дом, а не расползалась, её нужно всё время сверять по отвесу.
Отвес меряет вертикаль, а горизонталь меряет уровень: оба прибора ловят перекосы, каждый по своей оси. Здесь Отвес — это функция замера: подходит ли роль задаче и ясна ли сама задача. Jev — не сам отвес, а тот, кто замер выполняет, то есть исполнитель Отвеса. Раньше эту работу делала встроенная малая модель, и если исполнителя заменить, Отвес останется Отвесом. Отвес — прибор, Jev — рука, которая его держит.
Три вопроса за один вызов
Исполнителем Отвеса может быть Jev. Он отвечает на три вопроса за один вызов:
- Какая роль ближе (
choice): роль и вероятность по каждой роли. - Насколько ясна задача (
score): оценка от 0 до 4. - Берёт ли ведущая роль эту задачу (
noul): вероятность от 0 до 1.
Дальше два исхода:
- Роль подходит. Карточка идёт прямо в
Run, роль записана в её снаряжение.Kitне вызывается вообще. - Подходящей роли нет. Только тогда подключается
Kit. Он создаёт точную роль под этот вид работы и проверяет её тем же вызовом, и ориентиром ему служит оценка Jev.
Так Kit используется по необходимости. Он создаёт роли, а выбирает между ними независимая сторона.
Что такое Jev
Jev — флагманская модель компании TypeSafe и первая из моделей класса System One. Название взято из книги Даниэля Канемана «Думай медленно… решай быстро»: система 1 — это быстрое интуитивное суждение, система 2 — медленное и обдуманное. System One делает быстрые, узкие, «первым взглядом» решения, которые можно сразу использовать в программе.
Главная идея TypeSafe: языковые модели созданы, чтобы писать текст для человека. Когда код нуждается в суждении, приходится заставлять модель выдать структуру, а потом разбирать её ответ обратно. Jev убирает этот обходной путь: он принимает текст (строки, JSON, массивы текста) и возвращает типизированные значения и распределения вероятностей. Ветвиться, сортировать и маршрутизировать можно прямо по ним.
Вопросы бывают трёх типов, их называют примитивами:
| Примитив | Вопрос | Что возвращает |
|---|---|---|
| Choice | Какой из вариантов? | вариант, вероятность каждого, уверенность |
| Score | Где на шкале? | позицию, вероятность каждого уровня, уверенность |
| Noul | Верно ли утверждение? | вероятность «да» (0–1) |
Калиброванные вероятности
Jev обучен так, чтобы вероятности отражали реальную неопределённость. Калибровка измеряется по группам предсказаний и не гарантирует, что отдельный ответ верен. Для Отвеса это важно: порог уверенности имеет смысл, потому что 0,9 здесь означает именно «уверен», а не «так вышло».
Уверенность как сигнал «не знаю»
Каждый ответ choice и score несёт confidence — число от 0 до 1. Если вся вероятность сосредоточена на одном варианте, оно близко к 1, а если распределена поровну, близко к 0. По документации TypeSafe, способность честно сказать «не уверен» — основа системы, которой можно доверять. Предлагается три пути:
- Высокая уверенность — действовать автоматически.
- Средняя — действовать осторожно: подтвердить или проверить.
- Низкая — не действовать: отдать человеку, уточнить или перейти на другую систему.
У нас это ложится на маршрут один к одному: высокая — карточка идёт в Run, низкая — к Kit создать роль или к Spec переформулировать. Подробности по порогам задаёт человек в PROJECT.md.
Атомарные вопросы и параллельность
Каждый вопрос в запросе оценивается параллельно и независимо от остальных, по одному и тому же описанию ситуации. Поэтому добавление вопросов почти не меняет время ответа и не создаёт «перегруза контекста». Документация советует задавать узкие вопросы, на которые знающий человек ответил бы за пару секунд, а составные суждения раскладывать на отдельные вопросы и собирать в коде. Так и устроен Отвес: три отдельных вопроса, а решение складывает Spec.
Ещё одна деталь из документации: модель видит названия вариантов и их описания, поэтому описания должны чётко отличать один вариант от другого. В нашем случае роль описывается строками «берёт / не берёт», и это же служит критерием для Jev. Хорошо написанная роль — это и хорошо читаемый вариант выбора.
Цена и ограничения
- Модель
typesafe/jev-1.13, вызывается через OpenRouter Decisions API (POST /api/alpha/decisions), а не черезchat/completions. - Платится только вход: $0,042 за миллион токенов, выход бесплатный. Каждый ответ содержит
usage.cost, то есть реальную цену вызова в долларах. - Контекст — порядка 32 тысяч токенов (по документации) на описание ситуации и вопросы.
- Принимает только текст. Изображения, аудио и видео пока не поддерживаются.
- Не пишет текст, код и объяснений. Если нужен письменный довод, решение можно передать чат-модели, а при низкой уверенности — человеку.
Как это устроено в протоколе
Spec нарезает (волны, 2–3 захода) → очистка → Jev → choice / score / noul → Spec сверяет с порогами
├─ роль подходит → Run
├─ роли нет → Kit создаёт роль → Run
└─ низкая ясность → Spec переформулирует один разОчистка идёт до отправки. Скрипт, а не модель, собирает вход только из пяти полей карточки. Значения из VARS/ и .env он заменяет именами, адреса, токены и пути маскирует. Если остаётся что-то похожее на секрет, отправки нет, а карточка идёт к человеку (запрет 17).
Откат вместо падения. Нет ключа, мост вернул ошибку или очистка отказала. Тогда вызывающий использует встроенную малую модель, а причина записывается в историю карточки. Попытка не записывается как показание Jev.
Человек держит рычаги. Исполнитель выбирается словом в PROJECT.md (haiku по умолчанию, jev по решению человека). Лимит вызовов на цикл и пороги задаёт человек. Исполнитель получает право решать только после замера на закрытых карточках.
Что это даёт
Kitперестаёт быть проходной будкой. Он создаёт роли, и только когда подходящей нет. Перед созданием новой ролиKitпроверяет её на дубль тем же вызовом: если существующая проходит порог, её расширяют, а не копируют. Поэтому каталог растёт аккуратно, а доля карточек, которым нуженKit, со временем падает.- Большую часть времени работает
Run. Подготовка стала разовой, исполнение массовым. - Выбор независим. Jev не участвовал в нарезке и не будет собирать роль, поэтому его «такой роли нет» честнее самооценки комплектовщика.
- Дёшево и быстро. Один вызов с тремя вопросами стоит доли цента: вход карточки с каталогом ролей — несколько тысяч токенов при $0,042 за миллион. Точную цену даёт
usage.cost, она пишется в строку расхода. - Расхождения превращаются в диагноз. Каждое показание остаётся строкой в истории карточки.
Coreоценивает самого оценщика: сколько карточек принято с первой попытки, где Jev уверенно назвал роль, а собрали иначе, где низкая оценка пришлась на ясную задачу. По этому он выносит вердикт, насколько эффективно прошёл выбор, достаточен ли каталог ролей и верны ли пороги.
Итог — разделение труда: Spec режет, Jev выбирает роль, Kit создаёт роли, Run исполняет, Core судит, насколько хорош был выбор.
Чего Jev не делает
Jev не объясняет свои ответы, и для Отвеса это нормально: он по закону не пишет текст. Защита от ошибки устроена иначе. Это порог уверенности, откат на встроенную модель, проверка результата узлом Intent и вердикт Core. Согласие Отвеса приёмку не заменяет.
Модель новая, поэтому в протоколе по умолчанию остаётся haiku, а jev включается решением человека после замера. Цифры по точности мы опубликуем, когда они появятся, а до тех пор их не заявляем.
Как попробовать
- Обновите плагин «Формы» до свежей версии.
- Положите
OPENROUTER_API_KEYв.env. - Скажите агенту «подключи Jev»: он переключит исполнителя Отвеса.
- Задайте лимит вызовов на цикл и сделайте замер на закрытых карточках: подготовьте пакет, прогоните его встроенным исполнителем, посчитайте совпадения.
- Пороги для Jev ставьте только по итогам замера.
Подробности — в справочнике схемы, в разделе про Отвес. Документация Jev — на сайте TypeSafe и на OpenRouter.




Комментарии