Обновить

Долой иерархию и роли: о том, как LLM-агенты самоорганизуются лучше, чем мы их проектируем

Время на прочтение7 мин
Охват и читатели8K
Всего голосов 11: ↑9 и ↓2+7
Комментарии11

Комментарии 11

Расскажите, пожалуйста, подробнее о некоторых моментах:

  1. На каких конкретно задачах вы проводили эксперимент?

  2. Как именно агенты сами назначали себе роли или выбирали специализации? И как в вашем понимании соотносятся роль и специализация? Вот представим, что перед многоагентной системой читателей Хабра поставлена задача прокомментировать вашу статью. Нам конечно можно назначить роли рецензентов/комментаторов/советчиков/критиков/эксперт и т.д., но в моем представлении каждый придет со своим набором знаний и даст комментарий из которого и будет выведена специализация: но как назвать эту конкретную специализацию, есть ли у нее имя? Не окажемся ли мы просто комментаторами с разными специализациями (злой/добрый/компетентный/въедливый/специализирующийся на чем-то комментатор) В вашем случае как именуются и различаются между собой все 5006 специализаций? Не является ли роль просто более общим по отношению к специализации понятием?

  3. Как агенты определяют, что им надо отказаться от какой-либо задачи?

  4. Нет ли проблем с ростом контекста для каждого агента? В моем понимании в задачи координатора как раз входит недопущение неконтролируемого роста контекста.

Спасибо за вопросы — в точку!) По порядку:

1) Решали четыре уровня сложности задач. L1 — одна область, 3–5 шагов (например, разработка API). L2 — два домена, интеграция знаний (например, провести финансовый анализ + анализ рисков). L3 — 3+ домена, 10–20 шагов с зависимостями (например, разработать end-to-end ИТ-продукт с backend+frontend+обвзяка, на выходе выдать готовый продукт). L4 — состязательные: конфликтующие интересы стейкхолдеров, неполная информация, нет единственно верного ответа (CEO vs Legal vs CFO за бюджет), задачи на исследование / R&D. Задачи сгенерированы сильной LLM (Claude/GPT-5+) синтетически для контролируемого сравнения — это ограничение исследования, и мы его признаём. Сейчас тестируем на нескольких реальных бизнес-задачах.

2) Роли и специализации. Ваша аналогия с комментаторами Хабра — точная) Именно это и происходит. Агент получает в промпте задачу + результаты предшественников (в Sequential) и сам решает, как себя назвать и что делать. Никакого списка ролей ему не даётся. Пример реальных самоназванных ролей на одной L3-задаче: «Regulatory Compliance Architect», «Cross-System Integration Strategist», «Adversarial Risk Analyst». На другой задаче те же агенты назвали себя совершенно иначе. Является ли роль более общим понятием, чем специализация? В нашем эксперименте — нет, потому что агенты не выбирают из каталога. Они каждый раз изобретают функцию под конкретную задачу. 5 006 уникальных названий — это не таксономия, а 5 006 уникальных строк, сгенерированных агентами. 54% из них встречаются ровно один раз. Я бы даже сказала, что «ролей не существует, это функция момента. Агент просто решает задачу.» Это ближе к тому, как если бы каждый ваш комментатор не просто был «злым» или «добрым», а описал бы свою позицию как «человек, который 10 лет строил API-шлюзы и видит тут конкретную проблему с rate limiting» — и для следующей статьи описал бы себя совершенно иначе. Так что в нашем случае «роль» и «специализация» — это одно и то же: функция, которую агент создаёт под задачу и которая перестаёт существовать после её завершения.

3) Как агент решает отказаться? Это следствие промпта и, предположительно, способности модели к саморефлексии (self-reflection). Агент видит, что уже сделали предыдущие, и если не может добавить ценности — пишет отказ. Мы не программируем заранее ни порог, ни правило. Claude делает это в 8.6% случаев и попадает в оптимум. Слабые модели либо не отказываются вообще, либо отказываются слишком часто — и то, и другое снижает качество.

4) Рост контекста. Да, абсолютно так. В Sequential контекст растёт линейно: каждый следующий агент видит выходы всех предыдущих. При N=16 это управляемо, при N=256 — потенциальная проблема. На практике два механизма сдерживают рост: (1) самоотвод ~45% агентов при больших N сокращает объём контента, (2) выходы предшественников передаются в сжатом виде. Но вы правы — при O(N) это узкое место, и batched sequential (группы по K агентов параллельно) — следующий шаг. P.S. Спасибо за идею — сделаю в статье отдельный раздел про вызовы таких протоколов.

