Ранас Мукминов – Оркестрация ИИ-агентов. Claude Opus 4.7 (страница 44)
Третье — динамичность. Если состав исполнителей и их загрузка постоянно меняются, статическая маршрутизация устаревает. Рынок переоценивает распределение на каждой задаче заново, поэтому естественно адаптируется к появлению и исчезновению исполнителей без переписывания логики назначения.
При отсутствии этих условий рынок проигрывает директивному назначению по всем осям, кроме декларативной элегантности. Это первая граница применимости, и к ней глава вернётся в разделе об ограничениях.
Стоит уточнить, что именно делает рыночную модель содержательной в рое языковых агентов, а не просто переносом экономической метафоры. У классических распределённых вычислителей дефицитный ресурс — процессорное время и память; у агентов дефицитный ресурс — место в контексте и стоимость его наполнения. Это меняет природу торгуемого блага.
Когда оркестратор директивно назначает подзадачу воркеру, он обычно вынужден передать ему контекст: документы, состояние, историю, на которые опирается задача. Эта передача — не бесплатная пересылка указателя, а наполнение чужого окна токенами, то есть прямые затраты и латентность. Если же подзадачу возьмёт воркер, у которого нужный контекст уже находится в окне (он работал с этими данными в предыдущей подзадаче), наполнение не требуется вовсе. Разница в стоимости исполнения между «контекст уже есть» и «контекст надо загрузить» может быть кратной. Но кто из воркеров уже держит релевантный контекст — знает только сам воркер; оркестратору пришлось бы опрашивать содержимое всех окон, что само по себе дорого и быстро устаревает.
Здесь рынок раскрывается естественно. Объявление задачи позволяет каждому воркеру самому сопоставить её со своим текущим окном и заявить ставку, отражающую, сколько ему стоит исполнение с учётом уже имеющегося контекста. Воркер с релевантным контекстом ставит дёшево и выигрывает; работа притягивается туда, где её исполнение объективно дешевле. Это не абстрактная гетерогенность, а конкретный, измеримый источник различий в стоимости, который трудно вынести в централизованную модель роя. Именно он чаще всего и оправдывает рыночную топологию там, где она вообще оправдана.
Рыночная топология вводит три роли, и их разделение — основа всей модели.
Инициатор (manager, auctioneer). Узел, у которого есть работа и который не хочет или не может сам решить, кому её отдать. Он формулирует задачу как объявление, рассылает его, собирает ставки, выбирает победителя и заключает контракт. Инициатор не обязан быть постоянным: в одной задаче узел инициирует торги, в другой — участвует в чужих как исполнитель. Это отличает рынок от жёсткой иерархии оркестратор-воркер, где роли фиксированы.
Участник торгов (bidder, contractor). Узел, способный исполнить хотя бы некоторые объявляемые задачи. Получив объявление, он принимает локальное решение: участвовать ли, и если да — с какой ставкой. Ставка кодирует его собственную оценку стоимости и пригодности. Участник не обязан отвечать на каждое объявление; молчание — допустимая реакция, означающая «эта задача мне не подходит».
Посредник торгов (брокер, маркетплейс). Необязательная роль. В простых системах инициатор сам рассылает объявления и сам собирает ставки. Но при росте числа узлов прямая рассылка «каждый каждому» даёт квадратичную нагрузку (см. главу 27 о маршрутизации). Тогда вводится брокер — узел или сервис, который ведёт реестр участников, маршрутизирует объявления к релевантным исполнителям и собирает ставки. Брокер не оценивает работу; он только сокращает связность. Важно: брокер становится единой точкой отказа со всеми вытекающими (см. главу 75), и его введение — это компромисс между связностью и устойчивостью.
Ключевое архитектурное свойство: оценку делает участник, а присуждение — инициатор. Эти два решения разнесены по разным узлам. В директивной топологии оба делает оркестратор. Именно разнесение оценки и присуждения и есть рынок; всё остальное — детали протокола.
Любая рыночная модель проходит четыре фазы, независимо от конкретного протокола.
1. Объявление (announcement). Инициатор публикует задачу. Объявление должно содержать достаточно, чтобы участник мог оценить пригодность и стоимость, но не настолько много, чтобы передача объявления стала сама по себе дорогой. Это нетривиальный баланс: для агентов содержательная оценка часто требует значительной части контекста задачи, а его рассылка всем потенциальным участникам — это умножение токенов на число адресатов.
2. Ставка (bidding). Участники, считающие себя пригодными, отвечают ставками. Ставка — это структурированное сообщение (см. главу 25 о схемах): оценка стоимости, заявленная уверенность, возможно — оценка времени или требуемых ресурсов. Здесь же задаётся окно: как долго инициатор ждёт ставки. Окно — параметр латентности против полноты: короткое окно ускоряет, но рискует упустить хорошего, но медленного участника.
3. Присуждение (award). Инициатор выбирает ставку по своему правилу (минимальная стоимость, максимальная уверенность, взвешенная функция) и присуждает контракт победителю. Остальным участникам либо явно сообщается отказ, либо они узнают о нём по тайм-ауту. Явный отказ дороже по сообщениям, но избавляет участников от удержания зарезервированных ресурсов.
4. Исполнение и подтверждение (execution, settlement). Победитель исполняет работу и возвращает результат инициатору. На этой фазе возникает вопрос верификации: соответствует ли результат контракту. Рынок распределяет работу, но не гарантирует её качество — гарантию должна давать проверка результата, а не сам факт выигрыша торгов.
Фаза подтверждения — место, где рыночная топология чаще всего недопроектирована. Соблазн считать, что присуждённый контракт эквивалентен полученному результату, силён, потому что в человеческих рынках обязательство обычно исполняется. В рое агентов это не так: победитель — недетерминированный узел, который может зависнуть, упасть, исчерпать бюджет токенов или вернуть правдоподобный, но неверный результат. Поэтому settlement обязан включать три элемента. Тайм-аут исполнения: контракт действителен ограниченное время, по истечении которого считается невыполненным. Критерий приёмки: проверяемое условие, которому результат должен удовлетворять, чтобы контракт закрылся успешно (см. часть V о верификации итога). И процедуру при провале: переаукцион, эскалацию или fallback. Без этих трёх элементов рынок не распределяет работу, а лишь создаёт иллюзию её распределения — задачи, чьи победители не справились, тихо выпадают из системы.
Баланс из первой фазы заслуживает отдельного внимания, потому что для агентов он жёстче, чем для классических узлов. Объявление должно дать участнику достаточно, чтобы тот содержательно оценил пригодность. Но содержательная оценка задачи языковым агентом — это, по сути, частичное её прочтение и осмысление, то есть инференс над текстом объявления. Если объявление богатое, оно дорого и в рассылке (токены на каждого адресата), и в обработке (каждый участник тратит инференс на оценку). Если объявление скудное, участники оценивают вслепую и ставят шумно, что подрывает смысл торгов.
Из этого следует архитектурный приём: объявление делают двухуровневым. Сначала рассылается дешёвый дайджест — краткая сигнатура задачи, по которой участник решает, стоит ли вообще претендовать (это и есть критерий пригодности contract-net в действии). Только прошедшие первичный фильтр запрашивают полное описание и оценивают детально. Двухуровневое объявление ограничивает дорогую фазу оценки кругом действительно пригодных участников, а не всем роем. Без него стоимость одного раунда торгов растёт линейно по числу узлов, и рынок становится тем дороже, чем он крупнее, — ровно там, где децентрализация должна была бы помогать.
Эти четыре фазы — минимум. Реальные протоколы добавляют переторговку, частичные ставки, отзыв контракта при провале исполнителя и переаукцион. Но без любой из четырёх базовых фаз это уже не рынок.
В человеческих рынках цена — деньги. В рое агентов денег нет; «цена» — это прокси для того, что система хочет минимизировать или максимизировать. Выбор прокси определяет поведение всей топологии, и ошибка здесь — частый источник скрытых сбоев.
Разумные кандидаты на роль цены:
— Оценка токенов / стоимости исполнения. Участник заявляет, во сколько токенов ему обойдётся задача. Прямо связывает рынок с экономикой роя (см. главу 59). Проблема: агент оценивает собственную будущую стоимость ненадёжно.
— Заявленная уверенность в успехе. Участник заявляет вероятность того, что справится. Привлекательно, но открывает дверь систематической переоценке: агент, склонный завышать уверенность, выигрывает все торги и проваливает их (см. ниже о калибровке).
— Релевантность контекста. Насколько данные, нужные для задачи, уже находятся в окне участника. Объективнее уверенности: это измеримое свойство, а не самооценка.
— Текущая загрузка. Сколько контрактов участник уже держит. Превращает рынок в механизм балансировки нагрузки (см. главу 33), а не только пригодности.
Цена почти всегда композитна: инициатор взвешивает несколько компонент. Но чем сложнее функция цены, тем труднее объяснить, почему был выбран именно этот исполнитель, — а объяснимость присуждения критична для отладки роя (см. часть XI). Простая, прозрачная функция цены предпочтительнее изощрённой.