Ранас Мукминов – Оркестрация ИИ-агентов. Claude Opus 4.7 (страница 29)
Всемогущий агент | Роли, безопасность | Одинаковые широкие права у всех | Least privilege по роли | 16, 71, 88
Свободный текст вместо схемы | Коммуникация | Результаты передаются прозой, парсятся на приёме | Схема сообщений на стыках | 25, 30
Скрытая синхронность | Коммуникация | «Параллельный» рой ждёт ответа на каждом шаге | Явный выбор sync/async под зависимости | 24, 32
Болтливый рой | Коммуникация | Каждый шлёт каждому, рассылка всем | Маршрутизация, подписки, агрегация | 27, 28, 57
Разбиение по агентам | Декомпозиция | Делят под штат ролей, а не под работу | Декомпозиция от графа зависимостей | 31, 32
Игнорирование последовательной доли | Декомпозиция | Ждут линейного ускорения от воркеров | Оценка доли, сокращение последовательной части | 56, 60
Взрыв подзадач | Декомпозиция | Динамическое порождение без предела | Бюджет, приоритет, критерий завершения | 34, 35
Общее изменяемое состояние | Состояние | Общий файл/запись как способ обмена | Share-nothing по умолчанию | 41, 54, 55
Гонка за ресурс | Координация | Несколько писателей в один ресурс без блокировки | Single-writer, сериализация | 40, 41
Повторы без идемпотентности | Координация | Повтор выполняет операцию заново | Ключи идемпотентности | 42, 43
Эмерджентность вместо координации | Координация | «Договорятся сами» вместо механизма | Явная координация по умолчанию | 38, 44, 45
Отравление общей памяти | Состояние, безопасность | Накопленное знание без валидации | Локализация, недоверие, отбраковка | 53, 84, 86
Агенты не падают | Надёжность | Спроектирован только счастливый путь | Тайм-ауты, повторы, circuit breaker | 68, 70, 72
Нет изоляции отказов | Надёжность | Общие ресурсы без отсеков | Bulkhead | 67, 71
Хрупкая сборка | Надёжность | Агрегация требует всех результатов | Устойчивость к частичному отказу | 37, 73
Непрозрачный рой | Наблюдаемость | Логируются только концы системы | Сквозная трассировка межагентного обмена | 76, 77, 81
Нет аварийной остановки | Надзор | Нет рычага на уровне системы | Kill-switch уровня роя | 97
Поагентный надзор | Человек | Контроль линеен по числу агентов | Надзор и одобрение на уровне роя | 92, 93, 96
Тест на наличие антипаттерна сводится к трём вопросам, заданным до постройки. Первый: **по какой
метрике рой обязан превзойти одного агента, и измерен ли baseline** — это отсекает мультиагентность
ради формы. Второй: что система делает, когда конкретный агент завис, упал или вернул мусор —
если ответа нет, надёжность не заложена. Третий: **какое состояние агенты разделяют и кто имеет право
его менять** — если общее изменяемое состояние возникло само, без явного решения, в системе уже есть
гонка, которая проявится позже. Эти три вопроса покрывают большую часть антипаттернов этой главы,
потому что каждый из них восходит к одному из трёх ложных представлений, с которых глава началась.
Отдельно стоит зафиксировать порядок исправления. Антипаттерны топологии и состояния исправлять
дороже всего, потому что они меняют форму системы; их выявляют на этапе проектирования. Антипаттерны
коммуникации и координации исправимы перестройкой стыков и обычно обнаруживаются на первых
нетипичных входах. Антипаттерны наблюдаемости и надзора не ломают рой, но без них нельзя
диагностировать и остановить сломавшийся, поэтому их закладывают первыми — как условие отладки всего
остального. Этот порядок задаёт и структуру дальнейших частей книги.
— Антипаттерны роя воспроизводимы, потому что это корректные выводы из неверной модели: рой — не
«агент, умноженный на N», агенты — не надёжные функции, общее состояние — не удобство, а риск.
Перенос интуиции от одного агента к системе агентов без поправки и есть основной источник ошибок.
— Самые дорогие антипаттерны лежат на уровне топологии и состояния, потому что меняют форму системы:
звезда-узкое место, неконтролируемое порождение агентов, общее изменяемое состояние по умолчанию.
Их выявляют до постройки, а не в инцидентах.
— Антипаттерны коммуникации и координации связывают агентов сильнее, чем предполагалось, и отказывают
недетерминированно: свободный текст вместо схемы, скрытая синхронность, гонки за ресурс, повторы без
идемпотентности, отравление общей памяти. Их общая черта — тихий, редкий, плохо воспроизводимый сбой.
— Антипаттерны надёжности проявляются только при отказе и поэтому обнаруживаются позже всего:
проектирование счастливого пути, отсутствие изоляции отказов, хрупкая сборка. Отказ агента — норма,
а не исключение, и закладывается в архитектуру с самого начала.
— Антипаттерны наблюдаемости и надзора не ломают рой, но делают невозможным понять и остановить
сломавшийся: непрозрачный рой, отсутствие аварийной остановки, поагентный надзор, не масштабируемый
по числу агентов. Их закладывают первыми как условие отладки остального.
— Большинство антипаттернов диагностируются тремя вопросами до постройки: по какой метрике рой обязан
побить одного агента; что система делает при отказе агента; какое состояние разделяется и кто вправе
его менять. Граница между обоснованным упрощением и антипаттерном — наличие явного решения с понятным
failure mode.
Глава 8. Оркестратор и воркеры (fan-out/fan-in)
Часть I установила, что мультиагентная система — это распределённая система с недетерминированными узлами, и что координация всегда стоит. Часть II переводит этот тезис в конструкции. Из всех топологий, которые рассматриваются дальше — иерархии (см. главу 9), конвейеры (см. главу 10), доски (см. главу 11), рынки (см. главу 12), сети равноправных агентов (см. главу 13), — одна служит фундаментом для остальных. Это оркестратор с воркерами, он же fan-out/fan-in: единый управляющий процесс разбивает задачу на части, запускает несколько исполнителей параллельно и сводит их результаты в один итог.
Этот паттерн важен не потому, что он самый мощный, а потому, что он самый простой из топологий, дающих реальный параллелизм, и потому, что почти все остальные топологии либо строятся из него рекурсивно, либо описываются как отклонения от него. Иерархия — это оркестратор, воркеры которого сами оркестраторы. Конвейер — это вырожденный fan-out с шириной один и несколькими стадиями. Гибрид — это оркестратор, у которого часть ветвей устроена иначе. Понять fan-out/fan-in строго означает получить язык для всех последующих глав.
В этой главе разбирается анатомия паттерна, роли управляющего процесса, три фазы его работы — разбиение, параллельное исполнение, сборка — и, отдельно, граница применимости: где fan-out/fan-in масштабируется, а где упирается в потолок и требует другой топологии. Failure modes рассматриваются не в конце, а внутри каждой фазы, потому что у этого паттерна отказы привязаны к конкретным швам.
Fan-out/fan-in состоит из четырёх элементов: оркестратор, набор воркеров, канал раздачи (fan-out) и канал сборки (fan-in). Оркестратор — единственный узел, который видит задачу целиком; воркеры видят только свою часть. Это центральное свойство, и оно же — источник и силы, и хрупкости паттерна.
┌──────────────┐
│ оркестратор │
└──────┬───────┘
fan-out │ fan-in
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│воркер 1│ │воркер 2│ │воркер N│
└────┬───┘ └────┬───┘ └────┬───┘
│ │ │