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

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

18

Всемогущий агент | Роли, безопасность | Одинаковые широкие права у всех | 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│

└────┬───┘ └────┬───┘ └────┬───┘

│ │ │