ИИ-агенты

Сегодня будет пост на тему, которая уже некоторое время занимает мои мысли. Я исследую ИИ-агентов, экспериментирую с созданием агентных систем и пишу про них у себя в телеграме. Вот подборка постов, которые помогут вам получить больше контекста:

Я убеждена в том, что будущее за ИИ-агентами, поэтому надо разобраться в них сейчас, чтобы потом пожинать плоды (а то будет как с блокчейном). Так не только я думаю, но и многие специалисты, которые пристально следят за развитием ИИ и сами это развитие двигают. Сегодня попробую убедить в этом и вас.

(ИИ-агент, изображение сгенерировано с использованием DALL-E)
(ИИ-агент, изображение сгенерировано с использованием DALL-E)

Для начала немного теории

Агентом можно назвать любую программу, которая автономно решает заранее заданную задачу. Если не брать пока ИИ, то, например, агентом будет программа, которая в среду в 12:00 отправляет письмо с информацией о числе сотрудников на рабочем месте в отдел кадров. Вы указываете агенту, откуда брать актуальные данные (например, из excel-таблицы, в которой вы каждое утро ставите галочки напротив фамилий присутствующих сотрудников), а он их забирает, обрабатывает и отправляет. Ваша помощь каждый день ему не нужна (для запуска и отправки письма).
С ИИ-агентами логика, в общем, та же: вы заранее придумали задачу (например, писать пост в ваш блог каждый четверг в 18:00 со сводкой новостей из мира ИИ за неделю). Агент каждый четверг сам запускается, шерстит Интернет в поиске новостей с момента прошлого поста, пишет текст так, как вы ему заранее указали, и отправляет публикацию. Я существенно упростила процесс работы агента для того, чтобы дать вам некоторое интуитивное представление. Далее мы постепенно разберемся со всеми нюансами.
Мы уже ранее сказали, что ключевое свойство агентов – автономность. Для ИИ-агентов это тоже верно. Однако ИИ-агенты обладают еще некоторыми свойствами:

  • они собирают, обрабатывают и используют информацию об окружающей среде (в роли среды могут выступать данные, получаемые от каких-нибудь датчиков, например, в беспилотном автомобиле или запросы пользователя, который общается с чат-ботом);
  • они самостоятельно решают, как выполнить задачу. Вы ставите цели – они достигают результатов.

Важное уточнение: не каждый чат-бот является агентом. Например, ChatGPT не является: вы должны каждый раз инициировать общение с ним и задавать вопросы, и только тогда он будет совершать действия. А чат-бот, который выскакивает на вас на сайте магазина косметики – это агент. Как правило, это довольно примитивный агент, но тем не менее. Он может помочь вам сделать заказ, ответить на некоторые вопросы или позвать оператора-человека. Я недавно с помощью такого чат-бота успешно записалась к врачу, и он даже ничего не напутал.Второе важное уточнение: разумеется, вы можете заранее задать желаемый алгоритм достижения результата. В сложных ситуациях (таких как беседа с покупателем в онлайн-магазине или на сайте медицинского учреждения) вам не удастся предусмотреть все варианты развития событий, поэтому часть решений все равно будет принимать агент. Но вы можете дать ему инструкции общего характера: «Если покупатель зол, зови человека».

Плюсы использования агентов очевидны:

  • вы снимаете часть нагрузки с сотрудников-людей;
  • агенты выполнят задачи быстрее;
  • внедрение агентов, вероятно, будет затратным поначалу, но в долгосрочной перспективе избавит вас от части издержек.

Но будет правильно рассказать и о минусах:

  • нужно очень строго следить за безопасностью данных пользователей (про безопасность мы немного говорили здесь. Это был пост, связанный с безопасностью данных при использовании больших языковых моделей, и он совершенно актуален для агентов);
  • нужно очень строго следить за тем, чтобы агент не натворил ерунды (например, не начал ругаться с покупателями. Конечно, если мы используем большие языковые модели, часть этого риска отработали их создатели, позаботившись о том, чтобы модель всегда отвечала доброжелательно. Однако они все еще ошибаются – и модели, и создатели, – так что важно предусмотреть механизм отслеживания работы агентов и исправления возникающих ошибок);
  • агенты всё-таки сложные (вам нужно либо разбираться в них самостоятельно, либо нанять хороших специалистов, иначе процесс внедрения превратится в непрекращающуюся головную боль);
  • наконец, для работы агентов нужны вычислительные ресурсы (про ресурсы я писала здесь и здесь; если вы маленький бизнес с маленьким сайтом, собранным на коленке, вам, возможно, пока рановато вводить агентов).

