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

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

18

— Fan-out/fan-in — базовая топология оркестрации: единый оркестратор разбивает задачу, раздаёт независимым воркерам и собирает результат; звездообразная структура без рёбер «воркер—воркер» даёт настоящий параллелизм при минимальном координационном налоге и естественный bulkhead для отказов воркеров.

— Оркестратор несёт пять ролей — декомпозитор, диспетчер, передатчик контекста, сборщик, надзиратель. Решения о смысле задачи (разбиение, сборка) естественно ложатся на модель; решения о гарантиях (потолок параллелизма, тайм-ауты, бюджеты, повторы) должны быть в коде; устойчивый рой — это гибрид того и другого.

— Разбиение обязано давать подзадачи без перекрытий (двойная работа и конфликты), без дыр (тихая неполнота) и без ложной независимости (рассогласование на сборке); проверку покрытия и независимости не следует доверять той же модели, что разбивала.

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

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

— Паттерн масштабируется при независимых, примерно равных подзадачах с предсказуемой сборкой и упирается в потолок при зависимостях (нужен конвейер или граф), глубине (нужна иерархия), неравномерности (нужна балансировка) и дорогой сборке (нужна доска или дебаты).

— Горизонтальное масштабирование ограничено последовательной долей разбиения и сборки и нагрузкой на оркестратор как SPOF: за пределом порядка десятков воркеров на оркестратор отдача убывает, и дальнейший рост требует перехода к иерархии. Fan-out/fan-in — точка отсчёта, от которой осознанно отступают ровно настолько, насколько вынуждает задача.

Глава 9. Иерархии агентов и субагенты

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

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

В плоской топологии (глава 8) ровно один узел владеет декомпозицией. Оркестратор видит всю задачу целиком, разбивает её на подзадачи, раздаёт их воркерам, собирает результаты (fan-in) и отвечает за итог. Воркеры друг о друге не знают, делегировать не умеют и существуют ровно один уровень. Это дерево глубины 1, и его свойства предсказуемы: один шов передачи контекста на воркера, один акт агрегации, одна точка ответственности.

Иерархия снимает ограничение «исполнитель только исполняет». Узел дерева может быть одновременно исполнителем для родителя и оркестратором для своих детей. Подзадача, полученная сверху, для него — целая задача, которую он волен разбить дальше. Формально это рекурсивное применение паттерна fan-out/fan-in: тот же приём, вложенный сам в себя на нескольких уровнях. Различие не косметическое. В плоской топологии глобальное знание о задаче сосредоточено в корне; в иерархии оно распределено по дереву, и ни один узел ниже корня его не видит целиком. Именно это распределение знания и порождает все специфические свойства иерархии — и её силу, и её failure modes.

Полезно различать три структуры, которые часто смешивают под словом «субагенты»:

Структура | Глубина | Кто владеет декомпозицией | Видимость задачи

Оркестратор и воркеры | 1 | Только корень | Корень видит всё, воркеры — только свою подзадачу

Иерархия (дерево) | 2 и более | Каждый внутренний узел декомпозирует свой фрагмент | Никто ниже корня не видит всё; каждый узел видит свой поддерево-фрагмент

Конвейер (глава 10) | произвольная длина, но это цепь, не дерево | Никто; стадии фиксированы заранее | Каждая стадия видит выход предыдущей

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

Дерево агентов удобно описывать теми же понятиями, что и любое дерево. Корень — головной оркестратор, владеющий исходной задачей. Внутренние узлы — субдирижёры, которые и принимают работу сверху, и раздают её вниз. Листья — терминальные исполнители, которые делают полезную работу инструментами и ничего не делегируют. Глубина — длина пути от корня до самого дальнего листа. Степень ветвления (fan-out) — сколько детей порождает узел.

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

Полезно держать в голове крайние формы. Вырожденно глубокое дерево — это цепочка, где у каждого узла ровно один ребёнок; оно эквивалентно последовательной передаче и не даёт никакого параллелизма, зато накапливает максимум дрейфа и максимум латентности по критическому пути. Вырожденно широкое дерево глубины один — это и есть плоский fan-out из главы 8: нулевой дрейф по глубине, максимум параллелизма, вся стоимость в ширине. Любая реальная иерархия лежит между этими крайностями, и выбор её формы — это выбор точки на оси «дрейф и латентность против стоимости и нагрузки на агрегацию». Понимание этих крайностей помогает не строить случайную форму, а осознанно располагать дерево ближе к широкому краю всюду, где смысловая вложенность подзадач этого не запрещает.

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

Центральная операция иерархии — делегирование: родитель передаёт ребёнку часть своей работы. Соблазн представлять делегирование как «родитель своими словами объясняет ребёнку, что нужно сделать». Это и есть источник большинства проблем иерархии. Пересказ недетерминирован и невоспроизводим; на каждом уровне он искажает задачу чуть иначе.

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

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