18+
реклама
18+
Бургер менюБургер меню

Ранас Мукминов – Оркестрация ИИ-агентов. Claude Opus 4.7 (страница 2)

18

Третье свойство — необратимость наполнения внутри сессии. Контекст одного агента монотонно растёт: всё, что попало в окно, остаётся в нём до конца сессии или до принудительной очистки. Агент не может выборочно забыть тупиковую ветку, сохранив остальное, — у одного контура нет механизма частичного сброса состояния без потери связности. Это делает длинную сессию ловушкой с накоплением: каждая неудачная попытка не только не приближает к решению, но и ухудшает условия для следующих попыток, оставляя след в общем окне.

Из этих свойств вырастают конкретные отказы, которые в эксплуатации выглядят как «агент поглупел к концу задачи».

Вытеснение релевантного. Когда история перерастает окно, оболочка вынуждена что-то отбросить или сжать. Любая стратегия — отсечение старого, суммаризация, выборочное удаление вызовов инструментов — теряет информацию. Агент перестаёт видеть решение, принятое в начале сессии, и противоречит сам себе: переоткрывает уже закрытый вопрос, повторяет ранее отвергнутый подход, нарушает инвариант, который сам же установил тремя сотнями шагов ранее.

Context rot — накопление шума. Длинная сессия наполняет окно не только полезным, но и мусором: неудачными попытками, многословным выводом инструментов, тупиковыми ветками рассуждений. Этот шум не нейтрален. Он конкурирует за внимание модели с сигналом и снижает отношение сигнала к шуму на каждом следующем шаге. Агент, который двести шагов назад работал чисто, к концу сессии буксует не потому, что задача стала труднее, а потому, что его собственный контекст загрязнён историей борьбы с ней.

Срыв связности при сжатии. Автоматическая суммаризация истории, которой оболочки спасаются от переполнения, — это потеря с округлением. Сжатие сохраняет то, что суммаризатор счёл важным, и теряет нюанс, который окажется критичным позже. Агент после компрессии работает с конспектом собственного прошлого, а не с прошлым, и расхождение между конспектом и реальностью — источник трудноуловимых ошибок.

Иллюстративный, обобщённый сценарий показывает, как это выглядит в работе. Один агент ведёт длительную задачу: разбирается в крупном незнакомом репозитории, чтобы внести согласованное изменение в несколько модулей. На первой трети сессии он читает десятки файлов, выясняет соглашение об именовании, формат конфигурации, инвариант, который нельзя нарушать. Контекст быстро наполняется содержимым файлов, выводом команд, рассуждениями. К середине сессии окно близко к насыщению, оболочка начинает сжимать раннюю историю. К концу сессии агент вносит правку, которая нарушает то самое соглашение об именовании, выясненное в начале: в сжатом конспекте оно либо потерялось, либо превратилось в неточную формулировку. Агент не «забыл» в человеческом смысле — релевантная деталь либо вытеснена, либо погребена в середине окна и не учтена при действии. Ни одна из частей задачи не была трудна по отдельности; отказала способность удерживать связность на всём объёме сразу. Это и есть отказ по оси контекста в чистом виде, и он тем вероятнее, чем длиннее сессия и шире разброс релевантных фактов по окну.

Принципиально здесь то, что все три отказа усиливаются с ростом задачи и не лечатся увеличением окна. Окно вдвое больше отодвигает точку насыщения, но не меняет характер отказа: достаточно длинная задача переполнит любое конечное окно, а деградация доступа к середине проявится тем сильнее, чем больше окно заполнено. Контекст — это ресурс, которым нужно управлять, а не резервуар, который нужно расширять. И первый аргумент в пользу нескольких агентов — именно управление контекстом: дать каждому исполнителю узкое, чистое, релевантное только его подзадаче окно вместо одного общего окна, которое неизбежно загрязняется и переполняется.

Поведение агента задаётся прежде всего системным промптом и набором инструментов — это его роль (детально роль как тройка «промпт, инструменты, права» разбирается в части III). Возникает соблазн вложить в один промпт всё: пусть один агент будет и архитектором, и кодером, и ревьюером, и специалистом по безопасности, и техническим писателем. Этот соблазн упирается во второй структурный предел — предел специализации одного контура.

