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

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

18

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

Глава 23. Способы коммуникации: сообщения, общая память, артефакты

Предыдущие части описывали, как рой устроен и кто в нём за что отвечает. Топология (часть II) задала форму связей между исполнителями: кто кому подчинён, кто кого порождает, как сходятся ветви. Роли и контракты (часть III) задали, что каждый агент обещает на входе и выходе. Но и топология, и контракт говорят о связях абстрактно — «оркестратор передаёт подзадачу воркеру», «стадия конвейера отдаёт артефакт следующей», «источник знания кладёт вклад на доску». Слово «передаёт» в этих формулировках скрывает инженерное решение, которое и есть предмет этой части: каким физическим способом одно содержимое попадает от одного агента к другому.

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

Различение каналов — не педантизм. Каждый канал тянет за собой свой класс failure modes, свою модель согласованности и свою экономику. Сообщение можно потерять, продублировать, доставить не по порядку — это проблематика глав 29 и 30. Общая память подвержена гонкам, потере обновлений и отравлению — это проблематика части VI и части VII. Артефакт устойчив, но порождает вопросы версионирования, видимости и времени жизни. Спроектировать рой — значит для каждой связи между агентами осознанно выбрать канал, понимая, какую цену этот выбор накладывает на надёжность и стоимость. Глава вводит три канала как базовый словарь всей части IV: последующие главы (синхронность — глава 24, форматы — глава 25, протоколы — глава 26, маршрутизация — глава 27, события — глава 28) разбирают преимущественно канал сообщений, но проектные решения в них имеют смысл только на фоне сопоставления со смежными каналами, которое даёт эта глава.

Полезно сразу зафиксировать различие на уровне владения и времени жизни, потому что именно оно, а не транспортный механизм, определяет поведение канала.

Сообщение — передача с переходом владения и эфемерной природой. Отправитель формирует порцию данных, направляет её получателю, и после доставки сообщение, как правило, перестаёт существовать как самостоятельная сущность: получатель его обработал и забыл, отправитель не хранит копию как состояние системы. Сообщение адресно — у него есть получатель (один или группа) — и направленно: данные текут от отправителя к получателю, а не лежат в общем доступе. Ключевое свойство: между двумя агентами, обменивающимися сообщениями, нет общего изменяемого состояния. Каждый владеет своим, а сообщение — это снимок, который один передал другому. Это и есть фундамент share-nothing (см. главу 54): если агенты общаются только сообщениями, у них нет разделяемой памяти, которую можно испортить совместным доступом.

Общая память — координация без передачи владения. Данные не текут от агента к агенту; они лежат в общем пространстве, которым никто из агентов не владеет единолично и которое все могут читать и (в общем случае) изменять. Агент координируется с другими не тем, что им что-то отправляет, а тем, что меняет общее состояние, которое они потом прочитают. Здесь нет адреса получателя: пишущий не знает, кто прочитает его изменение, и читает ли вообще. Каноническая реализация этого канала в оркестрации — blackboard (см. главу 11), где доска одновременно служит и каналом координации, и хранилищем состояния. Но общая память шире blackboard: это любой разделяемый изменяемый носитель — общий контекст, разделяемое хранилище ключ-значение, общая база, к которой обращаются несколько агентов.

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

Сведём различия в таблицу, к которой глава будет возвращаться:

Свойство | Сообщение | Общая память | Артефакт

Владение данными | переходит к получателю | общее, ничьё единолично | у создателя, читается всеми

Адресность | адресно (есть получатель) | безадресно (пишущий не знает читателя) | безадресно (читатель находит по имени)

Время жизни | эфемерно | пока живёт состояние | устойчиво, переживает передачу

Изменяемость переданного | неизменяемо (снимок) | изменяемо совместно | обычно неизменяемо или версионируется

Связанность отправителя и получателя | по адресу и контракту сообщения | по схеме общего состояния | по имени и формату артефакта

Кто отвечает за согласованность | транспорт доставки | механизм доступа к памяти | схема именования и версий

Базовый класс отказов | потеря, дублирование, переупорядочивание | гонки, потеря обновлений, отравление | висячие ссылки, рассинхрон версий

Эта таблица — не предписание выбрать «лучший» канал. Лучшего нет; есть размены. Дальше глава разбирает каждый канал по отдельности — его архитектуру, область применимости и failure modes, — а затем сводит выбор в критерии.

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

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

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

Канал сообщений — естественный выбор, когда связь между агентами направленная и адресная: известно, кто отправитель и кто получатель. Оркестратор, раздающий подзадачи воркерам (см. главу 8), общается сообщениями: каждая подзадача адресована конкретному воркеру, результат возвращается конкретному оркестратору. Конвейер (см. главу 10) передаёт артефакт сообщением от стадии к стадии, если передача не требует устойчивого хранения промежуточного результата. Делегирование в иерархии (см. главу 9) — это сообщение от родителя к потомку и обратно. Во всех этих случаях у передачи есть явный адресат, и канал сообщений выражает это прямо.

Главное архитектурное достоинство сообщений — отсутствие общего изменяемого состояния между сторонами. Два агента, обменивающиеся сообщениями, изолированы: сбой одного не портит память другого, потому что общей памяти нет. Это делает канал сообщений предпочтительным с точки зрения надёжности и безопасности: граница между агентами совпадает с границей сообщения, и через неё легче поставить проверку, изоляцию и аудит (см. главу 89). Сообщение — естественная точка контроля доверия: на стыке между агентами, где проходит сообщение, можно проверить его на соответствие контракту, отфильтровать недоверенное содержимое, записать факт передачи. С общей памятью такой единой точки контроля нет — изменение происходит «внутри» разделяемого состояния, и перехватить его труднее.