Лестница исполнителей: сначала дешёвый, наверх — только с причиной
Кто делает задачу, должно следовать из вида задачи, а не из настроения. Начинайте с самого дешёвого уровня, который справится, и разрешайте подъём только по причине из короткого закрытого списка. Записывайте причину, чтобы потом посчитать, изменил ли старший вызов хоть что-то.
🎯 Для Руководитель команды, который распределяет работу между скриптами, дешёвыми и старшими моделями
- Четыре уровня от скрипта до старшего арбитра
- Почему подъём требует кода причины и как выглядит список
- Как измерить, окупается ли подъём
🪜 Идея
Без правила работа сама сползает к самому способному исполнителю, потому что ему доверяют. Он же самый дорогой и медленный. Лестница заменяет привычку правилом: у каждого класса задач есть входной уровень и потолок, и выбор делает код, а не модель.
Уровней у нас четыре. Нулевой — вообще без модели: линтер, скрипт, запрос к базе. Первый — недорогая модель для объёма. Второй — модель среднего уровня для более сложных одиночных задач. Третий — старший арбитр для редких решений.
🔑 Подъём требует причины
Шаг выше входного уровня разрешён только с одним из пяти кодов причины: детерминированная проверка не прошла, два младших запуска разошлись, задача — архитектурное решение, задача касается денежного пути или об этом попросил оператор. Любая другая причина отклоняется. «На всякий случай» в списке нет, потому что именно так дорогой исполнитель и оказывается делающим всё.
Две детали важны. Там, где задача — чистая проверка, упавшая проверка — это факт, а не повод звать старшего: скрипт сказал «нет», поэтому устраняйте причину. (Работа младшего, не прошедшая детерминированную проверку, — другой случай, и это одна из пяти причин.) А причина записывается в трассу вызова, чтобы леджер мог сказать не только, сколько стоил подъём, но и почему он случился.
📏 Потолки по измерению
Потолки стоимости вызова — не догадки. Мы взяли наибольшую наблюдённую стоимость вызова из тридцати дней трасс и поставили потолок вдвое выше для первого уровня и вчетверо — для второго и третьего. Потолок — детектор сбега, а не прайс: он ловит цикл задолго до счёта.
🔬 Что показывает леджер
Наш измеряющий транспорт записывает уровень и причину подъёма каждого вызова. На 3 ноября 2026, 21:53 UTC в нём было 10 062 строк первого уровня общей стоимостью $15,76 и 32 строк третьего уровня стоимостью $0,38. У второго уровня строк 0. 54 строк не имеют уровня; все они укладываются в три минуты 22 сентября 2026. Причина подъёма указана лишь у 18 строк, все — «просьба оператора», и стоят они на строках первого уровня. Ни у одной из 32 строк третьего уровня причины нет.
Это пробел в нашей собственной практике, найденный при написании страницы. Правило гласит, что вызов старшего требует кода причины, а леджер показывает вызовы старшего без неё. Мы ещё не выяснили, обошли ли эти вызовы маршрутизатор или были записаны до того, как поле стало обязательным, и гадать здесь не будем. Урок — сверять свой журнал со своим же правилом.
📉 Правило прекращения
Заранее мы решили, что закончит лестницу. Считаем долю вызовов второго и третьего уровня, изменивших результат. Если она остаётся ниже двадцати процентов шестьдесят дней, лестница схлопывается до двух уровней: старшие вызовы себя не окупают. Достаточно эскалаций для применения правила мы пока не собрали и говорим об этом прямо.
🛠️ Практика: напишите свою лестницу
- Перечислите классы задач, например: проверить файл, резюмировать тикет, просмотреть дизайн.
- Для каждого выберите входной уровень и потолок. Везде, где решить может скрипт, ставьте нулевой уровень первым.
- Напишите закрытый список причин подъёма. Не длиннее пяти.
- Пусть маршрутизатор отклоняет любой подъём без причины из списка и пишет причину в трассу вызова.
- Задайте потолки стоимости вызова по наибольшей реально виденной цене.
- Выберите правило прекращения и дату до начала.
✅ Проверьте себя
- Запросите вызов старшего без причины. Маршрутизатор отказывает.
- Вы можете перечислить подъёмы прошлой недели и причину каждого. Если у вызова старшего причины нет, вы знаете почему.
- Упавший прогон линтера не запускает вызов модели.
- Вы можете назвать долю вызовов старшего, изменивших результат, или сказать, что пока не можете.
🚧 Когда это не работает
- Слишком мало подъёмов. Правило про «долю, изменившую результат» требует выборки. При таком малом числе записанных причин это лишь тенденция.
- Причины, ставшие привычкой. Если каждый вызов пишет «архитектурное решение», список — украшение. Пересматривайте причины ежемесячно.
- Трудные задачи, которые стартуют сложными. Некоторые классы должны входить на высоком уровне. Скажите это в конфигурации.
- Дешёвый уровень, наносящий вред. Недорогая модель на задаче, требующей суждения, экономит мало и стоит доверия.
- Лестница без леджера. Если не писать уровень и причину, научиться ничему нельзя.
📊 Доказательства
| Что измерено | Строки, стоимость, уровень и причина подъёма в леджере нашего измеряющего транспорта |
| Когда | 3 ноября 2026, 21:53 UTC |
| Артефакт | База данных леджера транспорта: 10 062 строк первого уровня, 32 строк третьего, 18 строк с причиной; файл конфигурации лестницы и его тест |
| Ограничение | Леджер охватывает только измеряемую полосу. Правило прекращения ещё не применялось |
➡️ Дальше
Посчитайте цену уровней по материалу Расходы, бюджеты и лимиты и посмотрите, что меняет управление маршрутизацией, в Моделях и маршрутизации.
Источники
- Расходы, бюджеты и лимиты: бюджеты на задачу.
- Модели и маршрутизация: что меняет маршрутизация.
- Делить работу между агентами — и когда не стоит: рои.
- AI judging: почему «он говорит, что готово» — не приёмка: приёмка по проверкам.
🔗 Связи статьи
Открыть полный граф знаний ↗Связи опубликованных статей. Выберите узел, чтобы открыть статью у заголовка.
Связи статей · клавиатура / текст
Та же тема
- Векторная база — это карта, а не источник: чему нас научил поиск
- Когда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
- Как разбить большую задачу для дешёвой модели: урок 24 000 байт
- Навыки, MCP-инструменты и правила: три способа дать агенту возможности
- Восемь ошибок наших агентов в shell и git и правило на каждую
- Несколько агентов, один репозиторий: правила владения из реальных инцидентов
Следующие шаги
Связанные материалы
Векторная база — это карта, а не источник: чему нас научил поиск
Векторная база находит фрагменты, близкие по смыслу к вашему вопросу. Она не знает, какие из них верны или актуальны. Считайте каждое попадание указателем: откройте названный файл, сверьте хэш, а числа берите из артефакта, а не из найденного абзаца.
ИИ-агенты и MCP простыми словамиКогда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
Иногда вызов модели обрывается по таймауту, и вы не знаете, списал ли провайдер деньги. Никогда не записывайте это как ноль. Пометьте как неопределённое, остановите новые платные вызовы и пусть названный человек сверит это с выпиской провайдера. Отказы до генерации — исключение.
ИИ-агенты и MCP простыми словамиКак разбить большую задачу для дешёвой модели: урок 24 000 байт
Дешёвая модель хорошо справляется с одной небольшой чёткой задачей и плохо — с большой кучей. Мы ограничиваем задачу 24 000 байт и отклоняем большие до вызова любой модели. Режьте по единицам — один файл или одна страна на задачу — и проверяйте размер до запуска.
ИИ-агенты и MCP простыми словамиНавыки, MCP-инструменты и правила: три способа дать агенту возможности
Агенты получают способности по-разному. Правило ограничивает, что они делают, навык говорит, как делать работу, а MCP-инструмент позволяет вызывать функцию. У каждого свой риск, поэтому объявляйте все три в реестре и проверяйте тестом, что ничего не существует вне списка.
💬 Комментарии