Модель, которая не говорит, а решает: как Jev помогает Отвесу выбирать роль

Эдвард МаммАвтор 9 мин чтения 0 комментариев
Оранжевый отвес висит внутри светящегося каркаса дома, вокруг парят четыре мира — обложка статьи про Отвес и Jev
Оглавление
  1. Каждый узел занят своим
  2. Проблема: Kit стоял на каждом шаге
  3. Отвес и Jev
  4. Что такое Jev
  5. Как это устроено в протоколе
  6. Что это даёт
  7. Чего Jev не делает
  8. Как попробовать

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

Каждый узел занят своим

Пять узлов делят работу так:

  • Intent держит замысел и принимает результат.
  • Spec нарезает цель на задачи и собирает их в волны. За два-три захода он раскладывает несколько волн, поэтому работа идёт не вслепую, а по плану.
  • Kit готовит окружение для исполнителя: роль, навык, инструмент, доступ, данные, модель. Сам он работу не делает, он готовит её.
  • Run исполняет. Большую часть времени в протоколе работает именно он.
  • Core выносит вердикт по кругу.

Самое важное слово здесь «готовит». Kit не исполнитель и не оценщик. Его продукт — роль: профиль с критериями «берёт / не берёт», навыками и допусками, по которому Run может сразу работать.

Проблема: Kit стоял на каждом шаге

Работа в проекте часто однотипна. Одна роль подходит для большинства однородных задач, и в проекте их накапливается десять или двадцать на разные виды работы: сборка страницы, текст, PHP-проба, проверка вида, механический прогон.

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

Решение очевидно: создать роль один раз и использовать её много раз. Но тогда возникает вопрос, кто и как выбирает роль под очередную задачу. Если выбирает сам Kit, мы возвращаемся к той же проходной будке. Выбирать должен независимый источник: быстрый, дешёвый и более точный, чем самооценка комплектовщика.

Отвес и Jev

Эту работу делает Отвес (Plumb). Это не шестой узел: он не берёт карточек, ничего не решает и ничего не подтверждает. Он читает очищенную карточку, нарезанную Spec, и каталог ролей и возвращает числа. Решение принимает Spec по порогам из PROJECT.md.

Почему «отвес»

Отвес — это нить с грузом: она показывает истинную вертикаль, и по ней проверяют, ровно ли стоит стена. Он не строит и не чинит, а только говорит: ровно или перекошено. Так и здесь. «Форма» выстраивает конструкции из карточек, ролей и узлов, и Отвес смотрит, ровно ли всё легло: подходит ли роль задаче, ясна ли сама задача. Чтобы структура держалась как дом, а не расползалась, её нужно всё время сверять по отвесу.

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

Три вопроса за один вызов

Исполнителем Отвеса может быть Jev. Он отвечает на три вопроса за один вызов:

  1. Какая роль ближе (choice): роль и вероятность по каждой роли.
  2. Насколько ясна задача (score): оценка от 0 до 4.
  3. Берёт ли ведущая роль эту задачу (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 включается решением человека после замера. Цифры по точности мы опубликуем, когда они появятся, а до тех пор их не заявляем.

Как попробовать

  1. Обновите плагин «Формы» до свежей версии.
  2. Положите OPENROUTER_API_KEY в .env.
  3. Скажите агенту «подключи Jev»: он переключит исполнителя Отвеса.
  4. Задайте лимит вызовов на цикл и сделайте замер на закрытых карточках: подготовьте пакет, прогоните его встроенным исполнителем, посчитайте совпадения.
  5. Пороги для Jev ставьте только по итогам замера.

Подробности — в справочнике схемы, в разделе про Отвес. Документация Jev — на сайте TypeSafe и на OpenRouter.

ПоделитьсяTelegramXVKПочта

Эдвард Мамм Автор

Все записи автора ↗

Обсудить в сообществе

Обсуждений пока нет — начните первое: вопросы по протоколу, разборы циклов, находки.

Начать обсуждение↗

Партнёр демо

Здесь будет партнёр Формы

Инструменты и сервисы, с которыми протокол работает в связке. Слот демонстрационный — реальные партнёры появятся позже.

Сайт партнёра↗

Открытый код · бесплатно

Поставьте протокол
в свой проект.

Плагин ставит доску, роли пяти узлов и файл правил в ваш репозиторий — дальше работают Claude Code, Codex или Gemini.

Скачать на GitHub ↗

Комментарии

Подписаться
Уведомить о
0 Комментарий
Старые
Новые Популярные

Рассылка Формы

Немного Формы — в вашей почте.

Письмо раз в две недели: разборы, релизы, находки сообщества.

Рассылка Формы

Без спама · отписка в один клик

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x