Лучше всего работает опенсоурс, а не мифические статьи в вакууме.

Недавно наткнулся на gstack - который сломал теорию как нужно писать промпты, там скиллы с чеклистами на пару томов. Работает идеально.

Статья прям от агента - проделано много работы, а толку.

Спасибо за комментарий! Кажется, мы про разное.

Статья не про промпты и не про то, как запускать одного агента. Она про координацию — как группа из 4–256 агентов решает задачу вместе, и какой протокол взаимодействия даёт лучший результат. 25 000 задач, 8 моделей, статистика — это как раз попытка выйти из вакуума и проверить гипотезы на данных.

Если у вас есть опыт координации нескольких агентов через gstack — было бы интересно сравнить подходы.

Так без системного промпта агент вообще ничего не сделает. Нет запроса - нет ответа. Прочитал статью, но так и не понял устройство эксперимента. Вообще не понял, для меня ценность этой статьи - нулевая.

Как ставится задача? Где находится ее постановка? В общем хранилище?

Через что взаимодействуют агенты? Как они видят процесс, действия других агентов?

Куда пишется результат?

Как устроен системный промпт агента, по которому он начинает действовать?

Какие задачи ставились (примеры)?

Для нулевой ценности — неплохой список вопросов :)) Отвечу по порядку.

  1. Как ставится задача?
    Задача приходит в промпте каждому агенту. В Sequential — вместе с результатами всех предыдущих агентов. В Coordinator — вместе с назначенной ролью от агента-координатора. В Shared — вместе с историей из общей памяти.

  2. Через что взаимодействуют агенты?
    Между агентами стоит тонкий транспортный слой — Python-скрипт, который передаёт выходы между агентами по правилам протокола. Он не принимает никаких решений — не назначает роли, не фильтрует агентов, не выбирает порядок действий. Это просто "почтальон". Все содержательные решения (кем быть, участвовать ли, что делать) принимают сами агенты.

  3. Как агент видит действия других?
    Зависит от протокола — в этом и суть эксперимента. Sequential: видит завершённые результаты предшественников. Broadcast: видит намерения всех. Shared: видит историю прошлых задач. Coordinator: видит только назначение от координатора. Сравнение этих вариантов — часть проведённой работы.

  4. Куда пишется результат?
    Каждый агент возвращает структурированный JSON (выбранная роль, решение, обоснование). Результаты агрегируются, затем независимая модель-судья оценивает итоговое решение по 5 критериям. Некоторые промежуточные решения могут быть сохранены в БД.

  5. Системный промпт.
    Содержит миссию, видение и долгосрочные цели организации, описание протокола (правила взаимодействия), формат ответа. Не содержит назначенной роли — агент выбирает специализацию сам, исходя из контекста. Возможно, в рамках продолжения исследования опубликую промпты вместе с кодом.

  6. Примеры задач.
    L1: «Разработать безопасный API-эндпоинт: аутентификация, rate limiting, валидация входных данных». L2 — два домена, интеграция знаний (например, провести анализ - фин.анализ+анализ рисков). L3 — 3+ домена, 10–20 шагов с зависимостями (например - 1) разработать end-to-end ИТ-продукт - с backend, fontend), 2) Спланировать миграцию организации на zero-trust: архитектура сети → IAM → compliance для 3 регуляторов → бюджет и сроки»). L4 — состязательные: конфликтующие интересы стейкхолдеров, неполная информация, нет единственно верного ответа. Например: «CEO требует запуск за 6 недель, Legal настаивает на 6-месячной проверке compliance, CFO требует сократить бюджет на 30%. Найдите решение». Также задачи на исследование и R&D. Про ограничения и планы написала в ответе на комментарий выше.

Вот это уже намного интереснее, и статья становится понятнее, спасибо)

Много рассуждений как хорош Конвейер, но как вы это делали? Или это секрет?

  1. Я правильно понимаю, что в Sequential в один момент времени работает один агент, и получается не важно сколько их 1 или 256? То есть, это итеративное выполнение задачи с обратной связью, даже более, с историей обратных связей?

  2. Я правильно понимаю, что во всех остальных способах организации задачи решаются не итеративно и обратной связи никакой нет, там есть только планирование и дальнейшее выполнение за одну итерацию (есть сомнения про Shared)?

Офигенно, жду препринт.

А замеряли time-to-completion по протоколам? Sequential на 16 агентов - это 16 последовательных вызовов. +14% по качеству при кратном росте латентности в продакшене с SLA часто означает деградацию, а не улучшение. Интересно было бы увидеть кривую quality/latency, это сразу покажет, где какой протокол применим.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации