Ранас Мукминов – Оркестрация ИИ-агентов. Claude Opus 4.7 (страница 8)
Прежде чем различать конфигурации, нужно зафиксировать единицы, из которых они складываются. Эти определения сквозные для книги.
Агент — автономный исполнитель, замыкающий контур наблюдение—план—действие—проверка—коррекция, обладающий инструментами и правами. В этой книге агент — не объект изучения, а строительный блок; его внутреннее устройство — предмет «Автономных ИИ-программистов». Здесь важны лишь те его свойства, что влияют на систему: он недетерминирован, дорог, общается на естественном языке и может ошибаться правдоподобно.
Воркер — агент в роли исполнителя порции работы, обычно подчинённый кому-то, кто эту работу раздаёт. Термин подчёркивает позицию в топологии, а не способности: один и тот же агент может быть воркером в одной системе и оркестратором в другой.
Оркестратор — агент или компонент, который распределяет работу, собирает результаты и принимает решения о следующих шагах. Оркестратор не обязан быть языковой моделью: им может быть детерминированный код, конечный автомат или очередь. Это различие принципиально для надёжности — детерминированный оркестратор предсказуем и дёшев, оркестратор-модель гибок, но недетерминирован и сам становится точкой отказа (см. главу 75 и главу 87).
Система агентов — нейтральный родовой термин для любой конфигурации из двух и более агентов, независимо от топологии. Им книга пользуется, когда различие конфигураций несущественно для утверждения.
Рой — в этой книге рабочий собирательный термин для системы агентов как целого, безотносительно конкретной топологии. Это намеренное упрощение: в академической литературе «swarm» означает узкий класс — большое число простых однородных агентов с эмерджентной координацией без центра (по аналогии с роевым интеллектом насекомых). Книга использует «рой» шире — как короткое слово для «мультиагентной системы» в любой её форме, — потому что в инженерной практике этот термин закрепился именно в широком смысле. Там, где речь идёт именно об узком, эмерджентном смысле, это оговаривается явно: «рой в узком смысле» или «эмерджентный рой». Читатель должен держать в голове это расхождение со строгим определением.
Контур — замкнутая петля управления: либо внутри одного агента, либо на уровне системы (наблюдение за роем, вмешательство, коррекция). Человек над роем (часть XIII) — внешний контур.
Полезно очертить границу снизу. Несколько последовательных вызовов одной модели из одного скрипта, без автономии и без распределения ответственности, — это не система агентов, а программа, вызывающая модель. Один агент, дробящий свою работу на внутренние шаги, тоже остаётся одним агентом. Граница проходит там, где появляется более одного автономного контура и между этими контурами возникает распределение работы, состояния или ответственности. До этой границы аппарат оркестрации избыточен: координировать нечего. Различение это не формальное: ошибочно назвав системой агентов то, что является обычной программой с несколькими вызовами модели, команда вводит координационный налог там, где он не нужен, и усложняет то, что решалось последовательным кодом. Обратная ошибка — называть одним агентом то, что фактически уже распределено между несколькими автономными контурами, — оставляет реальные failure modes мультиагентной системы вне поля зрения.
Теперь — центральные различения главы. Они опираются на три оси и формулируются так, чтобы каждое влекло конкретные следствия для отказов и стоимости.
Ансамбль — конфигурация, в которой несколько агентов решают одну и ту же задачу независимо, а их результаты затем сводятся в один (выбором, голосованием, агрегацией). Ключевые признаки: работа реплицирована, а не партиционирована; участники не взаимодействуют между собой во время работы; координация сосредоточена на входе (раздать одну задачу) и на выходе (свести результаты).
Ансамбль — самая слабосвязанная из трёх конфигураций. Агенты не передают друг другу контекст, не делят состояние, не зависят от порядка. Это даёт два важных свойства. Первое — естественная отказоустойчивость по входу: если один участник упал или выдал мусор, остальные не затронуты, и итог можно собрать из выживших. Второе — простая параллельность: запуск N независимых попыток тривиально распараллеливается, последовательная доля мала (см. главу 56 о законе Амдала).
Платой за эти свойства является избыточность стоимости и эффект коррелированных ошибок. Ансамбль из N агентов стоит примерно в N раз дороже одной попытки по токенам, при этом не даёт пропускной способности — он не решает N задач, он N раз решает одну. Его выгода — в качестве и устойчивости итога, а не в скорости. И эта выгода реализуется только при разнообразии участников: если все агенты одинаковы и ошибаются одинаково, голосование лишь умножает одну и ту же ошибку (см. главу 63 о разнообразии и ансамблевом эффекте). Ансамбль с однородными участниками — частый антипаттерн: затраты как у ансамбля, надёжность как у одного агента.
Failure modes ансамбля: коррелированные ошибки (все ошиблись одинаково, агрегатор это не ловит); плохая функция агрегации (выбор лучшего сам недетерминирован или предвзят); ложное ощущение надёжности (несколько согласных ответов кажутся подтверждением, хотя это лишь следствие общего смещения).
Стоит отдельно отметить, что ансамбль критически зависит от функции агрегации, и эта функция — недооценённый источник отказов. Свести N результатов в один можно по-разному: большинством голосов, выбором единственного лучшего по некоторому критерию, синтезом нового ответа поверх всех. Каждый способ имеет границы применимости. Голосование требует, чтобы ответы были сравнимы и дискретны — для свободного текста или кода понятие «совпадающих ответов» само по себе нетривиально. Выбор лучшего перекладывает задачу на оценщика, который часто сам является агентом и, значит, недетерминирован и способен ошибаться так же, как оцениваемые. Синтез поверх всех рискует смешать верную часть одного ответа с ошибочной частью другого, породив итог хуже любого из исходных. Таким образом, ансамбль не «бесплатно надёжен»: его надёжность сосредоточена в агрегаторе, и если агрегатор слаб, вся избыточная стоимость потрачена впустую. Это типичная ошибка проектирования — вложиться в число попыток и сэкономить на их сведении.
Оркестрация в узком смысле — конфигурация, в которой явный оркестратор распределяет разные части задачи между воркерами, управляет порядком и зависимостями и собирает итог. Признаки: работа партиционирована; есть выделенный локус принятия решений; взаимодействие идёт преимущественно через оркестратор, а не напрямую между воркерами.
В широком смысле — и в названии книги — «оркестрация» означает дисциплину проектирования любых систем агентов, включая ансамбли и эмерджентные рои. Эта двусмысленность намеренна и закреплена во введении: оркестрация как дисциплина шире оркестрации как топологии. Чтобы не путать, книга пользуется уточнениями: «оркестрация как топология» (паттерн оркестратор—воркеры, см. главу 8) против «оркестрация как дисциплина» (вся книга). Когда контекст однозначен, уточнение опускается.
Оркестрация-топология — наиболее управляемая из трёх конфигураций. Единый локус решений даёт точку наблюдения, точку вмешательства и предсказуемый порядок. Она же даёт пропускную способность: разные воркеры делают разные части одновременно. Платой служат два связанных риска. Первый — оркестратор как единая точка отказа (SPOF): его падение, зависание или ошибочное решение останавливает или искажает всю систему (см. главу 75). Второй — оркестратор как узкое место: вся координация проходит через него, и при росте числа воркеров он насыщается раньше, чем исчерпан параллелизм (см. главу 57). Третий, специфичный для агентов, — оркестратор-модель недетерминирован и сам нуждается в верификации своих решений.
Failure modes оркестрации-топологии: отказ или зависание оркестратора (вся работа встаёт); ошибочная декомпозиция (оркестратор разбил задачу так, что части несовместимы); насыщение оркестратора координацией; потеря контекста при раздаче (воркер получил недостаточно, чтобы сделать свою часть, — см. главу 47 о handoff).
Рой в узком смысле — конфигурация без выделенного оркестратора, в которой согласованное поведение системы возникает из локальных правил и локальных взаимодействий многих участников. Признаки: нет единого локуса решений; координация косвенная (через общую среду, события, наблюдение за соседями, а не через команды сверху); глобальное поведение эмерджентно — оно не задано явно ни в одном узле.
Эта конфигурация — наименее управляемая и наименее предсказуемая. Отсутствие центра убирает SPOF и узкое место оркестратора: система деградирует постепенно, а не падает целиком при потере одного узла. Но та же децентрализация порождает специфические патологии: сходимость не гарантирована (рой может не прийти к решению вовсе — см. главу 66); возможны коллективные непродуктивные траектории — livelock на уровне роя, когда все заняты, но система не продвигается (см. главу 74); эмерджентное поведение может оказаться нежелательным и при этом не локализуемым ни в одном агенте (см. главу 61). Наблюдаемость такого роя — отдельная трудная задача: причинность размазана по многим взаимодействиям (см. часть XI).