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

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

18

Антипаттерн не нейтрален — он отказывает конкретными способами, и каждый из них дороже, чем сэкономленная простота.

— Деградация качества через потери при передаче. Чем больше handoff, тем больше совокупная потеря контекста. Результат лоскутной системы хуже, чем результат одного агента с целостным взглядом, даже если каждый отдельный агент «качественный».

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

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

— Хрупкость и непредсказуемость. Больше узлов и связей — больше отказов: зависшие воркеры, потерянные сообщения, конфликты изменений, рассогласование состояния. Недетерминизм каждого агента перемножается на сложность топологии, и поведение системы становится трудно воспроизводимым.

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

Общий знаменатель: антипаттерн платит весь координационный налог и не получает ни одной выгоды разбиения, потому что выгоды требуют структуры задачи, которой в этих случаях нет. Это не «мультиагентность, сделанная неправильно», а мультиагентность, выбранная там, где её не следовало выбирать.

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

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

Если задача целиком помещается в практический объём контекста и решается разумным числом шагов, разбивать нечего. Фиксированная стоимость координации превысит любую выгоду. Здесь один агент выигрывает по всем измерениям сразу: дешевле, быстрее по полному времени, проще в наблюдении, предсказуемее.

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

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

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

Важно отделять «один агент по умолчанию, потому что не разобрались» от «один агент сознательно, потому что задача такова». Зрелое инженерное решение часто состоит именно в отказе от роя: проверить критерии, убедиться, что задача целостна, помещается в контекст, последовательна и не требует независимого суждения, — и оставить одного агента. Это не консерватизм, а правильное применение принципа решения. Усложнять следует только тогда, когда простое перестало работать по конкретной, названной причине, а не на опережение.

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

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

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

Отсюда вывод об архитектуре: задача не «одноагентная» и не «роевая» целиком, а гибридная — fan-out на слабо связанной части (чтение) и единый агент на нераздельной части (синтез). Это типичный результат честного применения критериев: шов проходит не по всей задаче, а по границе между делимой и нераздельной её частями (гибридные топологии разбираются в главе 14).

Теперь — сравнение того, что происходит при трёх вариантах решения, по четырём распределённым измерениям и failure modes.

Измерение | Только один агент | Только рой (синтез тоже распределён) | Гибрид (fan-out чтения, единый синтез)

Контекст | Не помещается, работа фрагментами | Каждый читатель видит свой срез | Читатели — свой срез, синтезатор — все выжимки

Состояние и порядок | Последовательно, без гонок | Конфликты при сборке отчёта из частей | Сборка одна, гонок нет

Ответственность | Единая, но качество страдает от фрагментации | Размыта: за связность вывода никто | Чтение — по воркерам, связность — на синтезаторе

Стоимость и время | Дёшево, но медленно и неполно | Дорого, синтез лоскутный | Параллельное чтение, целостный синтез

Главный failure mode | Потеря сквозной картины | Лоскутный вывод, потери на стыках синтеза | Потери при handoff выжимок в синтез

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

Остаточный риск гибрида тоже назван явно: потери при передаче выжимок в синтезатор (см. главу 47). Если выжимки теряют существенное, целостность финального вывода пострадает несмотря на правильную топологию. Это пример того, как failure mode переживает верный выбор архитектуры и требует отдельного внимания на уровне протокола handoff, а не на уровне выбора «один или много».

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

1. Сформулировать задачу и критерий успеха. Что считается готовым результатом и как проверяется его качество. Без этого любое сравнение архитектур беспредметно.

2. Проверить отсекающие отрицательные признаки. Задача целостна (нераздельный результат)? Коротка относительно стоимости координации? Сильно последовательна? Если да хотя бы по одному пункту — по умолчанию один агент; рой нужно специально обосновывать против этого.

3. Проверить, есть ли структура для разбиения. Распадается ли задача на слабо связанные части с узким интерфейсом (критерий 1)? Если нет — параллелизм не получится, и остальные мотивы (специализация, изоляция) надо взвешивать отдельно и осторожно.

4. Назвать конкретный мотив разбиения. Какой именно положительный критерий выполняется и по существу: разная специализация, превышение контекста, полезный параллелизм, независимость суждения, изоляция. Мотив должен быть назван и проверяем; «так современнее» мотивом не является.

5. Оценить налог и поверхность отказа. Сколько передач контекста, сколько согласований, сколько новых отказов добавляет выбранная топология. Грубой оценки достаточно, чтобы понять порядок.