Пока в OpenAI происходит драма, я расскажу вам о том как ChatGPT научился писать, запускать и проверять код за вас, и как в этом процессе используются принципы, знакомые нам из ролевых игр.
Что такое автономные AI-агенты?
Я думаю многие из нас играли в Warcraft или Ведьмак. И я думаю вы прекрасно помните это прекрасное чувство, что виртуальный мир взаимодействует с тобой. Так вот представьте что ваша языковая модель может стать этой вселенной для выполнения тех или иных задач. Будет множество агентов выполняющих свою конкретную роль сильных в тех или иных случаях.
И так один агент это грубо говоря подличность LLM модели которая отвечает за конкретную роль выполнения задачи. Допустим мы делаем систему, которая будет помогать анализировать данные. У нас будут следующие агенты(роли):
- ассистент: тот кто получает запрос и общается с клиентом (в данном случае клиент это мы)
- аналитик (тот кто получает задачу от ассистента)
- проверяющий (тот кто посмотрит результат работы аналитика и внесет коррективы)
Почему AI-агенты работают?
В статье Systematic Evaluation of Social Roles in System Prompts и даже в блоге OpenAI писали о том что роли помогают улучшать результаты модели. Представим что наша модель это некоторый библиотекарь который буквально знает все и что бы дать ответ на вопрос она ищет некоторую информацию в своей библиотеке. Библиотека она бесконечна и в ней есть все знания мира.
Так вот если не использовать роли, то библиотекарь выдаст поверхностный ответ ведь не знает какая именно информация могла бы вам помочь. Поэтому что бы ей помочь мы описываем ей то как мы представляем себе мир. Это аналогично тому что мы ставим себя в положения другого человека и пытаемся понять как нам лучше поступить. Но на самом деле нам не обязательно описывать и реальный мир, ведь мы можем его придумать и дать модели те компетенции которые мы хотели бы использовать для нее.
Эти роли могут быть на самом деле разные это может быть как сфера деятельности, какие-то социальные навыки, эмпатичные или тд. В статье Large Language Models Understand and Can Be Enhanced например проверяют насколько модели чувствительны к эмоциям.
Autogen
AutoGen — это как ролевая игра в мире искусственного интеллекта. Он позволяет разным агентам работать вместе, чтобы решать еще более сложные задачи. Каждый агент в AutoGen может выполнять свою роль: кто-то пишет код, кто-то проверяет информацию, а кто-то даже может привлекать на помощь человека.
Самое интересное в AutoGen — это то, как эти агенты общаются между собой. Они могут вести диалоги, обмениваясь идеями и информацией, как настоящие коллеги. Это помогает им работать вместе более эффективно. Имея такую систему, разработчики могут создавать разные программы для самых разнообразных задач — от простых до очень и очень сложных.
По сути в AutoGen все завязано на разговорах между агентами. И этот фреймворк позволяет создавать и управлять такими сложными системами проще. Разработчики могут использовать как обычный язык, так и программный код, чтобы настроить этих агентов и заставить их работать вместе.
Так что AutoGen — это не просто крутая новая технология. Это целый новый способ смотреть на искусственный интеллект, где разные программы могут работать вместе, как команда, чтобы делать наш мир лучше и умнее.
Но что более важно так это что мы можем создавать абсолютно разные шаблоны использования этих агентов, как конструктор и прописывать их взаимодействие. Вообще с autogen мы получаем: логирование, кеширование API, расширенные шаблоны, обработка ошибок, вывод нескольких конфигураций и все это в одной библиотеке за пару строчек кода.
Основные концепции агентов Autogen
ConversableAgent - позволяет взаимодействовать друг с другом посредством обмена сообщениями для совместного выполнения задачи. Агент может общаться с другими агентами и выполнять действия. Разные агенты могут различаться тем, какие действия они выполняют после получения сообщения. Двумя репрезентативными подклассами являются AssistantAgent и UserProxyAgent.
AssistantAgent - предназначен для работы в качестве помощника искусственного интеллекта, по умолчанию используя LLM, но не требуя участия человека или выполнения кода. Он может написать код Python (в блоке кодирования Python), который пользователь сможет выполнить при получении сообщения (обычно описания задачи, которую необходимо решить). Под капотом код Python написан LLM (например, GPT-4). Он также может получать результаты выполнения и предлагать исправления или исправления ошибок. Его поведение можно изменить, передав новое системное сообщение.
UserProxyAgent - концептуально является прокси-агентом для людей, который по умолчанию запрашивает вводимые человеком данные в качестве ответа агента при каждом ходе взаимодействия, а также имеет возможность выполнять код и вызывать функции. UserProxyAgent автоматически инициирует выполнение кода, когда он обнаруживает блок исполняемого кода в полученном сообщении и никакой ввод данных пользователем не осуществляется.
Но что еще важно, так в autogen есть возможность использовать RAG и longchain. То-есть вы можете использовать историю между агентами и пользователем, чтение файлов или чтение больших файлов. Лично у меня просто сносит голову от того насколько можно улучшить базовый инструмент LLM моделей.
Пробуем Autogen
Давайте создадим своего первого мультиагента
1. Скачиваем autogen pip install pyautogen для python 3.8+, не забудьте создать виртуальное окружение или создайте его в docker
2. Создаем main.py
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding"})
user_proxy.initiate_chat(assistant, message="Plot a chart of NVDA and TESLA stock price change YTD.")
3. И вот что вы получите:
Но использование агентов будет стоить дороже
Microsoft проводили исследование на основе того стоит ли autogen дороже? Как мы уже убедились мультиагенты autogen определенно улучшают качество использования ЛЛМ, но насколько нам это обойдется? Они сравнивают это на простой задаче математики и как мы знаем что chatgpt3.5 с ней плохо справляется без помощи плагинов. И вот какие они получили результаты:
- Просто настроив параметры вывода, такие как модель, количество ответов, температуру и т. д., без изменения весов модели или подсказки, базовую точность ненастроенного gpt-4 можно повысить на 20 % в задачах по математике в старшей школе.
- Для решения простых задач настроенная модель gpt-3.5-turbo значительно превосходила ненастроенную модель gpt-4 по точности (например, 90% против 70%) и экономической эффективности. Для сложных задач настроенный gpt-4 гораздо точнее (например, 35% против 20%) и дешевле, чем ненастроенный gpt-4.
- AutoGen может помочь с выбором модели, настройкой параметров и экономией средств в приложениях LLM.
Ну и на самом то деле мы можем использовать небольшие модели по типу mistaral7b и получать неплохие результаты развертывая локально.
- https://www.youtube.com/watch?v=10FCv-gCKug
- https://www.youtube.com/watch?v=1VxAEYFbWKY
Статья написана в рамках курса ML System Design x ODS