Языковые модели в гармонии
Сегодня делюсь с вами хорошей обзорной статьёй «LLMs Working in Harmony: A Survey on the Technological Aspects of Building Effective LLM-Based Multi Agent Systems» («Гармоничная работа больших языковых моделей: обзор технологических аспектов построения эффективных мультиагентных систем на основе больших языковых моделей»). Далее я буду говорить «модели» для краткости, а вы знайте, что речь идёт именно о больших языковых.
Я писала подробный вводный пост про то, кто такие ИИ-агенты. Если коротко, это обычно модель с детально прописанной «должностной инструкцией» и доступом к одному или нескольким программным инструментам (например, к поиску по базе данных или в Интернете, к калькулятору, электронной почте и так далее). Сейчас в сообществе людей, которые занимаются машинным обучением, принято считать, что агент должен также обладать автономностью: то есть, не просто действовать по инструкции, а принимать решения. Но вы можете встретить и приложения, которые называются (мульти)агентными системами, но не предполагают автономности агентов: терминология пока не устоялась.
Мультиагентная система – это приложение, в котором задачу выполняет несколько ИИ-агентов. В телеграме у себя я делала пост про то, как ИИ-агентов научили играть в «Мафию» друг с другом и с людьми. Это так, для развлечения посмотрите.
К обзору
Статья перечисляет с кратким описанием разные проекты, которые были в открытом доступе к началу марта текущего 2025 года. Всего четыре направления:
· Архитектура;
· Планирование;
· Память;
· Технологии / фреймворки.
Архитектура описывает, сколько ИИ-агентов как друг с другом взаимодействуют. Координация взаимодействия агентов – непростая задача: они должны передавать данные в нужный момент в правильном формате и именно тому, кому эти данные предназначены. У них часто бывают проблемы с тем, чтобы поддерживать формат – его надо отдельно аккуратно прописывать и вклинивать специальные функции, которые будут проверять и править. Бывают проблемы с тем, чтобы заставить агента передавать информацию куда нужно – пока надёжнее задавать очень строгие последовательности «Агент А -> Агент Б -> Агент В». Можно ли их тогда называть агентами – вопрос открытый. Чем сложнее задача и чем больше агентов, тем больше тонкостей.
Авторы статьи приводят четыре разных решения, включая Лес Агентов, про который мы говорили как раз на днях, и Ансамбль Агентов, про который мы говорили немного раньше. У обоих подходов есть ограничения: они повышают стоимость работы, справляются только с задачами до определённого уровня сложности и требуют дополнительных усилий по управлению большим числом агентов.
Впрочем, оба варианта основаны на вполне реальных и подтверждённых преимуществах ансамблевых алгоритмов. Так что посмотреть есть на что, но это «что» надо ещё дорабатывать.
Планирование – это, собственно способность модели генерировать план действий и ему следовать. Но загвоздка здесь не в планировании как таковом, а в адаптивном планировании в ответ на меняющуюся среду. Мы обсуждали, как к решению этой задачи подходит компания Physical Intelligence, которая делает роботов и использует языковые модели для планирования действий этих роботов по ситуации. Их статья не попала в наш сегодняшний обзор, так как вышла на несколько месяцев позже, но она очень интересная, потому что очень практикоориентированная. Одно дело – решение математической задачи, пускай даже сложной. Другое – робот уронил кусочек тоста и не может продолжать делать сэндвич.
Ограничения у связанных с планированием решений в основном следующие:
· это дорого, потому что надо генерировать много текста;
· большинство приложений протестировано на абстрактных математических, логических задачах или задачах на здравый смысл (сначала налить воду в кастрюлю, потом вскипятить, а не наоборот).
Здорово помогает усовершенствовать планирование работа с памятью. Авторы приводят в пример фреймворк RAP, который даёт моделям доступ к базе данных с записями о прошлом опыте. Код к этой статье я не нашла, зато вспомнила другой пример – статью про симуляцию человеческого поведения, которую мы тоже обсуждали. К ней есть код в открытом доступе, и там авторы очень предметно работают с памятью и планированием. Очень хороший проект, посмотрите его.
В обзоре есть ещё пара интересных работ, но я упомяну одну, которая туда не попала: рассуждения с возвратом на предыдущий этап. Этот подход позволяет возвращаться на предыдущий пункт в цепочке рассуждений с новыми данными и проверять, всё ли сходится или надо переделать. То есть, это не совсем про планирование как таковое, но про решение задач в целом и планирование в том числе.
Память мы уже затронули. Краткосрочная память обеспечивается за счёт хранения действий модели или диалога с пользователем во временной переменной. В таком случае, когда рабочая сессия завершена, вся информация удаляется. Долгосрочная память требует специального хранилища, в которое информация будет складываться и храниться в течение длительного периода времени. После того, как пользователь завершит диалог и закроет приложение, сообщённые им данные никуда не денутся, и в следующий раз модель «вспомнит» (то есть, достанет из базы данных), что пользователь с ней обсуждал.
Использование долгосрочной памяти сопряжено с рядом сложностей, из которых я выделю две:
· заполнение хранилища и
· сбор, хранение и обработка чувствительных данных.
Заполнение хранилища – проблема чисто техническая: у нас есть ограниченный объём памяти, и мы хотим в него впихнуть максимум информации о пользователе. Иначе наша модель будет задавать одни и те же вопросы, и пользователь разозлится в конце концов.
Часто с языковыми моделями используются векторные базы данных: текст трансформируется в векторы и хранится там в компактном формате. Можно использовать и табличные (реляционные) базы данных, но для хранения более структурированной информации: для больших массивов текста они плохо подходят.
Чтобы эффективно использовать объем базы данных, применяются разные техники, например:
· сокращение (summarization): вместо текста целиком хранится его краткий пересказ, который содержит только ключевые факты;
· забывание: та информация, которая реже всего используется, удаляется из базы – этот механизм заимствован у человеческого мозга;
· контроль: есть дополнительный модуль, который определяет, какие воспоминания хранить, как и когда их использовать.
Наконец, фреймворки помогают собрать всё вышеперечисленное воедино. Суть фреймворка в том, чтобы ускорить процесс разработки и сделать код более читаемым. К примеру, есть у нас задача: найти в Википедии информацию о бобре. Без фреймворка мы должны были бы сделать примерно следующее:
1) отправить правильно составленный запрос в Википедию;
2) получить страницу про бобра и обработать её специальными инструментами так, чтобы оставить только текст и удалить информацию о структуре страницы;
3) передать модели полученный текст с интересующим нас запросом.
С фреймворком мы запустим функцию вроде ищи_в_Википедии(«бобр»), и всё. Все вышеперечисленные этапы спрятаны внутри этой функции, наш код компактен и чист.
Пример с Википедией несколько примитивный, но наглядный. По-настоящему же мощь фреймворков раскрывается, когда нужно составить комбинацию из нескольких моделей, которые используют разные инструменты, работают каждая по своей инструкции и передают информацию друг другу. Фреймворки обеспечивают правильное форматирование данных и стыковку разных этапов процесса между собой. Без них работать громоздко, неудобно и вредно для душевного равновесия.
Фреймворков много разных, они созданы под разные задачи и имеют свои преимущества и недостатки. Я в последнее время в качестве основного фреймворка использую LangGraph: он позволяет рабочие процессы представлять в форме направленных графов, что конкретно для моих задач подходит как нельзя лучше. Но кое-какие подходы я заимствую из других фреймворков: в CrewAI очень здорово продумана структура основного промпта, а инструменты описаны как классы или функции; из MetaGPT грех не утащить идею описывать задачи как стандартные операционные процедуры и так далее.
Заключение
Мне эта статья очень нравится, потому что она прекрасно структурирована и даёт много полезной информации в сжатом виде. Если вы разрабатываете решения на базе языковых моделей или планируете начать, загляните туда обязательно.
А потом ещё загляните ко мне в телеграм, там тоже куча всего полезного.