CAMEL. Ролевой подход к ИИ-агентам

Сегодня рассказываю про интересный инструмент – мультиагентный фреймворк CAMEL. Он был представлен миру в 2023 году в статье «CAMEL: Communicative Agents for "Mind" Exploration of Large Language Model Society» («CAMEL: коммуникативные агенты для исследования «разума» сообщества больших языковых моделей»). Мы говорили про разные инструменты, такие как LangChain, например, но у этого есть важная особенность: он создавался для автономного взаимодействия между ИИ-агентами без участия человека. Это проект с открытым исходным кодом, его можно найти на гитхабе, установить себе и самостоятельно протестировать. У проекта также есть сайт с примерами использования фреймворка и обучающими публикациями.

Описание подхода

Начнем, по традиции, с разбора статьи. Цели, которые поставили перед собой авторы, – исключить необходимость постоянного участия человека в процессе работы агентов над задачей и изучить принципы кооперации агентов между собой.
Самостоятельная работа агентов часто срывается из-за незапланированной смены ролей, дублирования инструкций, несоответствия запроса и результата или ухода в бесконечный цикл сообщений. У меня как-то был эксперимент с небольшой иерархической системой, в которой был агент-менеджер и два подчиненных агента, один из которых собирал данные, а другой писал анализ. Задача передавалась от меня менеджеру, и он должен был передать ее своим «подчиненным» и проконтролировать выполнение. Задача заключалась в сборе информации о некоторых компаниях из заранее определенного списка. На первой же компании сборщик информации зачем-то отправился искать статьи о зеленой энергетике в Китае (на сайте нужной компании был раздел про зеленую энергетику, и агента понесло). Менеджер, получив результат, развернул «коллегу» переделывать работу, но тот опять забыл инструкции и принес список биржевых индексов, которых у него никто не просил, для компаний, которых не было в списке. Менеджер опять его развернул. На энном круге я остановила этот поток самодеятельности и села перестраивать архитектуру.
Авторы, видимо, понаблюдали нечто подобное и сели придумывать способ упорядочить работу агентов. Придумали ролевой подход (role-playing).
В рамках этого подхода пользователь задает только первичный промпт с описанием задачи и роли для ИИ-агентов, а дальше агенты генерируют запросы друг для друга.

<i>Схема из статьи</i>
Схема из статьи

Еще есть системные промпты – промтпы, которые указывают каждому агенту, что и как они должны делать (один должен давать задания, другой – их выполнять).
В примере на схеме ИИ-агентам заданы роли Пользователя (биржевого маклера) и Ассистента (программиста на Python). Кроме них есть еще один агент, который участвует в процессе только один раз, трансформируя запрос «Разработать бота для фондового рынка» в набор четких инструкций: «Использовать отношение пользователей соцсетей к компании чтобы определить план покупки и продажи акций». Инструкции передаются ИИ-Пользователю и ИИ-Ассистенту, которые общаются между собой: Пользователь ставит конкретные задачи (например, «загрузить нужные библиотеки Python»), Ассистент их выполняет.
В расширенной версии предлагается использовать еще одну роль – критика. Это может быть как ИИ-агент, так и человек, который оценивает инструкции Пользователя и ответы Ассистента и корректирует их или выбирает наилучший вариант из предложенных.
Примеры промптов приведены в приложении к статье.
В качестве языковой модели в экспериментах использовали gpt-3.5-turbo. Основные проблемы, возникшие в процессе работы:

  • смена ролей: Ассистент начинает давать инструкции пользователю;
  • повторение Ассистентом инструкций Пользователя без их выполнения;
  • ненадежные ответы Ассистента: говорит «могу сделать», но на деле не может;
  • застревание в бесконечном цикле: Пользователь и Ассистент бесконечно выражают друг другу благодарность или прощаются и не могут остановиться.

Решали с помощью доработки системных промптов:

  • прямой запрет на смену ролей и запрет Ассистенту давать инструкции, а Пользователю на них отвечать;
  • требование к Ассистенту предоставить ответ на каждую инструкцию, не повторяя ее;
  • требование к Ассистенту сообщать о своих ограничениях и невозможности решить поставленную задачу;
  • введение специального токена <CAMEL_TASK_DONE>, который выводит Пользователь после завершения работы над задачей. После появления этого токена оба агента прекращают разговор.

Заключение

CAMEL хорошо показал себя на тестовых заданиях за счет упорядочивания процесса общения между агентами. Было бы интересно скрестить этот подход с идеей MetaGPT: там агенты общаются, передавая друг другу структурированные документы с детальным и пошаговым описанием задач. И еще добавить память и рефлексию. Экспериментирую в эту сторону.

Начать дискуссию