Анатомия AI-агента

Давайте разберемся что под капотом обеспечивает, заявленные в определении, свойства. Есть много предложений как выстраивать когнитивную архитектуру агента, ее мы затрагивать не будем, мы поговорим на уровне логической абстракции, опустив реализацию

Цель. "You are a helpfull assistant...", с этой фразы начинается практически каждый системный промпт в любом GPT-решении общего порядка. Фактически это и есть цель. "Ты полезный помощник, помогай человеку" — звучит цель. Также в более узких функциональных агентах она может звучать по-другому (привожу в переводе на русский):

  • "Ты, бот, который помогает находить полезную информацию в интернете..."
  • "Ты, помощник, который управляет инвестиционным портфелем пользователя и помогает блаблабла..."
  • "Ты, сотрудник поддержки, который использует базу знаний для точных ответов..."

Конечно, чтобы лучше управлять следованию цели, мы придумали идею роли, формулировать ограничения, даже внутренние KPI для агента. Есть целые фреймворки, как правильно описывать агента, чтобы максимизировать качество следования цели и работу с корнер-кейсами

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

Потом мы поняли, что должен быть блок, в котором мы дадим базовую инфу (системный промпт). Туда поместим цель, опишем роль, напишем инструкции, добавим текущую дату, информацию о пользователе. Но, это все лишь улучшает ее "диалоговые качества", а нам нужно, чтобы она могла выполнять рациональные действия во внешней среде

А давайте опишем ей методы которые она может вызывать? Дадим примеры их использования и попросим ее в случае, если она видит, что, например, нужно получить список счетов пользователя, поискать в интернете или положить товар в корзину, то пусть сгенерирует вызов функции json-ом, вида: { "name": "addToBasket", "params":{ "productId": 322 } }. Тогда, мы, разработчики, сможем на выходе с модели определить, что это вызов функции, перехватить ответ, и вызвать эту функцию во внешней среде, а дождавшись ответа, подложим ей его в диалог с пометкой "это результаты выполнения вот этого запроса"

Таким образом мы подсовываем модели «глаза и руки». Теперь она может делать вызовы, собирать информацию, анализировать, планировать и пошагово исполнять, дергая апи, рефлексируя и "оперируя во внешней среде" пойдет решать задачки

Взаимодействие на естественном языке с человеком и другими агентами Взаимодействие с человеком мы разобрали, а что с другими агентами? А там тоже самое, мы можем через тулинг или другим способом научить своего агента делегировать задачи на других агентов. Передаешь задачу и весь необходимый контекст. Вуаля!

И это позволяет реализовывать сложные мультиагентные системы, где разные авторы агентов разрабатывают своих функциональных агентов, которые трудятся над одним делом. Если взять в пример SDLC-цикл, то у нас могут быть разные агенты: агент-аналитик, агент-тестировщик, агент-программист. И каждый из них делает свою часть работы. Мы в жире двигаем таску, агент возбуждается, пишет код, когда себя проверил и закончил — передвинул таску на тестирование, проснулся агент-тестировщик, взял задачу, и начал ее тестировать. Прямо как мы с вами)

Но, конечно это все потребует большой работы, чтобы пересмотреть все наши процессы, и вместо AI-enabled процессов (в которые просто добавили cahtgpt), мы перейдем к ai-native процессом, которые были спроектированы с учетом AI-агентов, со всеми требованиями, доступностью апи для агентов, системы откатывания действий и контроля со стороны кожанных мешков