Какие они бывают

В этой части я процитирую публикацию AWS, которая, как мне кажется, неплохо структурирует тему.
Разнообразие велико, выделим несколько типов для примера:

  • простые реактивные агенты (не на реактивной тяге которые, а которые реагируют на заданное изменение условий, например, наступление 12:00 в среду);
  • агенты, в основе которых лежат модели (они могут принимать более сложные решения и опираться на предыдущий опыт. Кроме того, у них в распоряжении есть вся информация, которая есть в памяти модели. Когда я говорю «информация есть в памяти модели», имею в виду систему коэффициентов, которые сохраняются в процессе обучения. Но можно думать об этой памяти так: модель «знает», что мед сладкий, а перец острый. Если ваш клиент попросит посоветовать сладость, она не предложит ему сычуаньский перец – если только вы не обучили ее своему извращенному чувству юмора);
  • агенты, ориентированные на цель (направлены на выбор наиболее эффективного способа решить поставленную задачу. Например, если ваш агент помогает вам с бронированием билетов из точки А в точку «отпуск», он будет учитывать время вылета, стоимость билетов, количество пересадок и так далее. Если ваша цель – «долететь дешево», он будет искать наиболее дешевый вариант, но, возможно, не самый комфортный);
  • агенты, ориентированные на полезность (направлены на повышение удовлетворенности пользователя. Возвращаясь к примеру с билетами: агент, ориентированный на полезность, позаботится о том, чтобы вы не летели ночью, недолго пересаживались, сидели у окошка и все такое. Даже если стоимость будет выше. Впрочем, если бюджет – это серьезное ограничение, вы всегда можете это указать, и агент подстроится);
  • обучающиеся агенты (тут понятно: они совершенствуются по мере того, как вы с ними общаетесь);
  • мультиагентные системы (группы агентов, которые взаимодействуют по определенным правилам, чтобы решить сложную задачу).

Мультиагентные системы

Остановимся поподробнее на последнем пункте списка. Мы уже сказали о том, что агенты могут взять на себя часть ваших рутинных задач. Но рутинные задачи могут быть как сравнительно простыми (отправить письмо с данными из excel-таблицы), так и сложными, состоящими из нескольких подзадач. Возьмем, например, написание поста о новостях из мира ИИ за прошедшую неделю. Что для этого нужно сделать?

  1. отправиться в интернет и собрать данные;
  2. отфильтровать данные по дате;
  3. привести в наглядный вид (сделать краткий пересказ каждой новости, сложить всё в табличку или в маркированный список, выделить шрифтом самое важное);
  4. возможно, нарисовать иллюстрацию для большей наглядности;
  5. проверить полученный пост на наличие фактических, стилистических и грамматических ошибок;
  6. опубликовать.

Ну примерно так.
Конечно, можно поручить все эти задачи одному агенту, но есть пара нюансов:

  • ваша задача может состоять из очень разных подзадач. Например, если вы пишете аналитическую сводку, вам нужно написать код для построения графиков, а потом эти графики понятно описать. С этим может справиться и один агент, но ему нужно будет дать очень широкую постановку, он может запутаться или что-то забыть. Гораздо лучше, если код будет писать агент-программист, а текст – агент-аналитик. У каждого будет своя маленькая задача, и оба справятся лучше;
  • если ваши агенты – узкие специалисты, вы их сможете использовать для разных больших задач. Есть вот у вас агент-программист, он строит графики. И он будет успешно строить графики хоть для поста про маркетинг, хоть для вашего обучающего курса для юных специалистов по анализу данных. А текст нужно будет писать разный, поэтому в первом случае «программист» будет работать в паре с «аналитиком», во втором – с «преподавателем». А потом вы захотите решить третью задачу и пересоберете ваших агентов в новую группу. Внутри самих агентов ничего не придется менять, только выбрать подходящих;
  • если вы создаете агентов под сложные задачи, то столкнетесь с избыточностью: код будет писать и агент-аналитик, и агент-преподаватель. А если нужен преподаватель по маркетингу, например? Тогда код писать не нужно, а нужно создать еще одного преподавателя с новой специализацией. Вы будете постоянно делать двойную работу, оно вам надо? Не надо;
  • мультиагентные системы позволяют агентам работать параллельно (если это не нарушает логику процесса). Не нужно ждать, пока завершится написание кода, чтобы нарисовать смешные картинки к посту;
  • каждый агент может использовать свою модель (некоторые модели лучше пишут текст, другие лучше справляются с кодом, третьи хорошо рисуют. Вы можете использовать лучших из лучших для каждой узкой задачи);
  • наконец, в сложной среде (например, при управлении беспилотным автомобилем) каждый агент может отвечать за свою часть контекста. Один агент может не справиться, и тогда результаты будут так себе (особенно при управлении беспилотным автомобилем).

