Ранас Мукминов – Оркестрация ИИ-агентов. Claude Opus 4.7 (страница 63)
Сужение роли даёт несколько различимых выгод. Важно держать их раздельно, потому что в конкретной задаче нужны не все сразу, и платить полную цену специализации ради одной из них — частая ошибка.
Узкий промпт сокращает пространство поведений агента. Агент, которому сказано «ты ревьюер, твоя задача — найти дефекты в этом диффе и вернуть список, ты не правишь код», ведёт себя в более узком коридоре, чем агент, которому сказано «улучши этот код». Второй может переписать архитектуру, сменить зависимости, отрефакторить несвязанные участки — всё это «улучшения» с его точки зрения. Первый ограничен ролью настолько, что отклонения легче заметить и легче запретить.
Предсказуемость — это не про среднее качество, а про дисперсию. Универсальный агент в среднем может решать задачу не хуже, но разброс его поведения шире: на одних входах он делает ровно нужное, на других уходит в сторону. Для системы, которую надо эксплуатировать и в которой отклонение стоит дороже, чем недобор качества, узость роли ценна именно сужением хвостов распределения.
Чем уже роль, тем определённее форма её результата, и тем дешевле его проверить. Выход ревьюера — список замечаний; его можно проверить на формат, на отсутствие правок кода, на то, что каждое замечание привязано к строке. Выход универсального агента, которому поручили «разобраться с задачей», — это произвольная комбинация кода, текста, изменений конфигурации и побочных действий, и для его проверки нужен почти такой же интеллект, как для его создания. Узкая роль приближает агента к контракту с проверяемыми постусловиями (см. главу 18) — а проверяемость выхода на стыке между агентами есть основа всей отказоустойчивости роя.
Узкая роль позволяет дать агенту минимальные права под его задачу — принцип least privilege в применении к рою (см. главу 88). Ревьюеру не нужен доступ на запись; агенту-сборщику отчёта не нужны права на выполнение кода; маршрутизатору не нужен доступ к внешним системам вовсе. Специализация делает возможной такую раскладку прав, при которой компрометация одного агента (например, через prompt injection — см. главу 86) даёт противнику минимум возможностей. Универсальный агент, наоборот, концентрирует права: он умеет всё, и захвативший его умеет всё. Это одна из немногих выгод специализации, которая почти не имеет обратной стороны, — поэтому раскладку прав по ролям стоит делать даже там, где по остальным критериям специализация спорна.
За узким агентом проще следить человеку. Если роль одна — «этот агент только пишет тесты», — оператор знает, что искать в его выводе и какие действия для него аномальны. Универсальный агент требует от надзора понимания всего, что агент мог сделать, что при масштабе превращается в нагрузку, которую человек не вытягивает (см. главу 96). Узкие роли дробят надзор на понятные куски — ценой того, что кусков становится больше.
Специализированному агенту нужен только контекст его роли, а не вся история задачи. Тестировщику не нужно знать, почему было принято продуктовое решение; ему нужен код и спецификация поведения. Это позволяет давать каждому агенту меньший, более релевантный контекст, что прямо влияет и на стоимость (меньше токенов на вызов — см. главу 59), и на качество (меньше нерелевантного материала, отвлекающего модель). Универсальный агент несёт весь контекст задачи на каждом шаге, и с ростом задачи это упирается в пределы окна.
Эти пять выгод не независимы, но и не сводятся к одной. Предсказуемость и проверяемость — про корректность; локализация прав — про безопасность; управляемость — про надзор; сжатие контекста — про стоимость и масштаб. Решая, специализировать ли роль, полезно спросить, какая из выгод реально нужна. Если задача требует только локализации прав, её часто можно получить, не дробя агента на много ролей, — достаточно сузить права одного агента, не разрезая его на конвейер.
Каждая из выгод оплачивается. Издержки специализации тоже надо держать раздельно, потому что они бьют по разным свойствам системы.
Главная издержка прямо следует из центрального тезиса книги: координация всегда стоит (см. главу 5). Каждая граница между двумя специализированными ролями — это handoff, и каждый handoff требует работы: упаковать контекст на стороне отправителя, передать его, распаковать и восстановить на стороне получателя. Эта работа стоит токенов, латентности и — что важнее — несёт риск потери. Чем больше ролей, тем больше стыков; число потенциальных границ между ролями растёт быстрее, чем число ролей. Система из десяти узких агентов имеет на порядок больше стыков, чем система из двух, и каждый стык — место, где контекст может потеряться или исказиться.
Это переворачивает наивную экономику специализации. Кажется, что десять узких агентов дешевле одного универсального, потому что каждый несёт меньший контекст. Но к стоимости работы каждого агента добавляется стоимость передач между ними, и на достаточно связной задаче суммарная стоимость передач превосходит экономию на контексте. Узкая специализация выгодна по токенам только тогда, когда подзадачи слабо связаны и передавать между ними нужно мало.
Handoff лоссиен по своей природе. Отправляющий агент решает, что включить в передаваемый артефакт, и неизбежно отбрасывает то, что считает нерелевантным, — а получающий агент не знает, что было отброшено, и не может переспросить дёшево. У людей этот зазор закрывается общим фоном и дешёвым уточняющим вопросом; у роя — нет. Специализация умножает число передач, а значит, и число точек, где из контекста выпадает что-то, что окажется важным ниже по течению. Эта тема подробно разбирается в главе 47; здесь важно лишь, что потеря контекста — прямое следствие дробления роли, а не случайный дефект реализации.
Когда роль делят на несколько, между ролями возникают зоны, за которые формально не отвечает никто, — зазоры (см. главу 20). Универсальный агент, отвечающий за задачу целиком, по построению не оставляет дыр: всё, что относится к задаче, — его. Как только ответственность дробится, появляется вопрос «а кто обрабатывает случай на границе между планировщиком и исполнителем», и если ответ не задан явно, случай не обрабатывает никто. Чем тоньше нарезаны роли, тем больше границ и тем больше потенциальных зазоров. Специализация не устраняет работу на стыках — она делает её ничьей, пока кто-то не назначит её явно.
Узкая роль хороша ровно в своей области и беспомощна за её пределами. Агент-ревьюер, столкнувшись с входом, который не является диффом, не имеет полномочий и контекста, чтобы разумно среагировать; в лучшем случае он вернёт ошибку, в худшем — попытается отработать вне своей компетенции и сделает это плохо. Универсальный агент гибче: он не упирается в границу роли, потому что граница широка. На задачах с большой долей нетипичных, плохо предсказуемых случаев жёсткость специализации оборачивается хрупкостью — рой ломается на стыках, которых не предусмотрел проектировщик.
Набор узких ролей труднее менять. Изменение формата выхода одной роли требует согласованного изменения всех ролей, которые этот выход потребляют, — иначе ломается совместимость контрактов (см. главу 22). Универсальный агент инкапсулирует все эти переходы внутри себя: меняя его, не нужно согласовывать границы, потому что границ внутри нет. В долгоживущей системе стоимость эволюции набора специализированных ролей может превзойти любую разовую выгоду от их узости.
Если специализированные роли выстроены в конвейер (см. главу 10), их работа сериализуется: получатель не может начать, пока отправитель не закончил и не передал артефакт. Универсальный агент, делающий ту же работу внутри себя, не платит за внутренние передачи латентностью сетевого взаимодействия и не ждёт на границах. Специализация, нарезанная как последовательность, обменивает параллелизм на структуру — и если стадии связаны строго последовательно, выигрыша в скорости нет вовсе, а накладные расходы на передачи есть.
Сопоставление двух наборов свойств удобно держать перед глазами.
Свойство | Узкая специализация | Универсальный агент
Дисперсия поведения | Низкая, поведение в коридоре | Высокая, широкие хвосты
Проверяемость выхода | Высокая, форма определена | Низкая, выход произволен
Раскладка прав | Минимальные права по роли | Концентрация прав
Поверхность атаки на агента | Узкая | Широкая
Число стыков и handoff | Растёт быстрее числа ролей | Внутренние переходы, стыков нет
Потеря контекста на передачах | Накапливается с числом ролей | Отсутствует внутри агента
Зазоры в ответственности | Появляются между ролями | По построению отсутствуют
Поведение на нетипичном входе | Хрупкое, упирается в границу | Гибкое в пределах широкой роли
Стоимость эволюции | Согласование всех контрактов | Инкапсулировано в одном агенте
Контекст на вызов | Малый, релевантный роли | Полный контекст задачи
Таблица показывает, что специализация и универсальность — не «лучше/хуже», а обмен одного набора рисков на другой. Узость переносит сложность на стыки и платит координационным налогом; ширина концентрирует сложность и права внутри одного недетерминированного узла. Выбор — это решение, какой набор рисков система может себе позволить.