Transcription
Друзья, всем привет. Сегодняшний материал называется "AI агенты и их архитектура. Langchain Versus LlamaIndex Versus Qdrant versus LlamaIndex". Друзья, сегодня будем говорить о том, как работают AI агенты. Посмотрим на их анатомию и посмотрим на основные фреймворки, с помощью которых можно создавать AI агентов.
Вообще, в первую очередь, хотелось бы описать, что такое AI агент, да, и для чего он нам нужен. Дело в том, что у нас есть нейросети. Нейросети — это, физически, это набор весов, то есть это файлы с определённым расширением. У разных фреймворков есть разные расширения. Разные компании могут использовать плюс кастомные расширения, но это всегда какой-то набор весов. Соответственно, этот набор весов создаётся в процессе тренинга. И этот набор весов запускается поверх скелета нейросети, когда уже она работает на inference.
Но, помимо того, что есть у нас непосредственно нейросеть, а, да, например, такая, ну, разные есть нейросети, LLM — это одна из разновидностей нейросетей, и это тоже вот набор весов. Плюс эти веса отфайтюнены через reinforcement learning with human feedback. Это объединение двух фундаментальных концепций sequence to sequence. К sequence to sequence искусственному интеллекту добавили reinforcement learning — другую очень мощную технику, но не э такую, какую вот использовал DeepMind, когда там AlphaGo сам учился выигрывать сам у себя, а feedback, то есть когда люди обучали нейросеть, как давать правильные ответы. Соответственно, у нас прибавился вот вот такой вот второй слой к нейросети. И после этого, а, GPT-3 модель заиграла новыми красками, и появился GPT-3.5.
Вот с этого момента началась революция нейросетей, э, трансформеров, точнее, больших языковых моделей. И это вот именно тот момент, когда вот соединились эти две вещи: э, гигантские трансформеры и reinforcement learning with human feedback. И получился GPT-3.5, получился ChatGPT, получилась вот эта революция в технологиях, которую кто-то сравнивает с появлением интернета, кто-то сравнивает с появлением электричества. И поверх этого аэ у нас появились AI агенты.
Что это за AI агенты? Дело в том, что если мы используем просто как обычные пользователи такие вещи, как ChatGPT, Claude, PSK, то мы, как правило, туда ходим за знаниями. Ну, чаще всего, да, для наших бытовых нужд. То есть мы заменяем ими Google. Ну, кто-то, может быть, для программирования использует, ищет ответы или генерирует код. Но в первую очередь нужно помнить, и они, кстати, ещё называются, помимо того, что LLM — Large Language Models, они ещё называются Generative Models. Сюда ещё можно привести диффузионные модели, которые очень качественно генерируют изображения и, ну, наподобие там Midjourney или вот от OpenAI есть также нейросеть или там Leonardo AI, то есть их много этих диффузионных моделей.
И помимо того, что вот там, скажем так, модели наподобие ChatGPT — это LLM, это Generative, это трансформеры, это нейросети, это Machine Learning, всё это вот всё это ChatGPT — это разновидность всего этого, и большие модели — это всё разновидность всего этого, но ещё это очень мощные аналитические инструменты, которые позволяют анализировать текст. Друзья, всё вокруг нас пронизано текстом. То есть любая, ну, наверное, ну, не любая, но большинство компаний имеют какие-то текстовые данные, потому что, в принципе, мы, как люди, мы речью, можно так сказать, кодируем пространство вокруг нас и, а, передаём с помощью речи информацию об этом, да, об окружающем нас мире. Поэтому компании тоже этим занимаются. И получается так, что и работа людей часто связана именно с тем, чтобы работать с информацией. Ээ юрист, консультант, э даже врач, э да, особенно те, которые вот просто консультируют, а экономические аналитики — все они работают с определённой информацией и появляются идеи, чтобы эту информацию автоматизировать.
И в чём хороши LLM? Они хороши как раз в том, чтобы суммаризировать, конвертировать. То есть, когда мы уже работаем с LLM через API, когда мы с ними работаем уже напрямую, когда мы, э, фактически сами получаем доступ к нейросети, то мы можем с вами выстраивать свои аналогичные чатботы, но можем выстраивать нечто большее. Мы можем выстраивать и агентов.
Что это значит? Дело в том, что после того, как появились, появился вообще ChatGPT, ну, может быть, какие-то идеи уже на тот момент блуждали на эту тему, но стали расти как грибы после дождя различные фреймворки для создания агентов. И в чём главная идея агента? Это как раз вот то, о чём я говорю. Если вы профессионально используете промт-инженеринг, нейросети, а не просто как пользователи заместо Google что-то там узнаёте, то вы пользуетесь аналитикой, вы пользуетесь возможностью автоматизации у этих, э, у этих инструментов. И по существу, э, вот любая работа, если вы призадумаетесь, например, там работа юриста или работа какого-то консультанта, оно сводится так или иначе: проанализировать что-то, принять какое-то решение. И, в принципе, анализ этот идёт на уровне всё равно текстов. Ну и, соответственно, она может проанализировать текст, и она может принять какое-то решение, но это мозг, как сказать, без рук, без ног. И то есть это такое, как сказать, э своеобразное такое искусственное искусственное сознание, которое не может применять действия.
Соответственно, появились пейперы в своё время, которые как раз показывали, как вот на уровне промт-инженеринга организовать, а, не просто вот какие-то выводы, а разбивать любую задачу на подзадачи. И сама себе, э, там, скажем так, разбивает задачи на подзадачи, запрос на подзапросы и постепенно, по порядочку решает определённую задачу в попытке достичь цель. То есть, к примеру, она составляет себе план. То есть вы, например, просите: "Найди в интернете мне там то-то и то-то". Вот она начинает искать, а, то есть она разбивает это на подзадачи. Сначала поискать там-то, потом поискать там-то, то есть поискать в интернете, поискать в библиотеке, поискать ещё где-то на каком-то сайте, поискать на форумах, а промежуточные запросы, она складывает результаты. То есть, вы понимаете, это всё sequence to sequence, это всё текст. Ну и в конечном итоге выдаётся какой-то результат. То есть, когда мы LLM даём какую-то цель, goal, да, то и обучаем её, как вот делать, ну, скажем так, research, да, к примеру какой-то или просто какие-то действия выполнять. Это может быть какие-то кодовые задачи. Она будет это итерироваться за нас, пока не дойдёт до цели. И здесь вот как раз и появляется вот эта автоматизация интеллектуального труда.
То есть, а, и отсюда мы понимаем, что такое у нас AI агент. То есть вообще слово "агент" вот с английского языка, да, переводится как кто-то, кто ведёт дела за тебя. То есть это вот такие двое из ларца, которые одинаковы с лица и которые ээ вот пирожки, если что, за тебя есть будут. Поэтому, когда вот мы говорим об AI, точнее, когда вот речь заходит об AI агентах, о следующих моделях искусственного интеллекта, то, э, э, часто всплывает вот роль, э, того, что будут какие-то профессии упразднены или какой-то труд будет упразднён в связи с тем, что вот AI агенты возьмут эту роль. Вот именно поэтому, да, потому что вот этот loop, о которой я вам сказал, ээ, как сказать, он здесь и позволяет в конечном итоге автоматизировать работу до определённого доде до выполнения определённой цели. То есть вы можете думать об этом, если вы знакомы там с JavaScript, с синхронным программированием. То есть как вот есть просто какие-то задачки, да, а есть вот event loop, который позволяет вот эти задачи выполнять. Но только если у event loop там в JavaScript, э, или там в Go там нету или там планировщика там goroutine нету вот какого-то конкретного задача, он просто распределяет между ними время, то здесь есть определённые задачи и здесь есть разбивка первоначальная на а э- на подзадачи.
Соответственно, это достигается за счёт промт-инженеринга. И плюс здесь очень важная роль играет в классиче, ну, фреймворки, сделанные на классическом программировании, которые дают тулы. Тулы — это фундаментальная вещь для агентов, поскольку это вот их руки, ноги. То есть дело в том, что когда создаётся агент, его главное, ну, его главная миссия — это выполнять какую-то роль и принимать решение, а какими тулами использоваться, чтобы использовать, чтобы продвигаться. То есть, если мы даём ему, там, например, PDF reader, мы даём ему tool, там search engine, мы даём ему tool там, какая-то информация из, ну, к примеру, с форумов, то он решает, какими результатами воспользоваться. Он может поприоритизировать, какими тулами пользоваться. Он может попользоваться одним, потом другим и то есть это его задача. Или если это мы представляем себе, условно говоря, какой-то интернет вещей, то здесь уже там, допустим, человек говорит: "У меня грустное настроение". И агент смотрит, какие у него есть тулы, например, там музыка, там у него есть там закрыть ворота, у него есть там под там опустить жалюзи. Но понятно, что, э, для того, чтобы человеку, если говорит ему грустно, больше подойдёт тул по смыслу использования, как там музыку, да, включить, чем закрыть ворота или чем закрыть жалюзи, да, на окне. И вот это то, чего не хватало вот у первых, э, как сказать, умных колонок. То есть они были более вот буквально привязаны к команде. Эти вещи понимают смысл.
Вообще, в принципе, м вот само по себе появление нейросетей и появление, а, вот, в частности, роль LLM и вот сейчас и всё больше, да, роль AI агентов. Вот вы понимаете, мне вот пришла в голову такая аналогия. Вот знаете, есть такой хардскилы и софтскилы. Хардскилы — это вот то, что ты умеешь с точки зрения технической, то есть твои навыки, например, программирования или твои навыки DevOps или твои навыки тестирования. А вот софтскилы — это как ты умеешь общаться с людьми, как ты умеешь там строить свой рабочий день там и прочее. Вот. А, но есть вот, знаете, ээ вот есть софтвер, да, оно гибкое, да, то есть оно может меняться, а железо вот оно не меняющееся. А вот всё, что связано с нейросетями, ввиду того, что это недетерминированные вещи, а это пробалистические модели и LLM тоже это пробалистические модели, э, это ещё больший софт и это ещё большая такая мягкость, да? То есть обычный софт классический, он хард софт по отношению вот к такому LLM-ному софту. То есть или, как вот, знаете, другая аналогия, вот в любом механизме есть какие-то резиновые прокладки или вот какие-то такие синтетические, которые смягчают вот действие железа. Вот софт классический — это вот такое железо, но нужны более мягкие прокладки. То есть, что здесь имеется в виду? Это речь идёт о том, что, например, когда пользователь даёт какие-то инструкции, нужно уметь понимать смысл, да, пусть то есть не вот так топорно, железно, да, там какие-то ключевые слова искать, а именно понимать смысл. И вот эта вот мягкость должна быть, да, и вот нейросети это дают. Или, например, детекция каких-то объектов. То есть ну ты не можешь на if-ах там по какой-то геометрии объектов записать, что кошка, что собака, что ящерица, что там гараж, что там самолёт и так далее. Соответственно, вот нужна мягкая вот эта прослойка в виде нейронной сети, которая, а, пусть она работает недодетерминированно, но зато она может примерно понимать, вот что это вот агенты — это тоже накладывание на классическую такую хард-софтверную инфраструктуру более мягких вещей.
Ну, как это может выглядеть, да? То есть, если вы там банальный пример, если вы делаете автоматизацию какого-то колл-центра, человек вам отвечает на какие-то вопросы, если вы замените просто на обычный бот, который просто по ключевым словам что-то будет делать, это будет хард. То есть это будет жёсткая связка с какими-то словами. А здесь хорошо могут понимать намерения. То есть, повторюсь, сила моделей не в том, что они знают, хотя и в этом тоже, в их знаниях, в том, что у них много знаний в весах зашито, да. Но главное — это то, что они могут анализировать. И по иронии судьбы, да, чем больше модель знает, тем больше она выучивается логическим, сумаризационным пониманию намерений. То есть вы же можете сказать, ну там дать, например, отзыв какой-нибудь с любого магазина и спросить, это вот, э, человек хороший или у них плохой отзыв оставил, у него положительные или отрицательные? Вот точно так же и с тулами, то есть определяется намерение и весь смысл, ну, точнее, не весь смысл, а значительная часть смысла и агента — это выбрать между тулами. А тулы делаются на классическом программировании.
Поэтому как итог у нас есть нейросети. Они могут у вас быть локальными, например, какие-нибудь варианты Llama. У вас могут быть удалённые нейросети. Какие у них расширения, мы с вами не знаем, потому что это коммерческая тайна компаний OpenAI, Anthropic и других, да, но эти, но главное, что это какие-то веса, да, в каком уже это формате это хранится, это неважно. Вот это нейросеть, да, к примеру, да. Ну вот если, например, PyTorch, вот классический такой формат, но нужно понимать, что, как я вам сказал, вот эта нейросеть без ещё кучи слоёв она, а, вот роль её агентов не может выполнять.
Соответственно, у нас для того, чтобы создавать AI агентов, я вам сказал, нужен каркас из хард-софтвера, да? То есть это как раз на себя берут такие вещи, как Langchain, LangGraph, Qdrant, Llama Index там. В чём отличие? Сейчас мы между ними поговорим. То есть они создают вот этот каркас, особенно Langchain, он появился один из первых, и он как раз и даёт вот эти вот многочисленные тулы. А, и в частности он даёт драйверы там для того, чтобы там с разными видами файлов связываться и прочее. Потому что это тоже очень такая распространённая задача, да, забирать что-то из файлов, да, потому что, как я вам сказал, если мы берём вот этот гипотетический пример, когда у нас есть какой-то колл-центр, да, то есть понимаются намерения, и уже из понимания намерения человека, из базы знаний колл-центра выдаётся более релевантная информация. А потому что человек говорит: "У меня всё плохо вот с тем-то, тем-то, да". То есть по ключевым словам сложности, но когда по смыслу, да, и понимает хорошо смысл, особенно если там какой-то есть контекст, то будет более релевантная информация выдана.
Но а вот помимо того, что я сказал, здесь ещё должен быть один свитч, один рецепт в этой архитектуре, точнее элемент рецепта — это векторные базы данных. Я не знаю, может быть, кто-то из вас что-то о них уже слышал. Их много разных векторных баз. Между ними тоже нужно уметь выбирать. Но и вот Langchain, в частности, там из коробки даёт много драйверов к разным векторным базам. Что это такое? Дело в том, что у нас мы можем там к AI агентам подкручивать там специфическими образами там и Pandas, и SQL, и Mongo, и PostgreSQL. Но смысл такой, что это для, ну, всё-таки специфических пайплайнов. По умолчанию, для того, чтобы оперативно работать с какой-то информацией, с того, чтобы было memory у агентов, нуж нужны векторные базы данных.
Чем они отличаются? Это как раз, э, нужно почитать работу, э, Portuvec, то есть, э, трансформеры сами по себе они используют эмбеддинги. Эмбеддинги превращают у нас числа, точнее слова в числа. Соответственно, у нас два похожих слова, однокоренных, они будут иметь в матрице чисел примерно одинаковое пространство. И по сути это векторные базы, это и есть, ну, скажем, тексты, информация представлены в виде вот таких векторов. То есть это родной формат для нейросетей. там ему удобно хранить данные. Соответственно, если у вас есть там, к примеру, там "Война и мир" Толстого зашита в векторную базу данных, если вы, ну, сделаете какой-то query по этой базе данных, то, э, примерно по смыслу что-то найдётся, да? То есть, но здесь опять это софт, софт, software. Назовите это так. То есть он будет искать какие-то, понимать общий вайб того, что вы говорите. То есть вы хотите найти самые грустные моменты. Вот вы можете PostgreSQL написать: "Найди самые грустные данные в таблице, найди самые грустные данные в документе в MongoDB, найди самые грустные там value в Redis". Нет, такого мы себе не можем представить. А вот в векторной базе данных, векторная база — это поэт, там это можно делать, соответственно, он будет выдавать тексты грустные. Соответственно, для организации Memory, вот для AI агентов очень хорошо подходят именно векторные базы данных. Повторюсь, это для них родной формат. Они разные бывают там по скорости, по качеству там. Поэтому сейчас мы не будем вдаваться в подробности, как они отличаются. Вот. Но, мм, важно понимать, что векторные базы — это ещё одна надстройка над классическим софтом, потому что PostgreSQL, Mongo, Redis, они никуда не уходят, поскольку, э, повторюсь, э векторные базы, да, это, э, такие поэты, они ищут вот так творчески, да, но зато понимают по смыслу, могут добраться туда, куда обычный SQL запрос не доберётся. Но когда нам нужно уже брать какие-то конкретные данные, да, то есть когда нам нужен конкретно по такому-то заказу, по такому-то пользователю, по такому-то ID, здесь уже SQL, там Mongo расцветают, да, поскольку они точно ищут. Поэтому здесь идёт там комбинация, да? То есть, условно говоря, если мы опять фантазируем на тему колл-центра с автоматизированной, э, там, допустим, поддержкой пользователей, то у нас, э, такие векторные базы и агенты, они помогают понять, что хочет пользователь. А когда уже там пользователь называет конкретный заказ, его ID, нам уже точные конкретные нужно вытащить информацию по его, то мы уже смешиваем работу векторных баз и классических баз данных.
Поэтому память в любом случае агентам нужна, и ему её неудобно хранить вот в таких вещах, да, потому что он должен понимать, что он уже пробовал, какие у него были ошибки и так далее. Хотя опять, если мы возьмём там просто хранение чата истории с пользователем, да, потому что, в общем-то, любой чат, да, когда мы ChatGPT накидываем всё новые и новые сообщения, понятно, что нейросеть никакой памяти не имеет, потому что нейросеть, я вам сказал, это вот набор весов, но входной у неё слой настолько большой. Почему LLM хвастаются большим входным слоем? Потому что контекста больше. Соответственно, ты можешь там 100 сообщений, да, по каждому вот вагончику всё длиннее и длиннее каждое новое сообщение в чате. И, соответственно, входной слой всё больше и больше. Вот. Соответственно, поэтому он помнит твоё имя, которое было в начале. Не потому, что он его реально помнит, а потому, что ему подаётся на вход сначала одно сообщение, потом два, потом все 100 сообщений. И там где-то в первом было указано в вы входном слое, в принципе, вот в начале указано твоё имя. Выйдешь за пределы входного слоя, всё, он забудет твоё имя. Там уже на 101 сообщении, если у него ёмкость там, условно говоря, а, 100 сообщений. Но такие вещи, да, они могут уже там организовываться и там, э, каким-нибудь простым листом, да, в Python они могут организовываться классической базой данных, а векторной базы данных — это немного другая вещь. Это вот то, о чём я чуть сказал. А, ранее будем считать, что вот такой вот AI Agent Introduction сделан. Чуть-чуть ещё поговорим просто про пример AI agent application.
Ну, а например, если мы будем говорить, и агенты могут быть какие угодно, делать всё, что угодно, любая интеллектуальная работа, которая вам приходит в голову. Главное, чтобы были тулы, да, и главное, чтобы были промты. Давайте ещё раз. Главное, чтобы были промты и главные тулы. Звучит немного даже, да, как такой слоган. Вот. А, но ещё нужны нам векторные базы данных. И скелет, да, нам нужен для организации вот этого loop, да. Поэтому здесь вот эта формула, она не такая простая. Вот. Но для первичного понимания вот этого будет достаточно.
Ну, соответственно, если нам нужно сделать, например, research agent, например, самый простой, то есть мы должны ему дать тулы. Тулы — это классический наш код. И если вы посмотрите, там OpenAI, у него есть какие-то тулы. То есть это уже агентная система. То есть на официальном сайте OpenAI или там на официальном сайте там Anthropic. То есть вы никогда не замечали, там ты даёшь какой-нибудь математический экспрешн, но это же нейросеть не из своих весов там достаёт, сколько будет умножить там 3.846 на 5.948. Нет, она просто вызывает тул. Она понимает, что это математическая операция, вызывает JavaScript код, который просто считает эти все вещи. То есть тулы у него есть, про это всё можно почитать вот у, ну, на сайте Anthropic.
Соответственно, здесь нашему research agent-у нужно тоже дать тулы. Какие-то мы сами можем писать, какие-то брать готовые. То есть у него будет tools: search academic paper, read pdf text, summarize text и save citation. Четыре тула у research agent-а. То есть это то, между чем он должен выбирать. И в своём loop, когда он доходит до выполнения своего goal, своей задачи, он должен будет их выбирать и и думать, как их использовать. Я сейчас не буду там говорить про техники, как какой лучше тул первым указывать, какой вторым, потому что там тоже есть свои нюансы из-за пробалистической вероятности, из-за гасящихся нейросигналов. Но смысл такой, что вот у нас пусть есть четыре тула. И, соответственно, под капотом каждого этого тула классический код. То есть, например, там, а, Google там может возвращать или там API Duck, DuckGo может нам возвращать, э, какое-то там количество сайтов, да, то есть поисковую выдачу. У нас может быть read PDF text, у нас может быть какой-то PDF-конвертер, да, то есть который из, как сказать, PDF нам просто отдаёт текст. Это вот как раз чем силён Langchain. То есть они держат нос по ветру. Они с почти с очень ранних времён появления ChatGPT вот кучу-кучу вот таких драйверов под разные форматы понаделали, потому что понятно, что с разных форматов будет течь данные мозги, то есть в нейросети, в агентов и как итог через агентов в нейросети, да. Неважно, там они локальные у вас развёрнуты или они у вас там где-то на remote находятся.
Соответственно, это всё классические вещи, там классический код. Summarize — это такой tool. Здесь уже, ну, может тоже классическое программирование использовать, но вообще сама по себе операция Summarize — это она как раз для LLM. Хорошо покода. Save citation может быть save document, там всё что угодно, да? То есть например вот когда вам этот Claude делает вам артефакт, да? То есть это же тоже какой-то LLM используется. Это же LLM он никак не может, он использует тул создать там, ну вот вам какой-то документ, MDM документ или там TXT документ. То есть, а он-то может создать MD-разметку, но он MD-документ не может создать, который вы потом скачаете. Вот поэтому вот такие вот тулы есть.
Дальше вы прописываете конституцию. Здесь уже вступают в роль промты системные. То есть нужно обязательно понимать промт-инженеринг, поскольку скелет вам даётся. Классическое программирование — это хорошо, оно вам помогает, но вот в такие капсулы, из которых являются AI агенты, вы должны зашивать какую-то конституцию его поведения и те или иные техники использовать. Скорее всего, это будет какая-то смесь техник. Ну, например, system а системная техника создания системных промтов. Вот, может быть, там strict rules, может быть там strict output, может быть там few-shot learning, всё что угодно, да, вот в зависимости от типа агента. Ну и, соответственно, вот здесь вот описывается здесь поведение этого агента, его, а, как сказать, его, ну, можно так сказать, жизненный цикл этого агента. То есть он должен вызывать по смыслу определённые, как это правильно сказать, а-а, тулы и их использовать до тех пор, пока вот он не дойдёт до цели. И в принципе агенты могут быть, можно вот сделать один такой агент, может быть агенты разные, в принципе, мно, ну, как правило, всё-таки, если у вас будет много тулов у одного агента, то это будет не очень хорошо, потому что ему труднее будет между ними, а, выбирать. Поэтому, скорее всего, нужно какую-то специализацию давать. То есть, если research agent — это одно, может быть, вы потом research agent-а разобьёте ещё на каких-то под-агентов, и у него будут какие-то под-тулы. Ну, а, соответственно, если у вас там агент это будет, допустим, программист, то у него должны будут свои быть тулы. Если, допустим, вы делаете двух агентов. Ансамбль research agent и, например, программистат, да? То есть у вас программиста agent-а будут открыть файл, закрыть файл, запустить тесты, запустить какой-нибудь там дебаггинг, такие тулы. То есть как работает там курсор, да? Ну, мы не знаем, как он работает, но мы можем догадываться, да, что, как сказать, какой-то текущий контекст передаётся вот в такой loop. И, соответственно, возможно вот то, о чём я вам сказал, то есть какие-нибудь div тулы, open файл, grep какую-нибудь подстроку и так далее. То есть всё это тулы.
Соответственно, мы можем находить какие-нибудь свежие пейперы и сразу, а другому агенту мы можем передавать эстафетную палочку. Он будет накидывать план, как имплементировать эту научную работу. потом будет имплементировать её, потом делать дебаггинг и говорить,
Вообще, это работает или не работает? А дальше у нас ещё какой-нибудь лабораторный агент, который будет вот этот код непосредственно запускать на наших каких-то, ну, как на наших каких-то данных, да, экспериментальных. Вот, точнее, будет делать эксперименты на каких-то данных. То есть, по сути, мы можем сделать трёх агентов, которые нам, а, автоматизируют доставку из научной среды. Во-первых, нахождение в научной среде определённых работ по определённой теме. Мы же можем специфицировать, какие работы, потом имплементацию их, а потом ещё и запуск этих, э, как сказать, имплементаций на наших там данных, чтобы понять вот, э, эти там, ну, как сказать, э, там, допустим, научные работы и имплементации на основе них, например, там натренированные нейронные сети на основе них, могут ли они вот помочь нам вот э, допустим, предсказания на основе наших там данных делать, да?
То есть это, безусловно, такая глобальная фантазия, да, но тем не менее это вот то направление мысли, в котором движутся вот эти AI агенты. Конечно, такую систему её реализовать сложно, но смысл такой и идёт вот именно к вот этому. То есть система, да, то есть просто автоматизация различного интеллектуального труда, а который, э, ну, вот, скажем так, научных работ очень много, их трудно все анализировать. Вот как раз, чтобы упростить задачу анализа таких работ, упростить там имплементацию этих, упростить потом, э, как сказать, запуск на итоговых данных, да, вот этих работ. Вот здесь, конечно, куча рутины. Вот такие AI агенты, они могут на себя брать.
Ну, в принципе, если посмотреть по коду, я максимально простой накидал, и я агент здесь с моковыми данными, да, потому что, чтобы ни по каким API не ходить, я здесь даже не использую ни Langchain, ни LlamaIndex, никакие другие тулы. Я не знаю, если вам, я не знаю, имеет смысл мне на мой GitHub выложить это или нет. Вот напишите в комментариях, если вам вас это заинтересует. Смысл такой, что здесь есть тулы, да? Здесь есть моковые данные, которые якобы находят ну вот, скажем так, tool search, да? То есть я не буду там API никакой запускать, да, чтобы search был. Я не буду никакой API запускать, чтобы реально проанализировать то, что этот search вернул, да, это просто всё моковые данные. Read PDF text, summarize text, да, то есть save citation. То есть, в принципе, смысл такой: ходит агент, ищет новые какие-то работы и их просто цитирует. То есть гол у него такой достаточно широкий и такой итеративный. То есть не какая-то одна цель, а такая повторяющаяся цель. Вот вообще не пользуюсь ничем здесь. Фактически одна стандартная библиотека Python, да? Одна стандартная библиотека Python. То есть выше - это тулы и моковые данные. Сам research агент у нас реализован вот здесь. Я опять в подробности в код не иду. Если нужно будет, я его опубликую. Но смысл здесь не в этом. Я просто хочу примерно вам показать, как это, как это всё может, э, работать.
Дальше, если я запущу сейчас, то будет стартует research агент, который будет вот претендовать на то, что вот он запустил какой-то Search Academic, потом запустил Read PDF text. То есть он, во-первых, сначала ему там, допустим, Google или DuckDuckGo по API или там ArXiv, там наверняка своё API есть, да? Вернул свои работы. Ты дальше через Read PDF ты просто читаешь то, что ты не можешь отправить, да, нейросети на вход PDF, да? То есть это превращается в текст. Самаризация текста. Здесь уже расцветает LLM. Дальше сохраняются цитаты главные. Ну и у нас по итогу получается research summary, то есть проанализировано было девять работ. Главный вывод из каждой работы сохранён, да? Вот здесь вот работы на тему трансформеров искались, друзья. Но это, вот, повторюсь вам, предельно простая такая имплементация, вообще наивная, не пользуюсь ничем, но по сути для этого вам нужно, что вам нужен для этого будет, скорее всего, там в зависимости от типа задачи вам будет четыре вот из этих вещей нужных. Langchain, LlamaIndex, LangGraph, Qwen. Мы сейчас про них чуть позже поговорим. Вот. AutoGen, BabyAGI и AutoGPT. Если хотите, можете почитать. Вот про то, что это такое вообще. Это первые такие проблески вот именно создания агентов. То есть это первые такие фреймворки, которые стали создавать лупы. Там стал ChatGPT сам себе на вход что-то подавать благодаря этому. То есть какая-то приоритизация целей. То есть смысл такой, что это не просто вот э какой-то ответ-вопрос, это именно какая-то цель. И нейросеть создаёт все подзадачи и к ним постепенно идёт. Вот это и есть вот эти вот фреймворки одни из первых.
Вообще, в принципе, они у меня скачаны все фреймворки. Если мы зайдём, например, вот в AutoGen, это то, что ещё в своё время Microsoft делал, по-моему, он даже появился ещё до, а, он появился ещё даже до ChatGPT, то есть, я не знаю, наверное, каких-то других трансформерах они это всё тестировали. Вообще я посмотрел код Facade, своей утилитой, прошёлся по ним и, в принципе, там пишется в основном, ну, в основном это Python код. Вот. И, э-э, ну, все работы достаточно свежие, да. Вот AutoGen - это только вот 2020 года, да, у нас вот ChatGPT появился в конце 2022, в начале 2022 там был, э, ну, скажем так, а данстем чату GPT, а когда они сделали вот эту красивую, то есть GPT 3.5 превратился вот в эту оболочку ChatGPT, ну, тогда вот и появилось вот это легендарное приложение. Если мы зайдём там BabyAGI, сейчас, в принципе, проект этот тоже существует. Сейчас фасадом посмотрим, что там внутри, и код Facade соберём данные. Да, в принципе, видите, один вот этот Юки Накаджима, да, я не знаю, как точно он произносится с японского. Вот он, в принципе, один из первых и начал развивать идеи AI агентов. Да, может быть, кто скажет там ещё по карте ещё в пятидесятых годах в MIT там, э, когда Лиc придумывал, придумывал ещё искусственный интеллект, может быть, но вот именно в современном таком виде AI агент это вот скорее, да, вот эти люди и вот эти проекты, то есть которые я назвал, то есть BabyAGI, AutoGen, AutoGPT, да. Ну, и потом, конечно, пришёл, наверное, самый популярный фреймворк, а, Langchain, да. Ну и Python, да, конечно, здесь тоже он повсюду появляется у нас, да, то есть, ну, я вам так скажу, все эти фреймворки, они сделаны, э, с использованием Python. Ну и, соответственно, а по дефолту они дают Pythonский Langchain. Вот он у нас кодовые исходники у нас Langchain'а здесь, да, это, ну, плюс ещё они всякие примеры, как с этим работать на Jupyter Notebook, да, поэтому CodeFacade детектирует кодовую базу Jupyter. Ну, а дальше это Python. И, судя по всему, lockfiles, да, это вот они ещё Poetry пользуются, да, то, что пришло у нас в смену pip, то есть Poetry фиксирует, какие dependency используются в проекте, и поэтому используют lockfiles. И вот поэтому очень много dependency здесь фиксируется, да, и обнаруживается. Harrison Chase. Вот здесь как топ-контрибьютор CodeFacade демонстрирует. Harrison Chase - это как раз и есть тот человек, который и создал Langchain, хотя некий Богатур уже, видите, по коммитам его обогнал. Ну, я не знаю, кто такой.
Дальше LlamaIndex. LlamaIndex вообще такой проект, наверное, самый, э, такой яркий именно в плане создания агентов, да? То есть сейчас мы попозже поговорим, в чём разница. Но, в принципе, если мы посмотрим контрибьюторов, э-э, то, э, у них много общих корней, ну, у них общие корни у Langchain'а и LlamaIndex'а, да? Вот здесь есть ряд, а, контрибьюторов, которые, ну, по сути, и там, и там поработали, да, это и Harrison Chase сам по себе, и были ещё какие-то вот, которые, ну, по-моему, я так человек пять насчитал, которые, в принципе, одни и те же люди вот для LlamaIndex'а и Langchain'а. Вот этот человек, по-моему, тоже там и там коммитит. А, ну и можем ещё посмотреть, что у нас там ещё осталось. Более такая модная тема - это Qwen, да, это посмотрим тоже его исходники, но там тоже, в принципе, это Pythonская вещь. Это самый такой молодой фреймворк, да, он появился только в октябре 2023 года. А, ну и, соответственно, здесь ещё не так много кода, да, ещё только 64.000 строчек кода на Python, да, не так много коммитов. Вот. Ну и знаменитый, э, LlamaIndex. Давайте глянем тоже на его исходники. CodeFacade. Ну и здесь, э, тоже они и используют. И, а, Python, Jupyter Notebook, то есть это то, что из чего склеен, да, этот, э, этот проект. Ну, это вот что касается кодовой базы. Из чего. Ну, и соответственно, а, они по умолчанию все эти инструменты также, ну, если вы хотите писать код на одном из этих фреймворков, то вы пишете на Python. Вот. Я не знаю, там в каком состоянии там сейчас находится AutoGen, BabyAGI, AutoGPT. В принципе, они все существуют. Вот если мы посмотрим там, да, на последние коммиты, да, вот август двадцать седьмого, да, то есть очень свежие коммиты. Это что касается там LlamaIndex'а, да. Ну вот, допустим, с точки зрения Qwen, когда у нас по тоже 27 августа последней, то есть это очень активно над ними идёт работа, кодовая база очень быстро расширяется, там надо следить за документацией. Langchain с момента появления, то есть очень сильно постоянно расширял, расширял ну, соответственно, опять же, LlamaIndex тоже сегодня были какие-то коммиты. Вот, э, то есть постоянно над этими вещами идёт э работа, да, работа. Хотя, видите, BabyAGI, да, только в ноябре 2024 года последний был коммит. Может быть, он чуть-чуть подзаброшен, да, но там, если один человек над ним работает, то может быть не так активно идёт роль. Ну, в принципе, эти фреймворки, они отработали AutoGen. Ну, вот AutoGen тоже, в принципе, над ним продолжается работать. Может быть, какие-то Microsoftские внутренние research продолжают на нём идти. Вот, в принципе, большая часть из этих фреймворков, оно, как сказать, рабочее, но, наверное, вот четыре вот эти, которые подсвечивают сейчас, они, наверное, наиболее активно используются. Вот. Поэтому давайте поговорим уже про них.
Ну, Langchain у нас это первая такая была ласточка. Он фактически почти одновременно с ChatGPT появился. И по сути это не только для агентов, это и для создания, фактически для любого практического использования моделей. То есть, по сути, это для создания LLM-based приложений, а агенты были просто там добавлены как один из, ну, вот вариантов, как с этим работать. То есть когда вам предоставляется сырой API, вы спросите там нейросеть, кто ты? Да, если вы через сайт OpenAI спросите, она скажет: "Я ChatGPT, у меня каталог знаний такой-то". А если вы спросите просто сырой AI, он вам ничего не скажет, потому что это просто сырой AI. Там у OpenAI есть свой системный промпт. Можно предположить, что это гигантский системный промпт с кучей правил, с кучей там и вот как раз с описанием там поведения агентов, какой там тул выбирать, мы, конечно, точно не знаем. Коммерческая тайна, но мы можем предполагать то же самое Claude AI, да, то есть опять системный промпт, где, э, даётся информация о том, кто ты, а, как сказать, какой у тебя каталог знаний, то есть сам по себе нейросеть этого ничего не знает, то есть это уже изначальное программирование нейросети системным промптом. Хотите, как операционная система, да, вот так аналог можно провести. Соответственно, если вы напрямую даёте как сказать, напрямую работаете с API, то вы тоже должны создать такую операционную систему, создать системный промпт. То есть это будет для вашего чатбота, да, или для вашего агента. Соответственно, вы скажете: "Кто ты?" Вы скажете там, ну, если у вас там туристическая фирма, да, какая-то, то это будет какой-нибудь там Весёлый Тур GPT, да, будет, например, чатбот у него. Вы должны подключить уже сами память. Соответственно, нейросеть ничего не помнит. Каждый запрос новый, как первый раз она видит. Соответственно, подключение memory - это тоже вот то, что давал и даёт Langchain, да, в том или ином виде, да. Это может быть это просто dictionary, может быть просто, может быть там, я не знаю, векторная база уже для более серьёзных задач. Конечно, подгружение данных в а саму всемодель и создание так называемой RAG системы. То есть RAG - это подразумевается, что вы не используете, повторюсь, совсем нейросеть для знаний, да, а но тем не менее можете свои данные, знания из неё извлекать. Каким образом это происходит? То есть у нас классическое было ещё со времён там GPT третьего ещё вот этих, как их называют, [музыка] вот там были RNN модели и LLM модели или вот как они, забыл, а LSTM модели или как-то так. Вот эти модели, а, LSTM модели. Вот. А, то есть Sequence to sequence. А, и соответственно вот эти модели, они могли там дообучаться и вообще там как компьютерное зрение. Но дообучение это вот оттуда вот откуда-то из компьютерного зрения. В принципе, когда у вас гигантская там GPT модель, её дообучать, это очень тяжкое бремя. И в принципе, если вы хотите там, чтобы там модель знала там, допустим, ну, условно говоря, вы какую-то там модель там на триллион параметров будете потом дообучать на данных своей там турфирмы, во сколько там офисы закрываются, в каких городах они есть, то эти данные, скорее всего, растворятся. Но вы можете поступить пойти, индустрия пошла по пути RAG концепции, да? То есть, когда вы подгружаете данные вашей компании просто во входной слой нейросети и дальше, то есть это как будто как начало, да, промпта или общение с нейросеть, а дальше уже потом задаёте вопросы и нейросеть, то есть из вот её там, условно говоря, левой части входного слоя, там у неё данные, в правой части входного слоя у неё там, допустим, запросы пользователей, соответственно, на выходе она будет отдавать данные, а, э, которые вы дали на входной слой, потому что где-то в середине левая часть входного слоя и правая часть входного слоя, они соприкоснутся и, соответственно, нейросеть уже даст ответ, не? То есть, если вы спросите вот фирма "Весёлый туризм", до скольких офис работает? Скажет: "Не знаю я такой фирмы". Или там галлюцинация какая-то будет, а здесь уже она возьмёт вот из тех данных, которые были на входе. Это и есть RAG, да, концепция. Вы можете просто вот просто взять там "Войну и мир", да, и если у вас там входной там слой позволит, да, то подгрузить весь "Войну и мир" и задавать какие-то вопросы просто вот через обычный интерфейс OpenAI, Claude и так далее. Ну, там "Война и мир" может не поместиться, да, но если поменьше рассказ, то может поместиться. Вот это такая же система, только это всё проходит скорее через векторные базы данных или через другие технологии, поскольку, ну, вот это слишком расточительно будет сразу грузить всё, поэтому там это всё работает умнее. Но общий смысл RAG технологии - это вот именно такой. И это вот тоже то, что Langchain блестяще позволял сделать. Ну вот типичный системный промпт. Вот здесь вот можно посмотреть на экране. Я на нём подробно останавливаться не буду.
Дальше появился LlamaIndex. Вот этот LlamaIndex - это скорее вот как раз для м э- чисто для RAG, да, то есть э- не то, что каркас там и луп для агентов, а вот именно, потому что поначалу RAG шёл очень сильно в моду после появления Langchain'а, после того, как стали делать LLM-based, а, как сказать, applications. И вот это уже специализированная вещь на RAG. И, соответственно, здесь уже вы будете там прописывать промпт, что, как сказать, забудь свои знания. Вот используй знания, которые я тебе дам. Там использовать такой-то документ, placeholder для него подставляются данные и так далее. Вот это вот это LlamaIndex. LangGraph - это вот, э, если кто интересуется там агентами, это, наверное, такой самый яркий пример именно создания каркаса для агентов. То есть здесь мы уже можем и few-shot learning техники использовать, и strict output, всё, что угодно, да? То есть вот, к примеру, мы прописываем ему конкретные данные, конкретные задачи и вот ту гипотетическую концепцию, которую я вам сказал. Research, потом implementation, потом проверка на тестовых данных. Да, вот несколько я агентов, которые так будут работать или там наборы AI агентов, который подзадачи будет решать вот в каждой из этих трёх вещей. Вот как раз для LangGraph'а хорошая была бы задачка. Ну и Qwen, а, наверное, это ещё более новый такой игрок на этом поле. И он в принципе работает с, э-э, ну, вот, вот при, то есть он ещё более пытается упростить даже, чем LangGraph в создании агентов. И здесь, конечно, вы вот будете роль ему прописывать. То есть вы будете ему прописывать роль, что ты там lead financial analyst, ты там будешь такие-то там четвёртый квартал анализировать, такие-то выводы делать. То есть это больше такая role prompt engineering техника будет для Qwen.
И, друзья, это и есть то, как работает вот современная индустрия агентов. То есть постоянно появляются новые у нас нейросети, то есть усиливается, ну, можно так сказать, мозг, да, этих агентов, а постоянно появляются новые prompt техники для того, чтобы усилять агентов. Более того, я сейчас вам покажу, э, я сейчас вам покажу некоторые работы, которые как раз являются фундаментальными для организации вот этого лупа, да? То есть ты, э, обсервируешь, делаешь реакцию какую-то, собираешь выводы и движешься таким образом к голу, да? То есть были вот фундаментальная работа есть ReAct, Chain of Thought, Prompting. То есть это тоже вещи очень важные. Какие-то промпты и техники, они зашиваются внутрь этих. Какие-то промпты вы должны самостоятельно реализовывать, да? Ну, естественно, если вы создаёте кастомного там агента, то вы ему самостоятельно прописываете его э задачи. Ну и, соответственно, за счёт вот этого каркаса, да, там, например, LangGraph'а делаете для них синхронизацию работы.
Друзья, здесь, в принципе, для последующего чтения знакомства к теме я вот здесь предлагаю ознакомиться с одним из моих репозиториев. Это репозиторий называется Prompt Engineering Atlas. И в нём, вот вы помните, я там в предыдущих материалах, это была такая простой простой чит-шит такой, а сейчас я уже больше его дополнил тем, вот кто хочет освоить prompt engineering, либо для личного использования, либо тот, кто будет создавать AI агентов, потому что создавать AI агентов, да, нужно знать много чего. И я вам обозначил вектор того, что нужно создать, но и в любом случае prompt engineering нужно знать. Поэтому как итог, здесь LLMки собраны, которые вы можете тестировать. Есть агрегаторы, которые вы можете тоже тестировать. Промпты есть и IDE, то есть это уже фактически реализованные э для кодовых задач э каркасы с AI агентами. А, ну и prompt техники. То есть здесь все э различные prompt техники собраны. Все prompt техники здесь на одном и том же примере. То есть человек купил определённый э смартфон, э, за определённую сумму сделал свой отзыв и поставил определённое количество звёзд. То есть такая типичная вот такая, как я говорю, софтсофтовская э задача, да? То есть нужно просто сделать анализ. То есть много сыпется отзывов о товарах и нужно какую-то полезную из них информацию извлекать простым там, а-а, как сказать, ээ командой поисковых слов. Это, естественно, будет неэффективно, когда понимает смысл другой. То есть типичная задача. Мно вот на такой типичной задаче большинство техник здесь рассмотрено. То есть few-shot learning, да? То есть, например, смотрите, вы можете просто указать задачу, то есть дай мне name, price и rating из этого отзыва. А можете просто показать ревью одно и какой был итог. Можете второе ревью и какие данные были возвращены. И дальше, если вы запустите как сказать, уже вот это и есть short learning, то есть когда вы даже не объясняли задачу, а просто показали, как какая sequence следует после данного review, то есть то, что извлекаются а такие-то структурированные данные, то вы получаете вот такой-то результат. А можете Chain of Thought, а, конечно, здесь для более продвинутых техник, как Chain of Thought, конечно, входные данные в виде такого ревью это недостаточно, но просто для упрощения они здесь показаны. Role prompt, negative prompt. Здесь есть metaprompting, то есть когда на базе вот имеющихся задач создаются разные варианты. Optimal prompt. ReAct - это вот то, о чём я говорю. Tool, action, observation, final answer. Это вот как раз то такая базовая вещь для нейро, для AI агентов. А можете ReAct посмотреть, как это будет реализовываться. Да, это звучит на словах сложно, но вот можете вот такое прописать промпт, просто его вот сейчас взять на каком-нибудь вашем любимом вендоре и проверить, что будет возвращено. То есть здесь будет и, соответственно, вы можете точно так спросить, какой там продукт, какой прайс, какой рейтинг, да? А, то есть все три эти вещи сделать там, например, strict output, да, техника, когда у вас будет вот возвращаться, например, в JSON, как вы в промпте всё пропишете, можете аэ сделать на базе этого, на базе вот этой задачи Program Aided Language Models. То есть это фактически такая техника, которая создаёт вам Python код, который будет вот эту штуку парсить и возвращать вам уже через силу Python, да, вот эти, э, как сказать, три поля, которые интересуют. Я повторюсь, это просто пример. Задачи там могут быть самые разные, то есть а потом системный prompt также это можно здесь посмотреть. В принципе, у меня ещё есть на, мм, как сказать, под рукой, ээ, определённые техники. Я их буду тоже до вносить. Плюс я ещё вот буду, э, papers здесь добавлять, потому что каждая техника, она, как правило, связана с каким-то paper'ом фундаментальным, который вот эту технику впервые, а, представил. Ну и здесь, в конце этого атласа, я просто собираю те работы, которые, как мне кажется, а наиболее полезны для fundamentals, для тех людей, которые хотят делать AI агентов или которые просто хотят сами по себе эффективно делать prompt engineering. Prompt engineering сейчас нужен всем, не только тем, кто делает AI агентов. Это нужно для просто того, чтобы прямые запросы делать и делать их грамотно, понимать, что работает, что не работает. И даже если вы пользуетесь, например, Cursor, VS Code или любой другой любимой вашей IDE, да, там AI агенты много на себя берут, но тем не менее вы всё равно, ну, если задачка будет у вас посерьёзнее, вы должны будете и посерьёзнее промпт записывать. Поэтому вы должны понимать, что работает, что нет. Любой промпт. О промптах можете думать как о, ну, есть tips, да? То есть повторить несколько раз одну инструкцию, чтобы нейросеть её лучше поняла, да? Или там курсивом написать там "critical", да, потому что это больше имеет веса. То есть это tips и tricks, я их здесь не пишу, они потому что устаревают и, э, как сказать, сегодня эти tips tricks работали, завтра не работают. А часто это типа как я тебе дам 200 долларов и ответ будет лучше. Это вот всё-таки такие вещи далеко не всегда работающие, а часто даже не работающие, особенно на новых моделях. Вот эти вещи - это работающие вещи. Почему они работают? Они работают, потому что, ну, во-первых, за ними стоят, как правило, какие-то papers. И это всё-таки вот, как знаете, вот в программировании есть паттерны. Вот паттерн там Observer, паттерн там Proxy, паттерн там какой-нибудь ну любой паттерн, вспомните, Factory, вот, Lightweight, легковес, да, паттерн, то есть вот это те же самые паттерны в программировании классическом, только вот паттерны в виде вот такого prompt engineering. Конечно, плюс-минус на разных нейросетях они будут работать разного. Естественно, вы то, что вы запустите на GPT-5, будет не эквивалентно то, что вы запустите там на Google Gemini семиллиардный, да, нейросети, а там, как сказать, ну, по слухам, там уже триллионом и и больше может, да, быть параметров. Конечно, не одинаковое исследование там будет инструкциям. Вообще, в принципе, об LLM правильно думать как о новом типе компьютера, который вы можете программировать. И prompt engineering - это вот просто программы. И это это вот паттерны, как писать такие программы. То есть нейросети, они хорошо развиваются в сторону того, чтобы следовать инструкциям. Понимаете? Это вот разница между обычным бытовым использованием. Скажи там столицу Парижа, вот, или какой мне там лучше смартфон купить. И вот следованием инструкциям. То есть просто задать вопрос - это одно, а писать вот такие программы или агентов, которые автоматизируют, это уже вот именно как вот программирование, как в своё время Altair программировали, как потом там Apple II программировали. Вот это вот нарождающееся новое такое такой стиль э программирования.
Друзья, это по большей части всё. В принципе, вы знаете, что у меня есть другие полезные тулы на в моём репозитории. То есть, э, есть утилита Facade, которую вы её видели. Она сейчас доступна в трёх разных репозиториях, в том числе на MacOS. А она доступна GitHub. есть CodeFacade, которым я вот показываю данные, которые есть в, как сказать, анализ tool для того, чтобы смотреть, кто там контрибьюторы, сколько кода там, на каком языке. Это вот CodeFacade, то, что вы видели, есть другие утилиты. Э, ссылку на этот репозиторий и на вот этот атлас я оставлю, друзья. Это всё. Это вот был материал "Архитектура и агентов". Всем спасибо за внимание.