Как мы делаем веб-сервис для автоматизации рабочих задач на базе агентов LLM
Друзья, всем привет! Сегодня хотим рассказать про то, как мы — Виталий, Даниил, Роберт и Никита — при поддержке AI Talent Hub, совместной магистратуры Napoleon IT и ИТМО, создаем Цифработа — сервис цифровых работников, который помогает оптимизировать временные затраты у сотрудников на выполнение рабочих задач с помощью агентов больших языковых моделей (LLM).
В данной статье мы вкратце рассмотрим, кто такие агенты, как они могут автоматизировать рабочие процессы, и обсудим ключевые вызовы, с которыми мы столкнулись при разработке сервиса. Сразу хочется отметить, что данная статья, скорее, служит обзором нашего решения проблемы и тех задач, над которыми мы работали, нежели преследует цель предоставить подробное руководство по применению агентов или проектированию архитектуры сервиса.
Предлагаем начинать!
Кто такие агенты больших языковых моделей?
Не секрет, что сами по себе большие языковые модели не могут свободно взаимодействовать с документами, сервисами, оперировать актуальной информацией и другими важными составляющими повседневной жизни, которые нам очень нужны, — это значительно ограничивает их область применения.
Агенты же, о которых пойдет речь дальше, позволяют снимать данные лимиты и выполнять весьма сложные задачи за счет структуры, которую кратко можно описать картинкой ниже:
Проще говоря, если нам к нашей LLM (наиболее подходящая сущность для использования в качестве “мозга” у агентов) подключить навык планирования, память и дать какие-то инструменты, которые агент может использовать при решении задач, мы получаем более мощную сущность, способную к рассуждению, планированию и декомпозиции задач и имеющую возможность взаимодействия с окружающей средой — это мы и пониманием под агентами больших языковых моделей.
Интересный факт: с ростом количества параметров у больших языковых моделей начинают проявляться новые навыки, которых раньше не было . К слову, это увеличивает и качество работы агентов (всех интересующихся фактом эмерджентности LLM рекомендуем данную статью.
Модули памяти вкупе с планировщиками позволяют агенту ориентироваться и работать в динамичной среде, анализируя результаты предыдущих действий и планируя следующие. Помимо этого, важной составляющей являются инструменты, которые мы передаем LLM. Как мы уже отмечали ранее, сама по себе большая языковая модель ограничена знаниями, которые она получила в процессе обучения. Если попросить ее решить задачу, пускай даже не очень сложную, она в лучшем случае напишет алгоритм действий, но предпринять что-то еще не сможет. Инструменты — это тот компонент, который позволяет модели выйти за рамки тривиальной генерации текста. Вы как бы говорите: "Окей, ты знаешь как решить задачу, теперь сделай это с помощью [набор инструментов, который вы создали]". И самое удивительное - это работает.
Но вернемся к языковым моделям. Чем они мощнее, тем лучше агенты справляются с решением задач. Однако при выборе LLM приходится балансировать между качеством генерации ответов и обеспечением безопасности данных. Если в вашем случае допустимо использовать проприетарные модели, следует обратить внимание на варианты, предоставляющие API: ChatGPT, Claude, Gemini, YandexGPT, GigaChat и другие.
Их проще использовать, так как они не требовательны к железу на вашей стороне, обладают более высоким качеством генерации ответов и зачастую более выгодные, сравнивая с развертыванием open-source моделей.
Если вопросы безопасности требуют более тщательного контроля данных, необходимо разворачивать локальные LLM (хотя есть варианты маскирования данных по типу решения Jay Guard от Just AI при обращении к облачным LLM, но в полной мере они проблему не решают). У них есть ряд преимуществ по сравнению с проприетарными моделями, такие как развертывание на собственном железе, возможность дообучения на конкретной доменной области и т.д. Однако при этом ключевыми ограничениями все также будут являться издержки на инференс моделей, более низкое качество ответов, возможные пробелы в отдельных доменах и не очень хорошая работа с русским языком. В качестве ознакомления с работой агентов на open-source LLM можно посмотреть данную статью.
Некоторые аспекты работы агентов
Сам по себе агент структурно небольшое, хоть и важное дополнение к стандартным возможностям больших языковых моделей. Но что если собрать команду из нескольких агентов и научить их работать вместе?
В таком случае мы получаем сразу несколько преимуществ.
Возможность тонкой настройки: каждый агент концентрируется на своей области, у него собственный набор инструментов и инструкций, при необходимости - своя языковая модель.
Распараллеливание: сложные задачи можно разделить между агентами, что значительно повышает скорость их выполнения.
Повышение качества ответов: так как каждый агент выполняет только небольшую часть задачи и использует только нужные ему инструменты, снижается вероятность совершить ошибку.
Языковые модели все еще не очень сильны в рассуждениях и планировании, а вероятность ошибки растет с увеличением количества шагов, поэтому за счет декомпозиции сложных задач на отдельные составляющие и их распределения на несколько независимых агентов можно добиться значительного увеличения качества работы.
Существует множество способов организовать работу агентов, и каждый подход обладает своей спецификой. Например, у агентов LLM часто может возникать проблема с вызовом нужного инструмента или передачей в него параметров, особенно, когда инструментов становится очень много или они неточно определены. Отдельный агент может правильно обозначить задачу, но вместо вызова конкретного инструмента, который можно использовать для решения, будет постоянно возвращаться с уточняющими вопросами. В таком случае можно попробовать создать иерархию агентов, каждому из них выделить небольшой набор инструментов и ограниченный перечень задач.
Допустим, нам нужно назначить встречу и пригласить на нее несколько участников. Если мы попытаемся решить эту задачу с одним агентом, ему нужно будет вызвать последовательно 2-3 инструмента и всю промежуточную информацию хранить в памяти: сначала проверить свободные слоты у всех участников в их календарях, после чего на свободный слот добавить встречу, а затем написать каждому участнику письмо на почту с приглашением.
Мы можем создать несколько агентов. Пусть первый отправляет и пишет сообщения на почту, второй отвечает за календари и расписание, третий ищет информацию в базах данных компании, а последний распределяет задачи и отвечает за результат. Такая структура позволяет значительно увеличить точность выполнения задачи.
Способов создания и организации агентов существует много, выбор обычно зависит от конкретной задачи и доступных ресурсов, поэтому рассматривать этот аспект в данной статье мы не будем. Подробнее о существующих типах агентов можно почитать в этой статье, а подробнее об агентах в целом в этой.
Таким образом, мы можем встраивать агентов в любое окружение: вам нужен ассистент на сайте, который будет вести клиентов от первого посещения до совершения целевого действия - агенты хорошо с этим справятся. Или вам нужно быстро скринить резюме кандидатов, чтобы находить наиболее подходящих, после чего отправлять эти резюме HR-специалисту в сообщении — тоже хорошая (а главное выполнимая) работа для агентов. Так мы можем явным образом снять нагрузку с сотрудника и передать часть его функций агентам.
Пару слов о нашем веб-сервисе
Для того чтобы предоставить нашим пользователям конечный продукт, было принято решение обернуть агентов LLM в полноценный веб-сервис, который будет удобно использовать для решения рабочих задач. В настоящий момент Цифработ развивается по модели SaaS.
В основу заложена масштабируемость, поэтому веб-сервис представляет из себя связку Web API и клиентское веб-приложение на React. В будущем это позволит при необходимости реализовать дополнительные нативные клиенты (Android, iOS, Desktop).
Поскольку взаимодействие с агентами осуществляется посредством обыкновенного диалога, мы написали внутренний мессенджер, в котором есть чаты на несколько участников. Сейчас это пользователь и агент, но позднее мы сможем реализовать возможность общения нескольких пользователей и ботов в одном или нескольких групповых чатах. При этом агенты технически представляют из себя обычные чат-боты, как это сделано, например, в Telegram.
Также коротко опишем архитектурные решения, уже реализованные, а также находящиеся в стадии проектирования и разработки. Здесь мы не будем вдаваться в детали реализации или применения в работе выбранных нами решений, а лишь опишем, для каких целей и почему был выбран конкретный инструмент.
Прежде всего перед нами стояла задача создать масштабируемый и модульный сервис, чтобы одновременно быть готовыми к постепенному (а если все сложится хорошо, то и к взрывному) росту пользователей, а также обеспечить его бесперебойную работу в случае непредвиденных сбоев. Архитектуру сервиса нельзя назвать хоть сколько-нибудь уникальной или революционной, но этого и не нужно — самым главным требованием является способность стабильно выполнять поставленные перед ней задачи.
По большей части вся работа по проектированию сводится к выбору протокола взаимодействия между LLM и бэкендом веб-приложения. В данных условиях становится очевидным, что модель и бэк для сайта должны быть независимыми сущностями и в идеале совершенно не знать о существовании друг друга. Действительно, ведь один и тот же сервер может в будущем обращаться к разным моделям в зависимости от пользовательских настроек, а модель может быть использована для обработки данных от разных серверов.
Кроме того, создание регламентированного протокола обмена информацией между отдельными частями системы позволяет легко добавить в неё новые элементы: например, клиентскую часть мобильного приложения, бота в Telegram — в общем всё, что душе угодно. Это открывает широкий простор для масштабирования и с точки зрения ресурсов, требуемых для работы сервиса, и с точки зрения платформ, через который сервис можно предоставлять.
Логичным образом возникает вопрос: каким образом передавать сообщения между двумя компонентами приложения так, чтобы не терять сообщения (или свести потери к минимуму) при сохранении возможности легко масштабировать систему? Ответ мало кого сможет удивить, ведь напрашивается он сам собой: Apache Kafka. Кроме того, приятной опцией было бы иметь возможность обрабатывать сообщения на нескольких различных потребителях одновременно.
Данный брокер сообщений идеально подходит для потоковой обработки данных в системах, где требуется масштабируемость, а персистентность хранения данных позволит сохранить важную информацию в случае системных сбоев.
Помимо непосредственно ML-модели, брокер сообщений может пригодиться и для некоторых других служб: для сбора метрик по использованию сервиса и их визуализации через Grafana, а также для вычитки и перемещения данных в аналитическую СУБД для дальнейшего анализа (например, ClickHouse).
Таким образом, последним звеном в текущем виденье системы является настройка ETL-пайплайна из базы данных, которой пользуется серверная часть приложения, в аналитическую.
Использование двух различных баз данных в нашем сервисе не выглядит излишним, поскольку “разгрузка” OLTP-решения от аналитических запросов может позволить сильно выиграть в производительности и стоимости серверного оборудования: специально предназначенные для аналитических запросов СУБД могут справляться с такой нагрузкой в десятки раз быстрее, чем стандартные PostgreSQL или MySQL. Надеемся, что с доставкой данных сможет справиться Apache Airflow – широко известный оркестратор задач, а к “тяжелым” CDC решениям, вроде Debezium или NiFi, прибегать не придется.
На этом обзор архитектуры приложения можно считать законченным. Разумеется, мы не претендуем на то, что предложенный вариант является идеальным, однако он хорош тем, что в применении описанных инструментов в команде имеется определенная экспертиза. Тем не менее, определенные детали реализации, как и итоговый технологический стек, могут измениться – проект еще находится в стадии разработки.
Какую ценность для бизнеса мы несем?
Не секрет, что компании постоянно ищут способы увеличить эффективность производства, сократить издержки и улучшить качество обслуживания клиентов. Зачастую горизонтальное расширение позволяет лишь отчасти решить данные задачи и представляет собой скорее временную меру до момента последующего расширения.
Агенты LLM позволяют пересмотреть подходы к решению задач и принять на себя бóльшую часть работы.
При попытке определить ключевые преимущества, которые получает бизнес-сегмент от внедрения агентов LLM в сравнении с классическим горизонтальным расширением, можно выделить ряд аспектов:
Уменьшение нагрузки на сотрудников
В целом, это позволяет не только снижать риски эмоционального выгорания, но и наладить адекватный work-life balance у работников. Помимо этого, делегирование скучной и неинтересной работы позволяет сокращать количество переключений внимания у сотрудников и оставлять их фокус на действительно важных аспектах работы. При этом скорость выполнения задач увеличивается многократно.
Персонализация
Зачастую, при коммуникации с клиентами сотрудники могут испытывать трудности с тем, чтобы подстроиться под манеру и тон общения клиента. Агенты же могут анализировать и быстро адаптироваться под собеседника, что в целом улучшает пользовательский опыт и позволяет быстро, а главное очень качественно выдавать более релевантные ответы.
Функциональность
Агенты могут самостоятельно выстраивать логическую цепочку действий и выполнять сложные задачи. Это означает, что мы можем подключать внешние сервисы (почта, мессенджеры, CRM-системы) или подгружать файлы для того, чтобы агенты могли использовать полученные данные для решения задачи. Помимо этого, безусловным преимуществом является то, что агенты доступны 24/7.
Дальнейшие развитие
Параллельно с подготовкой к пилотному запуску, мы активно работаем над расширением функциональности нашего продукта, включая интеграцию с дополнительными внешними сервисами и улучшением качества ответов. После запуска мы собираемся работать в контуре создания API, который позволит компаниям не только использовать уже готовые решения на разных LLM, но и разворачивать все вычисления модели и хранения ее результатов на своей стороне.
Спасибо за ваше внимание! ?
Следите за нашим проектом:
Наш блог: https://t.me/agents4ai
Наш сайт: https://agents4ai.com
Данная статья написана командой agents4ai.
В написании приняли участие:
Виталий Карташов
Даниил Тимофеев
Роберт Бакиев
Никита Янцев