Короче говоря, система из узкоспециализированных агентов надежнее, безопаснее и легко перестраивается под разные задачи, за это мы их и любим.
Такие системы используются в умных домах, беспилотных автомобилях, на роботизированных производствах, в компьютерных играх и много где еще.
Я надеюсь, вы любите списки, потому что у меня для вас есть еще один – список мультиагентных структур. Они есть всякие, я буду частично опираться на статью из блога IBM:

  • иерархические структуры (есть один агент, который планирует выполнение сложной задачи, разбивает на более мелкие задания и раздает эти задания агентам-специалистам);
  • связанные структуры (в оригинале holonic structure; в одной связке состоит несколько агентов, присутствие каждого из которых принципиально важно, иначе связка не будет работать. При этом один агент может участвовать в нескольких связках. Связки управляются иерархически. Отличие от иерархической структуры вот в чем: иерархические структуры древовидные, там задачи спускаются сверху вниз; а в связанных структурах отдельные связки друг от друга независимы, и единого центра у них нет);
  • коалиционные структуры (агенты действуют независимо, но умеют временно объединяться, чтобы обменяться данными, например);
  • командные структуры (похожи на коалиционные, но здесь меньше независимости: у каждого агента своя роль, они всегда работают вместе и не разделяются, как в коалициях).

Самое интересное –

а как себе такое сделать?
Если вы подумали и поняли, что вам нужны агенты, то есть несколько хороших правил, которые можно использовать:

  • стоит разбить вашу большую задачу на несколько маленьких, в идеале неделимых задач (мы об этом сказали чуть выше);
  • каждому агенту можно назначить свой набор инструментов (не нужно вручать все доступные инструменты, только то, что агенту потребуется в процессе работы);
  • не ленитесь как следует прописать роль и цель агента, а также форматы поступающей на вход и ожидаемой на выходе информации (промпт-инжиниринг – наше всё; четко поставленные задачи помогают и людям, и ИИ лучше с ними справиться);
  • избегайте двусмысленности (лучше повторить что-то дважды, чем предоставить агенту додумывать за вас);
  • включите в систему проверку информации (человек тоже может быть агентом в системе и проверять за своими синтетическими коллегами; это не всегда оптимальный вариант, но, возможно, он подойдет именно вам);
  • если какую-то задачу можно решить без привлечения ИИ, решите ее без привлечения ИИ (это сохранит вам время, деньги и нервные клетки. Иногда самое важное – вовремя остановиться).

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

  • LangGraph;
  • Toolhouse;
  • CrewAI;
  • AutoGen;
  • Swarm (эта штука экспериментальная, ее сделали OpenAI и говорят, что, возможно, не будут поддерживать и развивать. Но все равно можно посмотреть).

Моя мультиагентная душенька лежит больше к CrewAI. Мне этот фреймворк (программная платформа) кажется наиболее гибким и интуитивно понятным, но это уж вкусовщина.
У меня на гитхабе есть маленький пример, который я сделала для демонстрации возможностей CrewAI коллегам. Можете тоже заглянуть, если интересно.

Заключение

Пост получился чуть длиннее, чем я рассчитывала, но, думаю, оно того стоит. Я буду еще писать про агентов здесь и у себя в телеграме. Надеюсь, что смогла вас заинтересовать.

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