Причина не в длине промпта. Промпт можно сделать сколь угодно подробным. Причина в том, что инструкции разных ролей конфликтуют, а внимание модели в пределах одного вызова распределяется между всеми активными инструкциями сразу. Роль ревьюера требует придирчивости и поиска недостатков; роль автора требует продуктивности и движения вперёд. Роль архитектора требует мыслить на уровне границ и контрактов; роль исполнителя требует погружения в детали реализации. Совмещённые в одном промпте, эти установки не складываются, а размываются — агент становится умеренно посредственным во всём вместо отличного в одном. Перегруженный инструкциями промпт даёт усреднённое поведение: модель не держит десять режимов одновременно, она держит их смесь.

Есть и эффект переключения. Даже если агент способен сменить режим внутри сессии — «теперь я ревьюер» после «я был автором», — переключение происходит в том же контексте, загрязнённом предыдущей ролью. Автор, который только что написал код, плохой ревьюер этого кода: его контекст полон обоснований, почему написанное хорошо. Тот же агент в роли критика собственной работы склонен подтверждать, а не опровергать — не из-за дефекта модели, а из-за контекста, в котором живут аргументы «за». Независимость взгляда требует независимости контекста, а её один агент по определению не имеет.

Это не умозрительный эффект. Проверка работы тем же контуром, который её произвёл, систематически пропускает целые классы ошибок — те, что вытекают из неверной исходной посылки. Если агент с самого начала неправильно понял требование, то и реализация, и самопроверка опираются на одно и то же неверное понимание: проверка подтверждает соответствие кода ошибочной модели задачи, а не задаче. Независимый ревьюер с чистым контекстом и иной формулировкой роли ловит именно такие расхождения, потому что приходит к предмету без груза авторских допущений. Самопроверка в одном контексте улавливает локальные дефекты — опечатку, явное противоречие, — но слепа к систематической ошибке, разделяемой автором и проверяющим, когда это одно лицо.

Отдельно стоит назвать ложную экономию, которая толкает к универсальному агенту. На вид один агент дешевле: один промпт, один процесс, никакой передачи контекста между исполнителями, никакой координации. Эта экономия реальна на простой задаче и обманчива на сложной. Универсальный агент платит за мнимую простоту качеством на каждой подзадаче, отсутствием независимой проверки и раздутым профилем прав. Когда задача такова, что цена ошибки высока, а нужна именно разносторонняя экспертиза, экономия на разделении ролей оборачивается дороже, чем координационный налог, которого она избегает. Дешевизна одного агента — аргумент в его пользу ровно до точки, где проявляется хотя бы один из пределов специализации; после этой точки она становится скрытой платой за деградацию результата.

Специализация — это не только промпт, но и инструменты с правами. Агент, которому даны все инструменты сразу — чтение и запись файлов, выполнение команд, сетевые вызовы, доступ к секретам, — несёт максимальную поверхность атаки и максимальный риск ошибочного действия на каждом шаге. Принцип наименьших привилегий (см. главу 88) требует обратного: узкая роль получает узкий набор инструментов. Но узкий набор инструментов несовместим с универсальностью. Нельзя одновременно дать агенту право выполнять произвольные команды (нужно исполнителю) и запретить ему это право (нужно для безопасного ревьюера, который только читает). Один агент вынужден иметь объединение всех нужных прав, то есть максимальные права, то есть наихудший профиль риска.

Отсюда failure modes специализации:

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

Отсутствие независимого взгляда. Самопроверка в одном контексте слаба. Агент не ловит собственные систематические ошибки, потому что они встроены в тот же контекст, который их породил. Качество, основанное на взаимном ревью независимыми ролями (см. главу 65), для одного агента недостижимо в принципе.

Эскалация привилегий по умолчанию. Универсальность вынуждает к максимуму прав. Любая компрометация такого агента — через prompt injection или иначе (см. главу 86) — даёт противнику полный набор возможностей, а не узкий срез.

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

Третий предел самый недооценённый. Агент работает шагами: наблюдение, действие, наблюдение результата, следующее действие. Шаги строго последовательны — агент не начинает следующий, пока не получил результат предыдущего, потому что план следующего шага зависит от того, что вернул текущий. Это не дефект реализации, а суть автономного контура: обратная связь требует дождаться результата. Один агент — это один поток исполнения с обязательной сериализацией шагов.