Сейчас практически под любую задачу я первым делом собираю агента. Либо чтобы он помогал мне решать задачу, либо чтобы он был встроен в сам продукт. Из-за этого сместилась и моя работа. Сначала я собираю агента под задачу, а потом уже решаю задачу с его помощью.
В обоих моих пет-проектах за последнюю неделю, личном TG-канале (t.me/serezha_podumal) и личном сайте (slipchanskiy.ru), под капотом есть агенты. Они разные и служат разным целям, но собираю я их по одному принципу. Про него и расскажу.
Что за агенты
В канале агент помогает мне собирать инфоповоды и даёт обратную связь на мои посты. Посты он за меня не пишет, я пишу сам. Он делает грязную работу вокруг. Упаковывает источники в выжимку, складывает в бэклог. Что идёт в бэклог, выбираю я. Дальше я наговариваю мысли, агент даёт на них обратную связь, а пост в итоге пишу и публикую я. Плюс он делает выжимку, которая потом идёт на сайт.
На сайте агент, по сути, мой цифровой двойник. С ним можно пообщаться, он расскажет обо мне и ответит на вопросы. Тут агент торчит наружу и общается с людьми напрямую.
Из чего состоит агент
Когда собираешь агента, набор параметров, на которые ты влияешь, на самом деле небольшой. Вот из чего он складывается.
Модель. То, на чём агент работает. Языковая модель (LLM), синтез речи, модели для картинок и так далее. Внешние или локальные. Если задача сложнее, комплекснее, то добавляется роутинг, на разных этапах работы задачи уходят на разные модели в зависимости от сложности, чтобы токеномика сходилась.
Промпты. Инструкции в разных форматах. Где-то описанная персона, где-то скиллы, где-то команды. Разного уровня правила, чтобы агент работал так, как мне надо.
Знания. База, из которой агент берёт информацию. Это могут быть просто текстовые файлы (.md), либо векторная база, если данных очень много. У меня почти всегда .md. С ними агенту сейчас легко работать, и их легко обновлять.
Тулы. Коннекторы к внешним системам, от поиска до доступа к CRM. Что-то найти, что-то записать, что-то изучить. Например, у Алисы (агент, который помогает мне с постами) есть тулы «поиск» и «спарсить текст со страницы».
Результат. То, что агент выдаёт на выходе и куда этот выход идёт. Главный вопрос тут в том, кто конечный потребитель. Например, у Алисы это я. Она даёт сводку, я её смотрю и выбираю, что в работу. Значит, обратную связь на её работу даю я. Но есть и второй потребитель, люди, которые читают мои посты. По реакциям, комментам и репостам я вижу, какие посты заходят, а какие нет. Это тоже обратная связь, на основе которой мы с агентом правим правила, подбираем источники. А на сайте мой цифровой двойник напрямую «торчит» наружу, вся его работа происходит мимо меня, с ним общаются посетители сайта.
Агент не готов на релизе
Одна из проблем при разработке агентов в том, что мы сильно вкладываемся на старте. Продумываем промпты, базы знаний, тулы, роутинг моделей, вот это всё. И думаем, что на релизе разработка закончилась. А на релизе агент ещё сырой. Это прототип. Дальше его нужно докручивать по реальным данным, по тому, как он ведёт себя в работе. А для этого нужна обратная связь. Надо понимать, хорошо агент работает или не очень.
И тут отдельная сложность. Как вообще понять, что агент работает хорошо? Обычно меряют на глазок. Вроде отвечает на уровне человека, и ладно. Но это уже тема на отдельный разговор.
Я собираю с конца
Поэтому и собираю с конца. Начинаю я с последнего, с результата. Сразу думаю, что будет результатом, кто его потребляет, в каком формате и где он выводится.
И тут же, вторым шагом, петля обратной связи. Какие петли сюда можно встроить, как агент будет постоянно улучшаться и на основе какой обратной связи. Какую информацию, реакцию пользователя собирать, как и куда мне нужно сохранять, в какой момент. То есть механизм улучшения закладываю с самого начала.
Дальше идут знания. Раз мне нужен этот конкретный результат, то что агент должен знать, чтобы его создавать? Например, цифровой двойник на сайте должен знать обо мне все факты и у него должен быть мой tone-of-voice. И в этот же момент продумываю, какие места в знаниях будут правиться по обратной связи.
Параллельно идут промпты и скиллы. Кроме того, что агент делает и как себя ведёт, я сразу закладываю в них петли обратной связи. Как именно она собирается, как обрабатывается и как на её основе мы правим промпты и знания.
И только в самом конце берусь за тулы и выбор моделей под конкретных агентов.
В итоге, порядок получается обратный. От результата и петли обратной связи к модели, а не наоборот.
Петли обратной связи в жизни
В канале петля смотрит внутрь. Потребитель сводки это я. Я даю обратную связь в реальном времени на работу агента и на этом её улучшаю. Улучшаю за счёт правки промптов, правил работы и знаний. Например, «давай добавим вот этот источник, там хорошо пишут про прикладные инструменты» или «в начале разбора давай писать TL;DR».
Плюс вторая петля, от читателей уже готового поста. Через неделю после публикации я собираю статистику по посту, отдаю её агенту и мы вместе обсуждаем результаты. Например, по реакциям видно, какие темы лучше заходят, и мы правим под это те же самые промпты и знания агента.
На сайте же петля смотрит наружу. Мой цифровой двойник общается с людьми напрямую. Устроена петля обратной связи так. Если приходит вопрос, на который он не смог ответить, то это собирается в базу и раз в неделю мне прилетает сводка. Я изучаю, какие знания стоит добавить, чтобы в следующий раз он ответил. В итоге, агент сам мне говорит, чем его докормить, чтобы он стал лучше.
Если подытожить, то я сразу проектирую самоулучшающиеся системы, которые будут жить долго. Я понимаю, что агент — это не что-то статичное, а постоянно эволюционирующее, развивающееся. Как сотрудник, которого вы себе наняли в помощь. Вы же хотели бы, наверное, чтобы он становился лучше день ото дня?