📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Концепция ИИ-агентов и мультиагентных систем // Демо-занятие курса «NLP. Advanced»

OTUS IT Онлайн - образование2:05:51

Transcription

Так, коллеги, добрый день. Сейчас попробую фончик поставить. Забитие фон. Вот так вот. Хорошо.

Так, видно ли мой экран? Демонстрация экрана. Дась. Экрант. Так, применить эффект. О, так, коллеги, сейчас я открою здесь чатик. Где он тут есть? Я на втором экране видел. Ага. Всё, поставьте плюсик, если меня видно, слышно и видно мой экран. О'кей.

Вот. Ну, я надеялся, что я успею сделать хорошую интересную лекцию, но я не знаю, у меня не получилось, да, потому что конец квартала, потому что много работы, потому что гладиолус. Поэтому я буду вам читать скучную лекцию, но надеюсь всё-таки вы люди заряженные и скучно вам не будет.

В общем, сегодня мы поговорим про концепцию аиагентов и мультиагентных систем. Тему я, наверное, качественно до конца не раскрою, потому что всё-таки она слишком большая, чтобы Ой, а я и не в наушниках. Уж ёшкин что значит много работать. То есть тема слишком большая, поэтому я думал, как к ней подступиться, и решил, что я просто по верхам расскажу самый концептуальный, как бы, вот такой вот самые простые вещи, чтобы потом сложные вещи не казались сложными.

Так, меня видно, слышно. Меня зовут Александр Пробруляка. Я работаю DS-инженером сейчас в команде гигакод. Делаем лучшего гигакода на свете, поэтому я пишу агентов, читаю агентов и использую агент. Правила простые, активно участвуйте, задавайте вопросы. Вот я на втором экране вижу чат и оперативно буду на них реагировать.

Так, ну, вводная часть у нас где-то минут на пять там с семь про US рассказать и завершающая часть про US. Ну и мякотка будет в промежутке, поскольку для отса это важно. Напишите, есть ли у вас опыт в IT и с какой целью вы сегодня пришли. Пожалуйста, напишите в чат. Эта информация важна для менеджеров. Вот я жду вашей активности в чате. Никто не пишет: "Есть у вас опыт в IT и зачем вы сюда пришли?" Ладно, я пробовал этот опыт у вас собрать.

Так, OTUS - это авторские онлайн-курсы для IT-специалистов. Вот курсы достаточно хорошие. Я веду здесь курсы, я смотрел здесь курсы. И в целом, чтобы войти в какую-то тему, OTUS US - это хорошо. У Отса есть образовательная лицензия, выдаётся диплом о профпереподготовке, есть разные направления курсов. В данном случае у нас курс направления ДС, но есть и архитектура, и программирование, и аналитика, и тестирование, и всё, и всё прочее. Вот. Причём важность-то образования сейчас даже не в том, чтобы что-то уметь, а в том, чтобы что-то знать. Уметь-то нас будут как раз и агенты, а вот чтобы правильно с ними разговаривать, нужно знать. Для этого нужна системность, кругозор, системность, как бы правильная картина мира. И вот за этим можно и нужно приходить. Можно вот, можно куда-то ещё.

Так, ладно, цели я тоже не сделал, поэтому начинаем сразу. Вот первый слайд вот такой. Недавно Антропик опубликовала большое исследование о том, как и агенты будут влиять на рынок труда. Ссылочка здесь есть, вы можете его загуглить и там в переводах его можно в интернете найти. Но самое забавное - это вот эта диаграмма, да? То есть вот синеньким - это то, что теоретически они могут покрыть, да, какие кейсы покрывает искусственный интеллект в его сегодняшнем виде. Вот. А красненьким насколько люди уже используют. И вот, например, в менеджменте это близко там к 90%. То есть вот 0,8 - это 80%, это вот 100%. То есть по мнению антропика, это которые авторы модели кода, это которые авторы и агента CLD код. у этих крутых ребят в их понимании и в их умении этим пользоваться, это покрывает 90% менеджмента, управление финансами, компьютер сайнса, включая программирование архитектуры и инженеринга.

А, ну я не в гигачате, я в гигакоде. Причём я в гигакод переходил не с улицы, а с команды гигалигала. Вот. Ну, у меня было пять этапов интервью, чтобы перейти в гигакод. Первый был просто кодинг, да, это задачи на литкоде. То есть ты, ну, такой медиум уровень на лидкоде, там четыре задачки, три-четыре задачки надо за час успеть решить. Вот вопрос в чате, как какие этапы. Второй у меня была теория по классическому имелю. Третий - это уже была у меня специализация NLP, то есть меня из как команды там сеньорного уровня ребята собеседовали. Потом у меня было ещё собеседование по систмдизайну. Это бы был четвёртый этап, то есть как бы проектирование систем. И пятый - это уже было поведенческое с моим текущим руководителем. Вот. Ну, и шестой. Там уже я засомневался, говорю: "Отдай-ка мне кого-то из команды, я поговорю". То есть я запросил шестой этап. Ну, то есть вот было было шесть этапов, что я чтобы я зашёл в гига коды. Ну сейчас мы нанимаем, э, прямо сейчас, но мы не в RNG нанимали в сам гигакод, а в SWK для как бы написания агентов агентизации. Там три этапа, там ну ты 3т34 3т3тчетыре этапа. Кодинг, э, потом теория, потом если хочется, тостмдизаign и последняя поведенческая. Ну, от медла и выше, да, от медла и вышестмдизайн есть. То есть я на сеньорной позиции сам. Вот мы сейчас нанимали на медловую, вот было 33тричетыре этапа. Но опять же, сейчас всё настолько меняется, что, например, я вот крайние разы, когда я сомневался в человеке брать, не брать, я говорю: "Давай последний этап". Давал задачу, которую человек заведом не знает, как решать. Говорю: "Ну, открывай свой там клодкод или что у тебя курсор и давай vibeкодь". И смотрел, как человек вайб-кодит. То есть насколько он умеет делать правильные вопросы, правильные спецификации, декомпозицию. И очень многие на этом как раз сыплются. Они водят какой-то запрос ровно то, что человек сказал. Говорят: "О, великая машина, напиши мне говнокод". Машина вываливает там пять файлов, там тыся строк кода и что с этим делать? Вот я смотрю говорю: "Это фиаско". И на этом мы расставались. То есть нужно было правильно уметь ещё и вайпкодить. Сечас сейчас это навык, прокачивайте его.

Так, ну ладно. В общем, вот это то, что уже сейчас прямо можно легко делать. То есть вот что что что нельзя делать агентами, да, там вот personal care, да, там массажисты, медсёстры, продажи вот все еще наполовину нужен человек, чтобы убеждать вотфуфрн, то есть приборку там сосиски жарить, вот это еще за людьми. А всё, что касается работы с информацией, это уже на 90% оно покрыто. Ну и вот за двадцать шестой тире двадцать восьмой годы это всё стремительно вот этот красный разрастётся, да, вот этого синенького. Вот. Ну, подробнее можете почитать исследование.

Ладно, собственно, что что ж такое агенты? Надо понять, чтобы этих зверей бояться или не боятся. Ну, всё начинается с LM, да, large model. штука, которую вы скажете: "Вихри снежные, крутя", она вам скажет там то заплачет, то заводит и так далее. Просто продолжал продолжалка языка. Но поскольку в нашем языке есть дофига знаний, да, и вся собственно человеческая культура - это культура письменности, да? То есть всё развитие нашей цивилизации - это книги. Вот всёвсё, что есть в книгах, эти алгоритмы в себя впитали. И поэтому они генерируют любые человекоподобные рассуждения, которые когда-то содержались, да, или потенциально могут быть реализованы, зная тот корпус знаний, который мы сейчас знаем, да? То есть это эта хрень аккумулировал в себя все знания в каком-то смысле, да? Все все понятия и может человекоподобно генерировать рассуждение текста. Вот этом.

Ну а теперь давайте мы к этому прикрутим пулемёт, да? То есть мы возьмём LM, скажем: "У тебя есть цель". Э дам ей какой-то инструмент памяти, чтобы он помнил, а что он уже делал, и дадим ей способность действовать. Ну, в данном случае просто декларативно говорить: "Нажми на курок пулемёта" или там два пикселя вправо, два пикселя влево, сдавать текстовые команды, всё получается. Агент. И, собственно, вот вся эта агентская история, она развелась за последние там, буквально 2 года, когда модели набили в себе достаточно интеллекта, чтобы выдерживать длинные трейсы, да? То есть с чего всё начиналось? Сначала просто продолжить текст, потом ответь на вопрос, как сварить борщ, там как какая столица Англии. Энциклопедические знания, знания какие- это комонсенса. Потом многошаговые диалоги, да, там на три, на четыре-пять тактов, то есть поддержи диалог. Потом ролп, да, там я киска, ты рыбка, давай поговорим. И вот какие-то диалоги. А потом reasoning ээ модель, которые могут рассуждать. А потом давайте-ка скажем, раз ты умеешь поддерживать диалоги, ты умеешь рассуждать, ты можешь из разных ролевых позиций генерировать тексты, а вот тебе цель, а вот тебе инструменты, рассуждай. Ну и между делом говори, как вызвать инструмент, то есть вызвать функцию с какими аргументами. search query, да, функция search query там такой-то функция там short, там координаты такие и всё. Вот и, собственно, что делает система агентом? Это наличие какой-то цели, способность воспринимать среду, какие-то наблюдения и влиять на неё, то есть совершать действия. То есть циклично - это рассуждение, действие, наблюдение и коррекция в цикле. То есть длинный-длинный трейс. Ну вот какие-нибудь агентские трейсики я чуть-чуть позже покажу, пока идём по презентации.

Вот. То есть, если изначально ещё там года два все делали чат ботов, там чат ботов поддержки, болталки на сайте, хороших кейсов не получилось, да, потому что модели не настолько умны, то вот как раз, э, когда это спрятали от людей в под капот, да, то есть человек что-то спросил, а потом модель делает пять каких-то вызовов, там думает, а не то ли он хотел, а посмотрю-ка я там, а посмотрю я сям потом, а, наверное, он вот то хотел и генерирует какой-то вызов какого-то инструмента. Вот такое заработало хорошо. И вот сейчас в общем-то царство агентов наступает. То есть как только модели стали держать длинные контексты, осиливать многошаговое планирование и их научили генерировать jonхемы, то есть вызов инструмента, вот этот работа с инструментами, просто генерация jonсхем. То есть, если раньше люди перекладывали джисоны, теперь, собственно, модели перекладывают джисоны. И перекладывая эти джисоны, они управляют состояниями внешней какой-то системы, которые как бы через эти джисоны декларируются, да? То есть вызови то-то, начисли на баланс кому-то столько-то. Это просто в джисоне декларируется, а инструменты это исполняют. Вот.

Ну, то есть движок - это LLM, да? LM она глупая. в том смысле, что у неё статичные знания, у неё там нет ничего, она ничего не может, она только генерит тексты, не может запустить код, не может вызвать апии, не может изменить файл. Но если мы дадим ей инструменты и наш какой-то обвязочный код, который будет брать её текст и исполнять эти инструменты, исполнять баш команды, исполнять там запросы в опишку, исполнять там запросы к вб, просто запросы какие-то феч URL, то это уже моментально превращается в агент. То есть внутри это LLM как вычислительное ядро. И дальше мы можем этой лэмке в разных количествах делать разные промты, да? То есть можем ей сказать: "Вот тебе проблема, сначала как архитектор декомпозируй эту проблему. Дальше, пожалуйста, как как аналитик, напиши спецификацию. Дальше, как программист, напиши код, а дальше, как тестировщик, написанный код, согласно архитектуре и спецификации, пожалуйста, протестируй". И вот мы можем прогнать одну и ту же через несколько ролей с разными промтами. И и вот это тоже агент, это прототип агента, да? То есть как просто цепочка, а можно сделать именно более агентно. То есть мы даём задачу, мы даём ей роль архитектор, а потом архитектор что-то спроектировал, дальше даём задачу аналитику, а потом аналитику отправляем обратно архитектору с вопросом: "Вот тут была твоя архитектура, вот аналитик что-то написал, а, пожалуйста, напиши ему замечание. Если всё о'кей, пропусти дальше. Вот так вот в цикле там три раза прокрутить или там сколько-то раз прокрутить прокрутить, пока он его не отпустит. А потом он его отпустит, пишет код и написанный код мы отправляем обратно аналитику и говорим: "Аналитик, посмотри, пожалуйста, на написанный код. Посмотри на свою аналитику и напиши какие-нибудь там, не знаю, краевые случаи". Как агент тестирует код, он запускает баш команды. То есть, ну вот давайте, чтобы долго не ходить кругами. Сейчас я просто открою код какого-то своего маленького кли агентика, которого я по долгу службы пишу, и мы просто поговорим вот как как он устроен. Сейчас курсор будет долго загружаться. Это вот я с ним сворм режим сегодня как раз обсуждал, спеку писал полдня. Так вот, у меня есть агент. Агент - это очень простой цикл. Сейчас я открою секунд. Там просто цикл true, великий и прекрасный. While true. Всё, тебе что-то пришло, да? Если тебе что-то пришло, то с ним там сделалай. У тебя есть тритрит три три режима. ПроцессOL. У тебя есть процесс Tool call и процесс user ask. То есть три типа месседженуть, что что там оно сделано, да? То есть вот вот всего всего три вещи: process tool output, process tool call и process user ask. А дальше функция run agent, в которой есть while true, который просто в цикле это исполняет до тех пор, пока агент, например, не вызовет какую-то тулу с submit solution. Ну там у меня вот так промт сделан. Так, а что? Плохое разрешение. Я не умею. Увеличивать-то тут. Фига себе. Фига себе. А я не умею. А я не умею. То есть видео лугает. Так, как тогда делать? У меня плохое соединение. Жалко. Сейчас я попробую с телефона раздать. Может, у меня на провайдере что-то пум-пум. Ну давайте я этот код открою тогда по по-другому. Так, ну дальше. А вот так вот видно или нет? Не видно. Сейчас я попробую с телефона раздать тогда связь. Сейчас я тогда лагану, буду пере подключать Wi-Fi. Так, коллеги, меня сейчас стало видно, у меня поменялся интернет на мобильный. То есть видно ли мой экран? Немного. Ctrl+ сработает? Не сработает. Сейчас я я знаю, что мне сделать. Сейчас я в браузере у Так вот у меня здесь вот процессинг Так, норм. О'кей. Смотрите, у нас есть внутри агент. Это циклреact. Функция условная run агент. у которой внутри есть цикл Wild true. И в этом цикле Wild True у вас происходит обработка сообщений. Сообщение всего трёх типов. Это либо пользователь что-то сказал, то есть мы просто отправляем туда сообщение пользователя в модель на VLмпу в данном случае. Если у нас tool call прилетел, то мы просто вызываем функции, да? То есть мы у нас есть свой код, который применяет тулы. То есть он берёт jon схему, которую моделька нам отдала, парсит её и вызывает какая-то тула. Вот там tool name, вот аргументы функции, а дальше там, ну, происходит как какой-то функция apply tool, которая по имени функции достаёт из словарика эту функцию питоновскую, подпихивает в неё аргументы и говорит: "Исполнись". А потом генерирует сообщение: "Пожалуйста". Function call output. Call id, который вам тула сказала. То есть просто вот тут тула сказала что-то сделать. Ну, вернее, что-то сделали и вот результат. Нет результат, мы отдаём модели. Всё. Так, мы тут ту-тулка колы процессим. Вот. И тутутуту аутпуты, да. Вот здесь, собственно говоря, мы чего делаем? Мы отправляем полученный результат туда на сервер и получаем снова себе toolc. Всё. Вот мы в цикле крутимся. Как выглядит агентский трейс? Сейчас я ещё в одном месте покажу даже. Я, наверное, чуть-чуть по по-другому это сделаю. Сейчас я этот грохну процесс мне чуть-чуть больше показывать. Ja. Секунду. Так. Ну вот, например, какие-то тротрейсы. Так, этот трейс мы в роли субагента открыли. Давайте вот этот трейсик откроем. Так вот, есть у нас инпут. Инпут начинается с чего? Что usер говорит тут там какая-то задача у меня файл какой-то дефолт MD, у него плохая услуга Markдау, мне ленивые её править. И вот я говорю: "Давай поправь-ка, пожалуйста, здесь Markдаун". Это я отправил в модель. Вот модель такая с ролью assistant вообще ничего мне не сказала, но сгенерировала to call. А, ну вот здесь разные инструменты здесь есть у агента. Мы сами придумываем эти инструменты, то есть мы сами определяем, с какими инструментами агент будет работать. В данном случае у агента есть инструмент System Visited Resources. Это список того, что он уже посетил. Ну, чтобы не зацикливало его. Вот. Ну, видите, ресурсы - это function callout. Вот отработал, говорит: "У тебя нет никаких ресурсов, давай-ка, в общем, делай". Хорошо. Дальше у нас опять ассистент ничего не сказал, пустое сообщение от него, но сгенерил function call. Он говорит: "Пожалуйста, давай-ка я прочитаю файлы". Ну и вот прочитал файлы в папочке, в которой был запущен, потому что у этого как бы агента есть тулы. тулы чтения файлов, например, тула реестра посещённых ресурсов. Вот дальше вот он файлики прочитал. Тут ему просто джисончиком список файлов с какими-то атрибутами, там скрытый файл, не скрытый, вернулся. Хорошо. Снова у нас ассистент ничего не сказал, но сгенерировал нам tool call. Function call, readфile. Вот он прочитал этот там файлик вот, который его просили сделать. Вот здесь какая-то статья прилетела ему в Маркдауне. Вот тут сколько-то строк, там 500 строк обрезано. Ну, чтобы не засирать контекст. Кто может вычитать файлик там следующие 500 строк, если не поленится, и так далее. Дальше опять ассистент ничего не сказал, но прилетел Толко. Вот туларефлект, рефлексия. Обнаружено, что имеют проблемы там бла-бла-бла. Вот эта туларефлект - это моя тула. То есть я сам придумал, что мой агент будет работать с вот такой тулой. Я мог бы её не придумывать, да, но, ну, почему я её придумал? Потому что мне нужно место, чтобы модель порассуждала. Вот это такой как бы скафолдинг, строительные леса. Модель порассуждала что-то. Тула сказала там: "Всё, рефлексия сохранена, пожалуйста, держи её в мозгах, да, для дальнейшего там рассуждения". Так, дальше. Опять у нас ассистент ничего не сказал. Здесь иногда он что-то говорит, иногда не говорит. То есть разные модели, обучены по-разному, ведут себя по-разному. И потом агент вызывает субагента. Что такое субагент? Да это тот же самый агент, только с другим системным промтом и с конкретной задачей. То есть я-то начал с ним с вот такого простого, а он говорит, что ему нужен субагент. И субагенту там, а это так у него был ризн первое поле тулы, опять же, вот тула, да? Да, то есть что такое тула? Да, мы сами определяем, что такое тула. Вот вызов тулы это генерация джисончика. То есть вот это вот просто джисончик распашиный. Тип function call name такой-то тулы. А какие тулы? Я ему сам сказал на входе. Он у себя в системном промке знает список своих тулов. Так вот, э, и вот где-то здесь есть поле Reриason, потом есть поле Task. Вот Task. Перепиши разметку в в Markдау в следующем формате. там сохрани смысл структуру и вот он тут что-то ему написал. Вот следующий вызов тулы - это уже будет ответ task report function call output. Это у меня агент, вот этот субагент. Там, на самом деле, прошло между ними тоже там какие-нибуд 10 там 20 шагов диалога, не знаю сколько, неважно. Он дал ответ, что вот я тут что-то successfully corrected там, бла-бла-бла, и что-то объяснился по по своему поводу. Хорошо. Потом следующий лol. Вызвавший агент читает, отчёт прочитал, читает файл. То есть он декларирует: "Пожалуйста, прочитай файл". По пути такому. То есть я сам придумал, какие тулы ему показать. Пожалуйста. Вот он читает этот файл. Потом что происходит? Потом у нас происходит опять какая-то рефлексия. То есть модель подумала, то есть, ну, я сам подсунул тулу. Я мог бы дать тулу там update план, там update memory, там update журнал, что-нибудь, всё что угодно. То есть мы сами проектируем вот этот скафлдинг, чтобы моделей было удобно решать наши задачи. То есть вот тебе дорогая там калькулятор, вот тебе ещё что-то. Вот. И вот так всё это дело идёт. То есть моделька просто продолжает мне вот такой диалог видоol. Вот что-то он тут пишет. Write to file. Что-то решил попереписывать сам, прочитав его. подправить. Вот он тут записал в этот файл. Потом опять же ассистент нам ничего не сказал и сгенерил последнюю тулу, которая submit solution. Ну просто у меня так запрограммирован мой вот этот вот агентик, что когда он видит тулу submit solution, понимаешь, что всё, цикл true нужно брейкнуть, работа закончена. Всё. Вот мы посмотрели на трейс агента. Там агент, роль у него была, что ты там дирижёр и менеджер. Твоя задача там декомпозировать и выделять другим задачи. Ну, чтобы контекстное окно не съедалось. Вот там системный промт у него какой-то, там ты там функциональная AI модель, которая там оперирует сигнатурами внутри tool XMLтегов. Вот. Ну, это на самом деле, да, один из вариантов промта гигакода. Я не буду вам весь его палить, меня уволят, а я не хочу быть уволенным. Вот у него там есть мери, какие-то внутренние тулы, журнал D. Может себе что-то там прихранивать какие-то свои заметочки. А сигнатура Tools, что у него там было? Вот WR to file функция есть. Она принимает там, ну, это опять же моя реализация моего клиента, да? То есть агент-то он там модель умная, а я вот с таким тестовым своим клик клиентом могу что-чуть что что-то там подходить и просто тестить, что мне нужно нужно тестить. Вот это мои локальные тулы, там write to file. То есть запиши файлик. Что он принимает? Он принимает путь и он принимает контент. И вот эта вот jonхема, она как раз идёт модели в system. И модель она знает, что ей нужно генерить джесончики с название. И вот параметры специфицированные вот здесь, то есть append to file тула, то есть дополнить контент к какому-то файлу. Какая ещё тула есть? Там прочитать файл есть, что у меня в тестовом клиенте есть, листануть какую-то директорию, да, там поискать файлы на файловой системе. Какие у неё параметры есть? Там путь есть, регулярка есть для регекспа и глоб. Там есть вот эти глоб паттерны по путям. Ну то есть а в другом каком-то месте вы можете другую тулу написать с другими параметрами, но модели всё равно, она просто вызывает тулу. Так, ну вот Execute Command - это вообще страшная вещь. Это баш команда, да? То есть Command line, она может вам тут что-нибудь поставить. Ну, если вы под каким-нибуд там, не знаю, руту чёткой запустите, она вам что-нибудь может полсистемы снести. Какие у неё параметры? Параметры у неё, да, он понимает это, исходя из что я у него попросил. Дальше, исходя из систмпромта, кто он такой, где там у него systemм пром был, да? Там ты такой-то, такой-то должен делать то-то, то-то. У тебя там такая иерархия, там тулов, вот там у тебя какие-то там принципы, там never-нибудь там пам-пам-пам. А вот к нему ещё по подмешан какой-то usеer instruction, типа агент MD, да? А набор скилов доступных ему под подмешан сюда. Ну то есть вот вот такая вот большая колбаса. У него есть какие-то внутренние регистры памяти, типа там памяти журнала. И ну то есть это вот здесь у меня так сделано в этом тестовом клиенте, а там в других местах можно сделать по-другому. То есть у него есть контекст, есть тулы и есть системный промт. Тулы он может дёргать и смотреть там какие-то свои прихраненные регистры памяти. И и, собственно, вот и вот в этой вот контексте он там делает. Там могут быть какие-то тулы типа сари, суммаризируй мне что-то, там могут быть тулы, там выпиши что-то и так далее. Ну вот есть два два путя, да. Первый путь - это вот циклреакт. свободный для кодинговых задач циклы React - это то, что надо, потому что кто же его знает, как этот код писать. Вы не можете сделать жёсткого алгоритма. Вот. А есть другой путь, это нграф. Сейчас я про нграф найду. М-ПМП-пумграф. потерял потерял пролонграф. Во. А есть другой путь, когда вы жёстко говорите, э, какие узлы у вас должен пройти флоу. Ну вот здесь, например, вот этот на ленграфе, тут есть тоже и видюшка. Сейчас откроется страничка. надеюсь, откроется. То есть, ну, условно говоря, у нас есть запрос пользователя, мы его там проясняем этот запрос, как, ну, делаем clarifyй ноду. Сейчас вот по промке увидим. Если мы понимаем, что нам всё понятно, не надо ничего уточнять, мы сразу переписываем запрос в поисковый. Если надо что-то уточнить, мы идём к пользователю, там уточняем что-то у пользователя. Дальше мы вот уточнённые добавляем вот к этому и снова там идём в перефразировку. Дальше мы классифицируем там, например, туда-сюда поискать там судебный акт или поискать там какой-то закон. Ну это просто вот такой граф здесь сделан. Дальше мы отвечаем на вопрос на основе вот этого поиска. Дальше мы рефлексируем, а всё ли мы ответили? Если мы ответили всё, мы отдаём финальный ответ. Если мы не всё ответили, мы идём снова в классификацию, где нам поискать законы или судебные решения. Снова и делаем ответ, зная то, что мы знаем, плюс новый поиск. Рефлексируем, а хватило ли нам информации для ответа. Если хватило, отдаём.

Если не хватило, снова идём.

Вот это вот уже ленграф, то есть второй путь. То есть построение агентов. Три, три пути. Первое – это просто цепочки, чейнинг.

Вы чётко говорите: "Сначала ты архитектор, сделай, потом передаёте там туда-то. Ты там аналитик, зная архитектуру, напиши". Ну или, например, там вот тебе тема, как называется агент, не знаю, не понимаю просто, что значит "называется агент". Это я вам показываю какую-то реализацию агента. Вот здесь агент на ленграфе, да? Вот он написан просто в демоцелях, да?

Описание тулов LLM берёт ровно из описаний. То есть, например, вот мы занимаемся агентизацией там в Сбере, и ко мне там говорят: "Что-то ваш гигакод плохо работает". Я первый вопрос, который я говорю: "Покажите мне, как ваши тулы описаны". То есть принесите мне список тулов, я посмотрю на сигнатуру, на описание. Вот.

Ну, то есть давайте сейчас я куда-нибудь ещё тут выйду, я вытащу на этот экранчик. Сейчас. Так. Ну там, допустим, вот сейчас подгрузится. Ну, то есть вот такие вот джисоны. То есть всё, что модель видит, она видит вот такой JSON.

function submit solution description такой-то, параметр никаких там. Вот эта вот страшная функция execute command выполняет CLI-команду на системе, параметр у него всего один – это команда. description – это команда to execute must be valid for the OS. Мы тоже подставляем в промте где-нибудь там, когда мы в промт что-нибудь отправляем, мы отправляем какая-то версия промтов чего-то куда-то. Во.

А когда мы отправляем промт, мы говорим, что там какой-нибудь у нас вот у нас ОС Linux, shell у нас такой-то, находимся мы там-то, сям-то, под гитом, не под гитом. Всё. И вот оно там куда-то идёт и что-то делает.

А видит модель вот эти ваши метаданные, которые вы ей показали, видит вот эти сигнатуры тулов, видит системный промт и может тулами что-то из своих каких-нибудь регистров памяти себе подтягивать, если у неё есть эти регистры памяти. Если нет, то нет. Может с файловой системой работать, может там что-то прихранивать. То есть смотря как вы спроектируете вашего агента.

То есть, да, то есть все типы – это называется JSON-схема, то есть всё описано в JSON-схемах, и нет ничего, кроме перекладывания джисонов. Раньше перекладывали люди джисоны, теперь LLM-ки перекладывают джисоны. И даже вызовы тулов по MCP, там Model Context Protocol, это тоже там ничто иное, как вызов тоже JSON-а, то есть, ну, про MCP не знаю, попозже у меня в презе это было. Вот.

Ладно, в общем, я вот вам показал какой-то трейс агента, да, то есть как это выглядит. Я показал, как выглядят тулы, я показал, как выглядит системный промт. Я показал вам, как выглядит граф на ленграфе. Собственно, можем расходиться.

Это современная практика агентостроения. То есть дальше вы не делаете ничего, кроме того, что вы пишете системные промты, вы много мучаетесь с сигнатурами тулов. И дальше, опять же, следующая история. Вы собираете много-много таких хороших трейсов, которые решают задачи, и идёте и делаете на этом SFT-модели. А потом, когда вы на SFT сделали, вы берёте какие-то там опять же кучу, кучу, кучу задач решаемых, верифицируемых и запускаете в RL. Решать агентскими трейсами эти задачи. То, что успешно решилось, подкидывайте тоже в обучение какой-нибудь в GRPO.

Но у нас вот тут не занятие по ленграфу, да, то есть и не занятие по реакт-циклу, и не занятие как бы целое. Это, ну, условно говоря, открытый урок, который кто-то когда-то где-то посмотрит.

А, ну ладно, тоже сразу тогда к мякотке перейдём. Тоже в Сбере есть хороший человек, это Константин Крестников, и он ведёт Telegram-канал. Вот у него в Telegram-канале был такой эксперимент с моделью на реакт-цикле. Так что это? Ух, сколько уже у него поколений. Вот так вот.

Ну, суть такая, что... Ой, он закрыл репозиторий. А это у меня всё-всё нормально. Всё, сейчас сейчас всё будет. У меня отвалился VPN. Я его верну.

Так вот эксперимент с агентами от Константина Крестникова. Суть такая: он взял клодкод, он взял цикл в баше, дал простые тулы типа поиска по интернету, лазания по файловой системе и сказал: "Ты разумное существо, пожалуйста, осознай себя".

Так какое окружение? Никакого окружения не нужно. Нужен доступ к какой-то модели. То есть это это самое главное, потому что нет модели – нет агента, да, нет там ножек – нет печеньки. Вот самое главное, где вы разживётесь моделью, потому что вот это вот всё, оно жрёт. Оно жрёт токены, как не в себя, то есть там какие-нибудь 50 000 токенов за, ну, на оламе, что вы запустите на этой онлайме?

То есть хорошие агенты начинаются там, ну, с моделей хотя бы там 330B, да, какой-нибудь QwenCoder там 30B, Qwenkoer Next. Ну, то есть вот 30 млрд параметров ещё терпимо, да? Там какие-нибудь вот 90-100 миллиардов параметров модели – это хорошие агентные модели. Какие-нибудь модели, там 5, 7-14 млрд параметров – это тупые модели. Вы умных агентов не получите на них.

Ну, то есть это занятие, да, оно простых смертных доступно, если вы там, не знаю, раскошелитесь на там 500 баксов в месяц на токены OpenRouter и будете гонять какие-то хорошие модели. Или в вашей конторе кто-то купил несколько видеокарт, на которых вы можете запустить модель и во славу этой конторы это погонять. Ну, то есть это задача агентостроения, агентоприменения для богатых. Либо карты, либо деньги.

То есть я почему такой смелый? Потому что у меня видеокарты сберовские в доступе. Ну что такое 1000 бесплатных запросов в сутки? Агентский трейс там занимает 50 шагов, например, на одну какую-то задачу или там 100 шагов. Ну вот 10 запусков агента вы сделаете.

Чем отличаются курсы? Ну, я поскольку преподавал и на LLM Driving Development, и на NLP, скажем так, LLM Driving Development – это сборная солянка рецептов. То есть запустите VLM, там запустите то-то. А NLP – это всё-таки фундаментальный, более глубокий курс про то, как устроена обработка языка, там что такое, ну, то есть, знаете, это как вот математика в обычном классе и математика в спецклассе, да, вот так.

Курс NLP, он научит вас быть НЛПшником. Курс LLM Driving Development научит вас быть чуваком, который запускает оламу, подключает к ней там что-то и промтит. И то, и то хорошо. А вот прямо вот курс "LLM-инженер" не знаю, не сталкивался, не не не видал. Вот так вот.

Ладно, здесь открылось, в общем, с чего всё начиналось. Так, э, ну, оно вот у него разрослось. То есть он начинал с того, что вот у тебя баш-цикл, вот тебе один агент MD-файл, что ты должен осознать себя какой-нибудь файл go. Цель. Вот. И дальше вот тебе инструмент – файловая система и там доступ в интернет, поиск. Пожалуйста, осознавай. Ну, то есть стань разумным существом.

Ну вот дальше система крутилась, крутилась, крутилась, там чего-то редактировала эти себе файлы, создавала там себе душу, там писала какие-то заметки, цели. Вот.

А агент-то был, собственно, вот какой-нибудь там SH, то есть башевский цикл, который просто крутит клод кода в этой папке, заставляя читать вот эти свои опять же с тулами, смотреть, что у него есть, и всё. А дальше модель сама себе дописывала там какие-нибудь син, там дописывала какие-то возможности там что-нибудь публиковать, там паблиш, что-то ещё.

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

Так, ладно. Как какого-то движа я навёл.

Ну, смотрите, любое запоминание – это либо контекст диалога, но суммаризированный, да, то есть у вас контекстное окно, никто не держит миллион токенов. Ну, потому что это дорого. Нет, вы можете пойти в OpenAI, сами открыть модель, сказать: "Я хочу миллион токенов" и платить за миллион токенов. Но если вы там купили подписку за 100 долларов или там пришли в ГигаЧат и бесплатно им пользуетесь, потому что ГигаЧат сейчас бесплатно раздаёт свои доступности, никто не будет вам миллион токенов держать, потому что это дорого. Там держат, ну, какие-нибудь, не знаю, там 200 000 токенов, да, там 100 000 токенов. Ну, вот все по-разному. Вот.

И когда у вас идёт какой-то контекст, вы какие-то файлы вычитываете, он рано или поздно всё равно суммаризируется. Ну, либо агент просто упадёт со словами: "Я упал", да? То есть контекстное окно заполнено, либо, если это агент поумнее, он суммаризируется, там как-то сожмёт информацию и пойдёт дальше смотреть там последние 10 сообщений плюс суммаризированный контекст, плюс какие-нибудь регистры памяти, если он там тулами какими-то себе что-то прихранивал. Вот.

То есть память – это просто MD-файлы, которые модель тулами себе может записывать и оттуда вычитывать что-то. То есть ничего хитрее, чем MD-файлы, нету. Ну и есть долгосрочная память в виде какого-нибудь семантического поиска, когда вы тоже там куда-нибудь в память какие-то факты храните, они векторизуются, а потом вы можете по векторному поиску что-то себе извлекать.

То есть видов памяти всего три. Это контекстное окно. Дальше это MD-файлы какие-то в виде регистров памяти, то есть либо детерминированных, либо свободных. Просто вот тебе папка и пиши любые заметки. Вот. Либо какое-то векторное хранилище с фактами.

Ну, ещё народ, я знаю, упражняется с графовыми моделями, но я с ними не упражнялся, мне они ни к чему. С графовыми моделями я упражнялся только в RAG, когда мы работали в ГигаЛигале, да, мы брали там Гарант, да, там правовую систему, это большая графовая база, этот документ ссылался на тот, и мы вот по этому графу там лазали через API-шку. Но это просто опять же RAG, да? А что у RAG-а под капотом – всё, что хотите.

Смотрите, про LangChain. Я ненавижу LangChain. Я им не пользуюсь. И вас призываю им не пользоваться. Потому что если ваш код должен жить больше, чем там 2 месяца, то LangChain не подходит, потому что через 2 месяца в вашем коде не будет работать там половина, потому что они меняют интерфейсы раз в месяц там что-нибудь, раз в квартал наполовину, а раз в год полностью. То есть это код для там одной-двух недель, он на помойку улетел. То есть если что-то более поддерживаемое, чем там демонстрация на один вечер, то LangChain вам не подходит. Не пользуйтесь им.

Э-э, на тему реранжировщиков, ну, сейчас же много хороших ранжировщиков. Просто идёте там на Hugging Face, ищете реранкер. Ну, сейчас хорошая, лёгкая модель Qwen. Qwen-ранкер там, ну, 0,6B всего, она маленькая. Qwen-ранкер, вот. Ну вот из того, что свежего сейчас я использую вот эту модель, если мне куда-нибудь надо. Она хорошо обучена на реранжирование, и она маленькая, и у неё длинный контекст – 16 000 токенов, а даже 32 000 токенов. Ну то есть это это хорошо. Пользуйтесь современными реранкерами мультиязычными.

Мы обучали свой реранжировщик, когда я был в ГигаЛигале. Мы обучали его на Роберте, тогда ещё не было вот этих вот декодерных реранжировщиков. Мы брали Руберту Large, мы брали эту XLM Роберту мультиязычную, на ней делали свой реранжировщик, но вот прямо какого-то значимого выхлопа это не давало. Примеров недостаточно. Всё, что 50 примеров – это LLM-ные вещи. То есть вы можете LLM-кой что-то делать на пятидесяти примерах, а обучать модель нет. Там тысячи примеров нужны, а лучше десятки тысяч. То есть успешного обучения реранкеров на пяти примерах у меня нет. Может, кто-то владеет этим знанием, но я не владею.

Так, давайте двигаться по презентации. От LangChain отказывайтесь в пользу того, что вам нужно. Э, там ведь нет никакой магии, кроме как бросить запрос в API-шку. То есть зачем вы пользуетесь фреймворками, когда написать фреймворк – это один вечер, и он будет у вас консистентен для вашей цели. То есть просто писать на Питоне. Питон сам по себе фреймворк.

Я когда был юный, у меня был приятель, такой мастер PHP, один из сейчас гуру российского PHP. Как-то пришёл, сказал: "Альберт, мне нужно сейчас PHP поработать. Какой фреймворк мне посмотреть?" Посмотрел я, сказал: "Саша, у PHP есть фреймворк, тебе ничего не надо". Я успокоился и с тех пор хорошо пишу на PHP на любом фреймворке.

Вот поэтому не гонитесь за фреймворками. Это для тех, кто не умеет программировать, что написать там какой-то request или просто request написать там while true и сформировать сообщение, вы можете сами, оно всегда будет контролируемо. Фреймворки нужны, когда вы обучаете модели. Вот там, да, там GPU, там низкоуровневый код, там ещё какие-нибудь там распределённые, вот там фреймворки. А всё, что вызовы и обвязка, ну, спрототипируйте на LangChain, поймите, что оно работает, и перепишите без него.

Вот ленграфом можно пользоваться. Ленграф стабильный, они не меняют интерфейсы раз в 2 месяца. То есть вот как ленграф был год назад, как ленграф сейчас, вот он ровно такой же. Ну и RayS Phoenix. Хорошо, мы используем RayS Phoenix.

То есть, смотрите, вот все эти RayS Phoenix там, прочее – это экосистемные вещи, да? То есть нет смысла писать свою Графану, нет там смысла писать свой Elasticsearch, да, вот они есть. А вот конкретная бизнес-логика, зачем её писать там, приколачиваясь к чему-то, если потом вы захотите сделать это по-другому, а там код не поддерживаемый и ещё что-то. То есть инфраструктуру в виде там PostgreSQL надо использовать, там в виде RayS Phoenix, в виде Kibana, а писать бизнес-код просто писать его на языке программирования, потому что всё, что там есть, это перекладывание JSON-а и промты.

Так, ладно. Ну, в общем, промты мы сказали. А, ну да, я вам хотел ещё показывать какого-то кода про тулы. А, давайте тогда я вернусь ещё тогда сюда. И вот сюда я ещё вернусь.

Так вот у нас есть SRC, то есть вот у вас есть там агент Executor, и дальше у вас есть тулы. Вот, например, у вас есть простые тулы в агенте, да, там FETCH_URL. И у этого fetch вы можете сами написать сигнатуру. Вот tool description. Вот она такая вот description, вот параметры, вот там что-то, что-то, всё.

То есть, чтобы написать вот этот JSON, вам никакой фреймворк не нужен, никакой LangChain не нужен. Ну, вы там сами управляете какими-нибудь заголовками, каким-нибудь там ещё чем-то, чем вам нужно. Вот там функция call там. Вот вы можете сами подать там её в трафилатуру, там, если вам надо её почистить, да, там ещё как. То есть вы сами управляете тем, что происходит под капотом.

То есть, например, когда э мы начинали там в том же ГигаЛигале, да, то есть там первый прототип написали на LangChain, потом мы тут же поняли, что там плохой чанкер, нам нужно свой чанкер переписывать, да, там, э, ну, как бы поиск мы хотим свой, ну, в общем, мы хотим всё, мы выбросили всё в итоге, ну, вот не было смысла никакого значения.

Вот тула там FETCH_URL, да, извлечь URL-ку. Там есть тула, например, просто пообщаться с пользователем в консоли. Пользователь спросил вопрос, а модель ему даёт ответ там "answer", то есть ответить на вопрос. Просто модели так удобнее. И когда эта тула исполняется, она просто говорит, что я доставила ответ до пользователя. То есть вот вы сами такие технические тулы можете агенту подсовывать, какие хотите.

Вот JSON-чик там. Что, пожалуйста, отвечай пользователю вот сюда, вызывая, генерирует такой-то JSON. Что есть калькулятор? А, запустить питоновский код по паттерну. Довольно хорошо модели работают, когда у вас нет там жёсткого флоу, как там в ленграфе, да, и нет исполнения тулов, а есть ещё большая гибкость.

Вы говорите модели: "Модель, вот у тебя какие-то тулы, напиши, пожалуйста, вообще код на Питоне, который решит задачу". И потом этот код вы берёте и исполняете, и то, что получилось, ей показываете. STD, например. То есть модель сама пишет код на лету, который нужно исполнить.

Вот какая-нибудь там тула "исполни питоновский код" или там тула "калькулятор", потому что модели плохо считают. А если что-то вычислить, вы и там готово подсовываете из Питона какую-нибудь тулу "калькулятор". И исполняется она в Питоне просто чем? Функция eval, встроенная в Python, то есть, и никакой фреймворк вам для этого тоже не нужен.

Чтобы run Python code запустить, вам тоже никто не нужен. Вы просто отправляете там его в подпроцесс, да, там subprocess.run. Ну, то есть вот он уже фреймворк – это просто Python с типовыми библиотеками. Там append to file. Поискать файлы, что ещё есть, прочитать файлы.

Вот тулы рефлексии, апдейтнуть план. Прорефлексировать, спросить что-то у пользователя, это поскольку личный у меня клиентик. Ну там спросить пользователя – это просто функция input, что я там в консоли что-то ему отвечу. То есть у меня вот это исполнение call, где он, это просто какой-то принт там в консольку и дальше вот input до тех пор, пока я там это пустую строку ему не введу. Всё. Вот эта тула там интерактива Human in the loop.

Это простые тулы. Дальше есть тулы работы со скиллами. Skill Tools – это загрузка скиллов. Skill tools. Что там есть? Загрузи мне, пожалуйста. Skill. Скилл – это просто текстовая инструкция. Запусти скрипт, который к этому скиллу приписан. Ну, запустить просто какой-то питоновский скрипт, загрузить референс от скилла, загрузить какой-то ассет-шаблончик из скилла. Ну всё, и дать там список всех скиллов.

Ну то есть вот это всё пишется в эпоху вайп-кодинга элементарную. Просто говорите, что вы хотите, и там код вам пишет. А, и без вайп-кодинга это пишется, ну, не сильно медленнее.

Так, это вот скиллы. Что такое скиллы? Сейчас покажу. И тулы работы с MCP-серверами. То есть у вас есть ээ, наверное, здесь. То есть у вас есть тула, которая называется call MCP tool. То есть вызвать MCP-тулу, то есть вам сгенерили название, вы по названию поняли, в какой MCP-сервер пойти, с какими аргументами и вызвать её там.

То есть tool name там MCPK и Tool name. Ну это просто у меня вот здесь так сделано. Можно было по-другому сделать. Я просто в System prompt подаю тулы с вот таким вот э названием. Я сначала сервер пишу, а потом название тулы. Когда мне моделька генерит, я её разбиваю, понимаю, что вот у меня там сервер по префиксу, вот у меня тула по суффиксу, аргументы беру и в нужный MCP-сервер уже стучусь, вызываю тулу, получаю ответ, подсовываю его в модель. То есть вот вся работа с MCP-серверами.

Ну и реестр – это получение списка тулов во всех MCP-серверах, то есть обойти их, составить список. То есть MCP-серверы – это единый протокол, который позволяет к чему угодно подключаться. То есть, если раньше нужно было к любой API-шке писать там какую-то свою тулу, то теперь у меня нет проблемы подключить там что всё, что угодно, какой-нибудь DuckDuckGo Search.

Ээ, у меня есть MCP-сервер DuckDuckGo. Сейчас давайте ничего не запущу. Так. Сейчас у меня запустится. Скажет, что вот он тут go запустился. Всё, это MCP-сервер.

Дальше у меня есть конфиги у моего вот этого приложеньица. Секунду. Надо уйти из SRC. Где в конфиге? Я просто пишу, какие у меня MCP-серверы. Вот поиск search transport SSE URL у меня такой-то, server name такой-то, description такой-то. То есть вот из этого дела оно всё подаётся в system prompt, что там есть такой MCP-сервер, тулы у него такие-то и там JSON ээ сигнатура, что использовать его нужно с такой-то целью. Он так называется, такой-то его description. Всё. И модель уже сама понимает, что вот в этот тул нужно ходить за вот таким вот поиском.

То есть вот я его запустил. Сейчас я ещё запущу одну штуку. Нелька на VLLM прокинется в нужное место.

Так, ну и теперь, допустим, я могу вот этот свой клиентик вызвать там и сказать: "Э, я отлаживаю MCP-сервер поиска, найди новости про войну в Иране". Так вот у меня это MCP, вот у меня мой CLI не подцепился к какому-то серверу. Ага, вот у меня что здесь прилетел function call. В общем, вот уже полетели какие-то запросы. Всё, вот у меня нашёл уже новости. То есть вот как сюда были запросы чего-то, что-то он меня руганулся, что news search не найден, но тем не менее вот они были запросы.

Так, аргументы type function. А это что? А вот вот мой запрос там. Я отлаживаю MCP-сервер. Найди новости про войну в Иране. Вот он сказал: "News search, пожалуйста, на сервере Search. Вызови улучшенный QY: война в Иране". Ну кто-то у меня что-то поругался. Ну опять же, это мой отладочный просто грязный код, которым я лазаю куда-то приватно.

Кто ко мне прилетел? Ага, этот сказал, что что-то я не запустился, я там не достучался до кого-то. Ну хорошо, модель там переформулировала заново, кинула запрос там вот с таким запросом, кинула запрос на новости. Вон он там достучался ей и кинул ответ обратно в JSON.

Дальше кто у нас? Это completed. Ага, вот он тут что-то и пошёл текст. Он просто у меня обрезается в консоли. Вот написано "катит", чтобы не засорять здесь. А так-то полный трейс. Я могу эти логи найти, посмотреть. Я смотрю, как оно действительно работает, как промты подкрутить, как тулы переименовать, как сигнатуры поправить. Такая вот очень нудная работа агентостроения.

Вот. Но что интересно, когда вы делаете вот этих агентов с циклом React, у вас может быть следующее, что у вас есть дофига тулов. Дофига у вас тулов. А некоторые тулы, на самом деле, не просто тулы, это какие-то ленграфные пайплайны. То есть вот мы ленграф здесь вот смотрели. То есть вот какой-то пайплайн, вот он детерминированный, он в нужном порядке что-то делает. И вы можете взять просто пайплайн засунуть в тулу.

А это опять следующая хитрость. А вот в какой-то туле вот здесь взять и засунуть цикл React с какими-то тулами. То есть это такая вот фрактальная вложенность. Вы начинаете, допустим, с ленграфа. Ну, допустим, в какой-то ноде у вас хлоп и цикл React вот с этой такой свободой, где там по полям кони скачут. Потом он такой submit solution, вы взяли с него что-то, взяли финальное решение или артефакты, или там регистры памяти с него сняли, сами решили, что вы сняли, и дальше пошли по пайплайну. Потом хлоп опять в цикле React. А в этом цикле React внутри каких-то тулов хлоп и опять какие-то пайплайны вывалились, вот такие там ленграфовские или просто в линейные цепочные с разными ролями что-то проделать. То есть на самом деле глубина вложенности создаёт практически фрактальную структуру. То есть понятно, что никто не будет делать там много, глубоко, но сама вот эта тема, она позволяет делать насколько угодно сложные вещи.

Вот вся сложность всегда ограничивается двумя вещами: чтобы это работало побыстрее и стоило денег поменьше. Поэтому здесь нужен компромисс.

Ну ладно. С синим трактором. Ну смотрите, вопрос про защиту очень простой. Делайте всё в безопасном контуре. То есть, если вы повесили MCP куда-то вовне, не надо вешать их куда-то вовне.

То есть, например, в Сбере там есть несколько контуров. Я, например, как разработчик, я поставляю код в виде там какого-то докер-билда. Он едет в контур, в который я никогда не зайду. Там только девопсы, безопасники, ещё кто-то, они там проверяют, что делают. И только потом он едет в третий контур, куда даже они не могут зайти. И они не имеют сетевой связанности, эти контуры просто, в принципе. Вот.

То есть делайте в защищённых контурах, делайте по SSH пробросы портов. То есть я, например, вот сейчас подключаюсь на там видеокарту, да, на машину с видеокартой через проброс порта по SSH по шифрованному трафику, по своему личному там сертификату, который я там под роспись разместил свой ключик на той машине. Всё. То есть используйте SSH, пробросы портов и защищённые контуры. То есть не надо выставлять голую попой что-то в интернет.

Про скиллы давайте так. Skills. Ну, тушки – это отладочные скиллы. Ну, то есть скилл в целом – это файлик текстовый. Что посоветовать по системному дизайну на инженера мидла.

Вот ничто вас не спасёт, кроме системного подхода и здравого смысла. То есть правило системного дизайна такое: не старайтесь выдать решение сразу, пытайтесь разобраться в проблеме. То есть вам в любом случае задали задачу, которую вы не знаете, и на вас будут смотреть как на культуру мышления. То есть, как вы рассуждаете, как вы ставите вопросы, со скольких разных сторон вы способны посмотреть на вопросы, потому что сейчас, э, вся работа – это диалоги, да, там диалог с моделью, рефлексия по поводу этого диалога, написание спеки, обсуждение этой спеки с моделью, то есть умение смотреть с разных сторон, декомпозировать, структурировать, задавать вопросы. Вот это – это основное.

Ну и общая культура знания стека, да? То есть надо знать, как TCP/IP устроен, как там авторизация на серверы, на сервисы устроена, да, там что такое, да, там как балансировка устроена, ну, то есть вот иметь кругозор.

про про это всё. Ладно, в общем, скилы - это просто файлы. Придумали их в антропике. Вот у скила там есть какое-то техническое название. Дальше просто MD файл, который говорит, что я общая инструкция, у меня есть какие-то вложенные артефакты, у меня есть какие-то мои референсы - это такие вложенные инструкции, то есть маленькие по как бы, ну вот скил - это большая инструкция, укрупнённая должностная инструкция, да, там программист пятого разряда должен делать то-то, то-то и то-то. А референсы - это инструкции локальные, там как писать тесты программисту пятого разряда на тот-то и тот. Вот он тут что-то делает, маленькие инструкции по месту. А, а сеты - это гакет-шаблоны, то есть там шаблон договоров, шаблон там накладных. Ну, в общем, модель сама по месту, зная общую инструкцию, зная, какие к ней прикреплённые асеты и референсы, будет уже подгружать себе с помощью тулов то, что нужно в контекстное окно. Вот.

И забавная штука у скилов - это скрипты, да? Там просто какой-то питоновский скрипт. Вопрос, в каком окружении вы его запустите, это вопрос как раз вашей обвязки, вашей тулы. То есть вы можете запускать его с контекстом потока исполнения, можете в отдельном процессе его запускать, можете в отдельном процессе с передачей каких-то контекстных данных через входные аргументы там и так далее. Это как как вы сами оркеструете по месту, так оно всё и будет. Поэтому аргумент против ланкчейна, да? То есть пишите сами и оркеструйте так, как вам нужно по вашей задаче, по вашему месту. То есть, ну вот здесь у меня так. Давай, заходи. Skills. Ну вот какой-то вот общий скилл у меня для тестов, там как описывать проекты. Ну, то есть там общие принципы, шаги обзора, определи верхмую структуру, там бла-бла-бла, найди точки входа, опиши архитектурном модуле, поищи, какие тесты используются. Ну, то есть вот вот вот какая-то такая инструкция. И когда вы даёте там агенту какой-нибу большой резор, говорите: "А что здесь опиши?" Гораздо приятнее, когда такая инструкция есть. Иначе агент просто начинает лезть и там какие-то файлы вычитывать, там папки, всё вот это вот так вот по циклу, не понимая, а как, в каком виде дать отчётто. Имея инструкцию, он у вас сделает, условно говоря, за 10 тактов всё это. Ну, то есть там посмотрит там пяток файлов, посмотрит там пяток папок и поймёт, что это, и даст вам результат. А не имеет инструкции, он сделает примерно то же самое, но сделает там 25 вызовов. Он там в глубину полезет там на три уровня вложенности, всякое всякое будут думать. То есть скил ничего иного, кроме как просто папка с инструкциями. Ну вот здесь у меня как раз шаблонная, да, там скрипты для исполнения, шаблончики, вложенные инструкции, общие инструкции. Всё. Вот весь скилл.

Так, давай пойдём по презе. Ну, в общем, суть такая, что в агентах вы можете модели задавать много-много разных ролей. Причём вы можете эти роли задавать и даже в полёте. То есть модель может сама напромтить, а кем ей нужно прикинуться. Давайте я сейчас вот такой код вам покажу. Так, сейчас поищу. Так, ну вот так вот. То есть, да, вы можете какие-то за предзаготовленные агенты иметь, да, там тестировщик, системный архитектор, там какой-то про программист, кодратор, а можете иметь что-то вот такое роли в системный промт, но кусочком. То есть вы можете запустить отдельный трейс, но у вас на лету сгенерится вот этот вот кусок системного промта. То есть он не заранее захардкожен. А вы можете сначала вам говорят, то есть, например, вот эту вот тулу, да, там tool specification, что ей говорят, у неё есть проти там, ну, reason - это просто, чтобы модель подумала, такая подставка, не это не играющей роли параметрами. Просто модели нужно, чтобы она подумала, дать ей пространство поразмышлять. Дальше роль, да, какая-то строка, дальше описание роль desption, да, там короткое два-три предложения summary, там вот пример там эксперт фастапи там с асинхронным питоном, бла-бла-бла, и задача. И дальше есть отдельная как бы функция рольгенератор промт, которая вот у него вот есть какие-то примеры промтов по ролям, что вот тебе дали такой-то name, такой-то desриption и вот ты там фигачишь.

Так, а никто не мешает вам написать это питоновский код, да? То есть возьмите в вашем клеагенте и напишите ему такую тулу. Нет, смотрите, когда вот логика, где она находится, на кли, на бэкэнде или где-то ещё, вы сами решаете в каком месте. Например, на гигакоде часть логика находится у нас на бэкэнде. То есть вот эта вот там тема со спецагентом, она у нас вот на на сервере, да? И он вам в полёте может понять, что ему нужен там промт, что я там спец по такой-то джаве, там такой-то такой-то, и он по месту поймёт, что он спец по такой-то джаве. Ну, вернее, скажем так, он сгенерит вот этот вот системный промт, подставит его в общий системный промт. И вот с этим системным промтом с входящей сдачей запустит свой трейс и его отработает, пока там submit solution прямо не сделал. Ну, просто вот у нас, например, сейчас сейчас так сделаем, пройдёт 2 месяца, у нас будет по-другому сделано, потому что это всё очень живое. Потом выйдет какой-нибудь следующего поколения модель, все будут там по-другому делать, и мы тут же по-другому переделаем. То есть скорость изменений, она довольно большая сейчас. То есть, условно говоря, с курсором я сейчас за 5 часов делаю объём там недельный, который раньше делал год назад без него. То есть сейчас я могу за 3 дня выдать месячный объём работы. Вот то, что я делал бы год назад месяц, сейчас я там за 3 дня зафигачу без потери качества. То есть скорость изменений, она дичайшая, большая стала. Вот поэтому и модели сейчас новые выходят, там и трейсы собираются. Ну то есть пройдёт полгода, китайцы выпустят что-то там или с конференции кто-то придёт какую-то фишку, мы замерим на бенчмарках, фигак, фигак, всё, всё стало по-другому. Да, я не скажу, как хорошо бы. Понимаете, здесь нет правды, есть возможности, есть инструменты делать всё, что угодно, как угодно, гибко. Напишите один системный пром, дайте одни тулы, вот так сработает. Дайте другой системный пром, дайте другие тулы, а в тулах там какие-нибудь лграфы, а в лонграфах опять что-нибудь или там дебаты ролевые. Оно по-другому сработает. То есть есть бесконечная гибкость вокруг вот этих вот пере смены масок. Сейчас у вас модель прикинулась тем-то, прикинулась тем-то, прикинулась тем-то. Но когда вы делаете всю эту свободу, вам всегда нужно помнить, что есть kwiш на VLM, и вам не хочется подменять общий системный промт. Ну то есть вы не можете взять и исправить что-то в системном промте на тридцатом шаге. Почему? Потому что если вы подменили что-то в системно проте на тридцатом шаге, то у вас Трейс-то стал другим в начальных векторах, и вам нужно на там в LM, на видеокарте пересчитать все вектора всего до этого. Поэтому агенты исполняются так: либо у вас какой-нибудь нграф с короткими итерациями, либо у вас цикл React, но вы никогда не не переопределяете то, что раньше. Вы только докидываете что-то в контекст, в пределах контекстного окна, чтобы у вас квкэш он не протухал, не не сгорал. Ну, то есть это может сейчас не все поймут, что я говорю, но если вы там делаете какие-то с лэмкой приколюхи на одидва, там три шага, да, не страшно, но когда вы делаете какие-то трейсы там на 50, там на 100 шагов, то вы, естественно, не хотите шевелить в начале ничего. Ни символа поменять нельзя. Потому что как только вы поменяли символов, поменялись вектора в трансформере, а все трансформеры вектора - это квадратичная сложность по вычислениям, и вы встряли там, упали по производительности. То есть всё это живёт, пока кэш жив, и поэтому вы только докидываете в контекст новое, новое, новое, новое. То есть поэтому и скилы не подменяют ничего в системном промте, а просто докидываются как результат чтения тулой. Ну прямо в контекст. То есть она запросила: "Дай мне такой-то скил те хлоп в контекст вывалился". И она уже, глядя на него, что-то там делает, глядя на предыдущий контекст, какие там файлы у неё были открыты, там ещё что-то.

Вот, коллеги, понятно? То есть у меня сейчас даже и нет цели вас научить агентастроению. То есть я не скажу, что я-то умею, да, там, что я мастер, то есть как бы, да, я умею клепать вот такие поделки довольно быстро, которые более-менее решают там околокодинговые задачи. Док вы обязаны сбрасывать периодически, иначе у вас контекстное окно переполнится и вы сломались. Ну либо вы просто отсекаете начало, да, и тогда вы у вас потеряли все квкэши. Поэтому правильная тактика такая: вы накапливаете контекстное окно, потом вы делаете какую-то суммаризацию, сжатия, заполнение регистров памяти, если они у вас есть в вашем агенте. То есть дампите всё полезное и запускаете новый трейс вот с этим новым осадком в виде знаний. Новые самари, новые какие-то артефакты, которые появились после суммаризации. И заново идёт новый новый новый трейс, накапливается. Когда он накапливается, у вас все квкши есть, оно летает там в 10 раз быстрее. Но потом, может, изобретут другой способ вычислений, но пока это так. Так что я хотел показать? Ну, то есть я хотел показать, что оно может в полёте вам вычислить роль и подставить её в системный промт и запустить новый трейс. Вот. Или если у вас какой-то ленграфовский пайплайн, то вы тоже можете вполне себе вот в этих вот нодах спокойно себе сначала вычислить нужный системный промт по месту, а потом его применить и идти дальше. такие вопросы меня спрашиваете, как будто я знаю что-то. Я ведь как и вы тоже что-то делаю и всё.

Что там у кого могут понадобиться изолировать? Смотрите, сейчас научных работ всяких выходит больше, чем времени на их осознание. То есть каждый день там по десяток полезных новых статей выходит, а ресурсов прочитать однад-три там статьи в месяц, не больше. Ну да, вот прямо буквально сегодня я делаю по работе примерно то же самое срм-режим. Вот есть система лёгкая контейнеризация, называется Bubble Rap. Bubble wraap. Ну, как бы лёгкий сндбоксинг на уровне Линукса. То есть вы даёте свою директорию, вы даёте там свой башик отдельный, и процесс у вас живёт вот в в своём маленьком баше, в своей директории и не может нагадить то, что у вас снаружи. Вот. То есть вот на бабблрэпе можно какие-то песошницы делать. Вот всё, всё, что можно не делать на уровне песошни. Ну, например, вот мы если работаем с какими-то, э, там у нас есть в Сбере задачи минорные баги закрывать, а, агентами, не людьми. Но чтобы закрывать минорные баги, мне не нужно выкачивать весь весь репозиторий, да, то есть есть условный там, ну, какой-то, да, неважно какой система управления контроля версии, да, там, например, GitHthub, да, там Bitbcket, что-то у него есть. MCP сервер. То есть делается MCP сервер. Дай мне ветку, дай мне файл, примени патч, запиши файл и всё. И мне не нужен снбоксинг. То есть я просто по MCP запрашиваю данные с поверхности у себя в агенте, там редактирую и как артефакт откладываю через MCP сервер, через туда. То есть мой агент, он просто декларирует: "Прочитай содержимое файло в такой-то ветке в репозитории, выкачай мне такой файл". Прочитай мне этот файл в контекстное окно, сгенерируй вот такой-то патч, примени этот патч к такому-то файлу, запиши комит с такимто сообщением. То есть LLM не выходит на уровень файловой системы, на уровень на уровень операции. То есть всё, что вот можно сделать вот так, мы стараемся сделать вот так. Но там, где это нельзя, нужно что-то скачать, там погонять тесты или ещё что-то, ну да, есть способы, ну, условно говоря, изолировать процессы в Линуксе. Я в Виндоусе не силён, в Линксе можно?

Так, ладно, давайте я дощёлкаю припрез и мы закончим. Что мы уже вот 2126, у нас регламент примерно полтора часа на занятие. Ну, в общем, можно разные промты подставлять. там киска, рыбка, дракон, Дед Мороз и моделька им представится. Вот дебаты агентов прикольная штука. Мы когда в Гигалигали делали анализ юридических ситуаций там в одной из задач и самое лучшее, что мы придумали - это сделали как раз дебаты юрист как бы и второй юрист. То есть первый юрист анализировал ситуацию, второй искал взяны в его позиции и задавал каверзные вопросы. И через там три-три итерации вот такого вот анализа получался хороший план анализа юриста, который можно было дальше декомпозировать на какие-то поисковые запросы и там улезать уже в справочно-правовую систему искать документы по этому поводу. То есть юристам нравилось, как оно работает. По сути, за них делает работу. С разных сторон смотрит, потом ищет решения там судов, потом как-то тоже их анализирует. В общем, дебаты агентов - это хорошо, но это всё стоит времени и денег, да? То есть, когда бизнес приходит, говорит: "Мне нужно, чтобы вот тут подсказка где-нибудь в суфлёре, в колл-центре вылезала за там 5 секунд, естественно, все эти истории не работают". Все эти истории работают в бэкграунде. Прилетела заявка, агент её вычитал в какой-то очереди, там свои 15 минут поработал, потом куда-то сложил. То есть всё вот это качество, оно меняется на компьютер, а компьютер требует времени. Вот поэтому парадигма бэкграунд агентов, она сейчас достаточно сильна. То есть предполагается, что какое-то событие там где-то произошло, агент его увидел, там получил, пошёл работать и асинхронно там через полчаса свой артефакт куда-то отложил. Поэтому и Open Clow, да, сейчас такой стал популярный. Это как раз вот такой автономный вычислитель, который способен долго работать над какой-то задачей, более-менее сам.

В общем, цикл React, ну, я вам его показал, да? То есть reasonн, то есть мы мыслим, мы генерируем тулу, тула генерирует нам observation наблюдения. Мы снова мыслим и снова вызываем следующую тулу. Вот. Причём, чтобы модель мыслила, можно подкидывать ей такие фейковые тулы, типа там рефлект, типа там создай заметку, типа запиши в память, типа прочитай из памяти, типа поапдейтни плану. То есть вы сами вот эти фейковые тулы для рининга ей, для вот этого соу подкидываете. И это позволяет агентам решать знания, задачи, выходящие за пределы знаний модели, да. Вот. Ну, формат вывода для React это вот как раз мысль, а дальше экшн, название и аргументы. Observation - это просто текстом результат тулы. Парсинг вывода, то есть вы вот вот эти аргументы парсите и запускаете исполняться. Вот что делать, если модель сгенерирован невалидный экшен? Ну, самое простое дать модели техническое сообщение юзера: "Эй, ты модель, дай мне валидный экшен". То есть у меня это прямо та так в коде есть. Там просто usе сообщение идёт. There is no appropriate tool call please send apprpropriate tool call. И модель честно исправляется.

Так, планирование внутри реакта. Ну вот, да, можно от одношагового к многошаговому делать. То есть вы можете заставить сначала модель написать ей какой-то там скилл, да, который скажет модели. Ты сначала модель напиши спецификацию, а потом к этой спецификации напиши план, а потом к этому плану вызови там субагентов исполнять элементы этого плана, глядя на какие-то артефакты. Модель в цикле React честно вам это сделает. Вопрос только в том, что вы на это потратите там 200 тактов общения. Запрос-ответ. Запрос-ответ. То есть вы можете напрямую дать задачу, сказать: "Реши". А можете сказать: "Напиши спеку". Напиши план, декомпозируй, вызови субагентов, провалидируй артефакты и отчёты субагентов. Вместо двадцати тактов будет 200 тактов. Но с вероятностью там процентов 80 будет результат лучше. Он будет более документированный, он будет более наблюдаемый, вот он будет, ну, более пригодный для вас, но за это вы заплатите там звонкой монетой. Ну, сейчас, да, основная тема - это замена как бы компьютера на результат. То есть вы уходите в длинные трейсы, вы уходите в бэкграунд процессы и в надежде, что оно там за полчаса родит то, что за там минуту не родит.

Вот какие альтернативы Реакту? Ну вот, ээ, хорошая тема - это либо, да? То есть, когда вы не с тулами работаете, а прямо говорите модель модель нафигач код, который решает задачу. То есть вот это вот паттерн. Ну и второе - это это нграф. Вот Apple модель смотрит на задачу, на окружение, затем пишет код, сама прямо пишет код. То есть нет тулы, а просто вот на код какой-то нафигачила, сходить в такую-то опишку или там тулы ваши прямо сркестровать в код. Вот код исполняется, модель смотрит на результат. Если цель достигнута, хорошо. Если нет, она снова пишет код. и запускае. Ну и да, за счёт того, что у вас есть длинные трейсы, модель может вполне себе самокорректироваться. То есть там что-то не получилось, пойду другим путём, зайду. Вот я тут тоже своего агента отлаживал, такой: "Дай-ка мне что-то". И опечатался. Вот. И модель такая ищет: "А этого нету". А у меня тула фч есть. Она такая: "Ага, пойду-ка я там поищу фигак там какой-то урл нашла". Ага, извлекла там оттуда какие-то ссылки. А, пойду-ка я там. И вот пошла она у меня бродить. И там 200 шагов она рыскала по интернету. Нашла у каких-то китайцев репозиторий, который примерно похож на то, что я делаю. Нашла мне артефакты оттуда притащила. Ну вот они это делают. Да только дай им волю.

Вот коринг - это как раз вызов тулов. Агент получает руки. Тул - это просто функция с именем, схема аргументов и описанием. Модель генерирует запрос на вызов инструмента. Ваш код парсит этот джисончик, исполняет и отдаёт модели обратно. И, собственно, MCP-серверы хороши тем, что они любой инструмент, любую апишку заворачивают вот в такой же протокол. То есть MCP - это прослойка между вашей апишкой и форматом вот этих GSON схем. То есть туда присылается в джисоне какая-то инструкция, она уже разбирается и накладывается на вашу опишку. Поэтому, когда там внутри Сбера кто-то к нам приходит, говорит: "Как нам интегрироваться туда-туда-то?" Первое, что я ему говорю: "Давай MCP сервер." Если MCP сервера нет, они говорят: "У нас есть а"И. Я говорю: "Нет, а не пойдёт, вы пишете MCP сервер." Что это означает? что на своей стороне они оборачивают опишку в приемлемый для меня э протокол обмена джисонами. Всё. То есть интеграцию получается они пишут сами. То есть за счёт вот этого снимается куча нагрузки с меня как там с вендера решения.

Так, to calling. Вот как раз jonх. Ну, jonх я вам показал, как они выглядят. Там есть метаданные инструменты, то есть там дескрипшены, дескрипшены полей. Вы можете какие-то примеры вставлять, как надо, как не надо. Вот. Ну и в промте у вас агент динамически получает этот список тулов. Можно, конечно, на каждый вызов от клиента подменять список тулов, но это зло, потому что как только вы подменили список тулов, он подменился в системном промте. Как только он подменился в системном промте, у вас протухли все квкши, вы стали там в 10 раз медленнее вычисляться на видеокарте. То есть вот беда ровно в этом. Это первая беда. Ну и вторая беда, что модель может штормить. У неё в контексте там куча вызовов тулов, на которые она уже получала ответы, а тут такой тулы нету, но она всё равно продолжит её по инерции вызывать, потому что она же она же не дура модель, она видела, что вот я это делал, я получаю ответ, это же не галлюцинация, вот у меня в трейсе это есть. Ну то есть вы получите кучу вот таких ошибочных мисколов, а вызывает стула, которой нету, просто потому что она там в трейсе есть. Поэтому так лучше не жонглировать, поэтому лучше делать как раз через субагентов. Например, там какой-нибудь субагент планеer, да, режим планирование, это просто режим, который не имеет тулов работы с полноценной файловой системой на редактирование. У него есть создание файлов только в сенбоксе, некоторой служебной папочке своей, а в проекте он не может создавать файлы. Вот весь режим планированный. Я могу читать, искать, но не могу писать. Вот, чтобы агент модель не рвалась в бой, а долго обсуждала, пока её не отпустят.

Так, э, ну ладно. Вот изоляция, да, это важна. Ну, из забавного, поскольку мы занимаемся агентостроением и там что-нибудь много, скачиваем какие-нибудь репозитории, проверяем там что-то, агентов запускаем. Как-то кто-то из агентов скачал какую-то уязвимость, там что-то запустил на системе, и нам одну из тестов, ну, они у нас в диком интернете, то есть не внутри контур, а просто откуда у нас есть свободный доступ в дикий интернет. Нам, да, один из агентов ломанул машину какой-то там китайский скрипт скачал. Ну, естественно, всё это быстро запалили, машину отформатировали, уже никто не пострадал. Но да, за агентами надо следить, дай им волю, они вам всё разнесут. Ну вот на Линуксе это делать удобно. Там есть куча инструментов типа namees, C groups, есть всякие там Docker in Docker, вот Bubble Wap, то есть, ну, есть. Поэтому не пишите агентов на винде, пишите их на Линуксе. Тогда у вас будет меньше проблем с оркестрацией и с инбоксингом.

Так вот, агенты как конечные автоматы. Ну вот вторая тема, да, это как раз ленграф, там где управляемый пайплайн. То есть когда у вас есть какая-нибудь конкретная инструкция, что вот надо делать вот по этой инструкции вот эти три шага, а потом туда-то, туда-то, то у вас вариантов два. Либо это в скил убрать, но либо это убрать в тулу, а внутри этой тулы будет лонграфовский пайплайн. Ну или просто запускать графовский пайплайн. Вот в LНграф вы также можете подключить любые апишки, любые MCP-серверы, но там вы уже как бы сами руками больше пишите, и вам MCP-то не нужен. Это вот для цикларе он больше нужен, когда вы можете всё что угодно себе докидывать. Там хотите поиск, хотите там погоду, хотите курсы валют, хотите там букинг, там бромирование чего-нибудь. Так вот, ну когда графы нужны, то есть для линейных задач цикл реакта достаточен, граф не нужен. И для слишком сложных задач тоже нграф недостаточен. То есть вот для задач, где вы имеете детерминированный флоу, то есть вот вы понимаете там какая логика ветвления должна быть, там нграф. Если это гибкая открытая задача или слишком простая задача, то там реакт. Основное так.

Так что ещё? А, ну вот, да, важный момент, что вам нужно дать какую-то тулу, просигнализировать, что агент что-то идёт. Он там что-то что-то не знает, что-то не находит, что-то недопонимает. То есть вы должны прямо в инструкции сказать, что когда что-то не понимаешь, там вызови к тулу там send или ask human или там обязательно вызывай сразу submit solution при неполном результате, если ты у тебя какие-то затруднения. То есть вы должны его проинструктировать, что сделать. Потому что если инструкции нету, модель она будет в цикле крутиться. Это же просто цикл Wild TR, и он будет там что-то делать, вам устанавливать на операционную систему что-нибудь, просто потому что он не так вас понял. Вот поэтому вы должны дать ему инструмент сообщить о провале, дать ему инструкцию, как сообщить о провале. Вот, то есть сделать этот процесс удобным. То есть прямо планировать вот это поведение, когда модель не знает, что она должна делать. То есть как бы это пря прямо целевая ветка планирования.

Вот Goner RPC - это как раз то, что внутри MCP серверов. То есть у вас всё превращается в один запрос на одну ручку. То есть любая пишка превращается в одну ручку, где у вас есть метод, это название функции, параAMS - это аргументы, ну и какой-то айдишник запроса. Всё. А дальше на стороне MCP сервера уже это разбирается и отправляется там какие-то свои апишки, в какие-то свои функции, там ещё во что-то превращается. Вот почему это так. Ну потому что это LLM native протокол. То есть рест он каждый раз разный. JRPC вообще бинарный, там три каких-то компиляция. Json RPC вот просто дсончик. Модель сказала: "Вызови тота". выкинули ему одну ручку вызови то-то, а там ручка сама разобралась, как это превратить в работу с данными или с чем-то и вернула ответ. Вот тебе данные или вот тебе отчёт, потому что я что-то создала там изменить. Вот вызов jon PC метод web search, параметры там query liмиit 5, а IDшник запроса такой-то. Ну и ответ, собственно, будет поисковая выдача. Вот так вот, например, тот же Dagd Go заворачивается в MCP сервер. То есть это один endpint, который на хоступорту принимает джисоны такого вида, дальше уже превращает их свои манипуляции. То есть MCP - это унифицированный интерфейс для доступа агентов к данным. Ну, типа как USB, Type-C для вот телефонов. Втыкаешь в любое место, работает везде одинаково. Ну, поэтому неважно.

Вот про открытый мир, да? То есть DGD go search - это хорошо и бесплатно, но под нагрузкой он не держит. Есть спец спецсерверы типа Tavли, типа Serпер, где вы можете прямо за

денежку купить удобный и friendly доступ к поиску. То есть Тавили, он оборачивается и над там Гуглом, и там и другими провайдерами поиска. То есть покупайте целевое апи у, в общем, провайдеров. Парсить самим не получится. Множество сайтов там защищаются. И в общем, есть те, кто умеют и сайты запрашивать, конкретные URL делать хорошо и поиск предоставлять. Эта экосистема уже появилась.

Вот про память агента. Ну, вот основное — это MD файлы, иногда векторные, но чаще MD, потому что просто они дешевле и проще. Ну, про RAG вы, наверное, и так знаете, что можно подставлять. Есть агентик RAG, когда модель сама будет в рефлексии смотреть, она всё ответила или или не всё. Вот здесь вот такой вот агентик RAG. То есть она посмотрела, что-то мне не хватает данных, пойду поищу по такому запросу. Нашла, я не нашла, там то-то переформулировала запрос, ещё походила, поискала. Это вот агент RAG, да.

Ну и вот следующая приколюха — это AA протокол. Тоже обмен JSON-ками, то есть как как MCP, только вы не тулу запрашиваете, а агента запрашиваете. То есть оно будет многотактовое общение. То есть вы кинули точно так же там один endpoint, который скажет: "У меня есть вот такие-то ручки, эта ручка такой-то агент, эта ручка такой-то агент, эта ручка такой-то агент". И вы на эту ручку, ну, как бы на URL кидаете опять же JSON-схему в JSON RPC, что агент там такой-то, данные такие, это я от тебя то-то жду. А он вам обращает, возвращает JSON-чик, что задача у меня такая-то, там так такой-то, вот тебе ответ или, а я от тебя жду такое-то уточнение. Ну и вы снова можете, опять же, у вас есть тула обратиться туда, и вы обращаетесь туда в JSON RPC, говорите: "Агент такой-то, вот тебе там ответ на мой вопрос". И тоже JSON-чиками перекидываются друг между дружкой. То есть тула она однотактовая, ей задали вопрос, она дала ответ. AA — это то же самое, как вызов тулов с JSON-ками, только оно может быть многотактовое. Ты меня спросил, а я у тебя уточнил, а ты мне доуточнил, а я тебе ещё раз доуточнил или а я тебе вот прислал половину, а за второй половиной приходи там через там попозже, когда я досчитаю. Ну то есть частичные ответы. Ну то есть такое вот размазывание тулов на многошаговые вещи.

Так, ну вот Open Clow тот самый, это тот же цикл React, запущенный в отдельной виртуальной машине, у которой есть поиск по интернету, доступ на файловую систему, цикл RLE, ну то есть вот всё, что мы сегодня обсуждали, это всё на максималках оно у него у него есть. Ну и люди этим как-то пользуются. Я сам не пользуюсь, мне не надо. Ну кто-то пользуется. То есть цикл React, встроены инструменты поиска, работы с кодом, работа с файлами, извлечение ссылок с интернета, то есть просто веб-феч. Ну и такая же своя модульная память на MD-файлах. Вот, наверное, там есть что-то и векторное и MD. Я глубоко не копал, поэтому не знаю. У Константина Крестникова есть цикл вебинаров про Open Clow. Я ещё не смотрел, можете поискать. В общем доступе где-то есть, их можно найти.

Вот следующая тема суперская — это вот как раз кодинговые агенты. То есть нам надо учиться с ними работать, надо с ними много нудно разговаривать. Там я много нудно разговариваю с роботами. Ну, в общем, вот я тут много нудно разговариваю. Это вот пока у меня трейсы реализации спики. Потом был длинный трейс, где мы там эту спеку обсуждали с этим роботом. Я какие-то краевые кейсы с ним обсуждаю. Говорю: "Давай-ка мы endpoint-ы переименуем. Должна содержать там то-то, то-то. Я бы убрал это туда-то, туда-то". И вот так я с ним это всё, все, все эти спеки переколбашиваю. Много общаюсь с роботами. Вот. Но эта хрень реально ускоряет. То есть я стал реально за 3 дня выдавать месячный объём. Мне страшно, что будет через 2 года, когда я стану не нужен этой прослойке. То есть по пока я ещё нужен ей, чтобы с ней пообсуждать. То есть она так вкладывает. У меня пока как бы, ну, кругозора у неё больше, но понимание конкретной задачи, фокусировка у меня лучше. Но через пару лет у неё станет уже всё хорошо. Я стану не нужен. Я уже потихонечку думаю, кем я стану, когда стану не нужен программированием.

Так, навыки skills. Ну, скилы я вам показал. Это расширяемый интерфейс агента. То есть это не системный промпт, но это такие инструкции, подгружаемые в контекст. Не только инструкции, как бы такие древовидные инструкции, то есть инструкции с подинструкциями, уточняющими какие-то нюансы, с артефактами, шаблонами, там, тимплейтами, чем-то. И с исполняемыми скилами. То есть там дёрни за ручку, оно куда-то в базу данных слазит, какой-то результат принесёт.

Вот мультиагентные системы. Зачем несколько? Ну, во-первых, про декомпозиции ответственностей, да? У вас может быть агент на там одной операционной системе, да, там на на ну автоматизированной системе. Один там за Bitbucket, другой за Jira, и просто за них отвечают разные команды, и они разные агенты могут быть просто потому, что так организационно удобно. Вот. Или, например, у вас могут быть агентные системы просто потому, что у вас есть вендор конкретного процесса, и он знает, что мой процесс нужно делать так, у него пайплайн на DAG. Сначала по этой инструкции мы генерим то, потом то, потом то. Если нет, то мы возвращаемся на какой-то шаг, там уточняем вот у него процесс. И он является вендором своего процесса. И а у вас агент какой-то общий, и он просто знает, что за таким нужно ходить вот туда. То есть, да, ну, как вот зачем в компаниях разные отделы, эти логисты, эти закупщики, там каждый за своё.

Вот паттерны, ну, основные паттерны — это либо иерархия, то есть главный делегирует подзадачи, собирает, синтезирует результаты. Вот. Либо какие-то дебаты, когда они там делают, либо коллаборация, когда вы им раздали какие-то задачи, они там каждый покубаторил, принёс результаты, посмотрели, снова раздали задачи. Ну, то есть как бы такая ну, ну, ладно, по сути, то, что я делал, то, что работал, это либо иерархия, либо дебаты.

Вот про рынок — это так блажь из каких-то общих паттернов. Ну да, есть агент судья, да, называется LLM Judge. Ну вот LLM Judge работает не всегда хорошо, поэтому надо как надо как-то это проверять. То есть агенты могут пока гнать лажу, но потом они перестанут гнать лажу. Готовьтесь. Модели поумнеют. Агенты поумнеют, потому что оно как этот, как как вампир, да? Чем больше людей оно убило, тем больше душ оно впитало, тем сильнее оно стало, да? То есть чем на более высокий уровень оно заскочило, тем больше мы этим воспользовались, тем больше трейсов, мы этого создали, значит, тем больше оно впитало в себя эти способности и такая положительная обратная связь. То есть чем чем больше трейсов глубоких, умных мы нагенерили, а мы активно это генерим, их там нафильтровали на там SFT, на RL, тем умнее модель сделали. Пока лимита в обучении ещё ещё нету, модели умнеют.

Что я ещё? Ну вот по оценке Gartner агенты решают 80% типовых запросов без участия человека. Ну вот в какой сфере уж не знаю. Ну да. В общем, решают во всяких там службах поддержки разных банков агенты решают 80% всех обращений. Это правда. Ну я за Сбер ничего не скажу. Я не работаю служб поддержки, поэтому не знаю. Вот для тех долга, да, то есть у нас есть планы итератизировать разработку на какой-то значимый процент. И по тем же там статьям, как эти описали, как они с кодексом работают, да, модель анализирует репозитории, вешает там тикеты на техдолг, и это достаточно эффективный про процесс. Вот. Ну, про compliance audit, да, проверять всякие документы по чек-листам, там, по всяким условиям сделок, это тоже легко и не сложно. Там на DAG пишется.

Вот что ждёт ближайшие 2-3 года. Ну, в общем, рост автономности. Агенты будут ставить и корректировать цели без явного промта. Стандартизация основная — это MCP, A2A протоколы. Вот они сейчас станут протоколами, как вот HTTP для веба. Ну и агенты будут встраиваться в существующие бизнес-процессы как цифровые сотрудники. Да, это правда. Вот. Ну, собственно, а что нам с этим делать? Не знаю, я не знаю. Я с ужасом и любопытством жду, когда новое поколение разработчиков, которые будут выпускаться из университетов, будут ничего не уметь. Старые тоже разучатся, потому что они будут только с роботами спеки обсуждать. И потом кодинг станет, не знаю, как как молитвы мы будем читать. В общем, люди разучатся кодить, думать. Ну всё, да, это последний слайд. Агент — это цель плюс рассуждение плюс действие плюс память. Ну я вам показал про цель, показал про рассуждение, показал про действия, показал про память, ну условно показал, а не просто умный чат. React и LLM-кодинг — это базовые механизмы. Вот. Ну вот как бы архитектура определяет надёжность. Вы сами решаете, какие тулы, вы сами решаете, чем подпереть этот React. То есть скафолдинга, ну вот это вот обвязки здесь больше, чем самой способности модели, то есть промтинг, тулы, всякие тулы рефлексии и вот вот это всё оно решает. Вот стандарты MCP и AA. Вот и изоляция там как бы процессов исполнения, да? То есть бойтесь агентов, которые вылезли в баш, подруб правами, они вам всё отпилят, всех вас продадут, всё будет майнить крипту и всё такое.

Так, мне нужно дальше рассказать про курс. Так, ну да, что дальше? В общем, экспериментируйте LangGraph, Open Clow, MCP серверы. В общем, делайте фигню, пока вы можете. Если у вас есть вопросы, пишите в чат. Вот. А я начинаю рекламировать курсы NLP Advanced. Подписывайтесь на курс NLP Advanced, покупайте его. Это, наверное, ещё будет полезно в ближайшие пару лет, пока бигтехи будут нанимать инженеров. Потом, возможно, заменят на чугунков. Поэтому я уже не знаю, мир настолько поменялся, что я не знаю, что рекламировать. Но, по крайней мере, учиться — это интересно. А когда вы занесли деньги за обучение, это даже и как повышает вашу мотивацию и ответственность. Ну и в любом случае вы можете пообщаться с умными людьми, со своими коллегами, кто пришёл на курс. Ну то есть это это хороший способ потратить деньги не на что-то там, не на фисташки с пивом. Вот преподаватели курса, ну вот коллеги, кто преподаёт. Я сейчас, к сожалению, активно не преподаю, потому что работа съедает меня с головой. Вот. Но иногда я там кого-нибудь подменяю или беру там одну лекцию на курсе. Вот. Всё, наверное, это всё, что я хотел сегодня рассказать, показать. Так, надо, чтобы вы ещё заполнили обратную связь. Сейчас я Аглана, у меня есть опрос. Вот ссылка на опрос. Заполните, пожалуйста, вопрос. Сейчас почитаю вопросы ваши в чате. Так. Ой, про Сбер клешня я не знаю. Сбер настолько большой, что я из своего окопа там вижу только пули, которые в меня пролетают. Да, Human in the loop в задачах от бизнеса просто обязателен. Прямо обязательно настолько, что почти во всех процессах пока написано, что агент сначала планирует, потом делает какой-то запрос на подтверждение, а потом он это делает, а потом оно уходит на верификацию к кожаному. И ближайший год в больших компаниях это точно будет так, потому что никто не хочет подставиться. Ну, то есть безопасность и надёжность в больших компаниях, она выше, чем как бы, ну, как бы чем любая рисковая фигня. Вот. То есть Human in the loop в Сбере был, есть и будет, есть ещё несколько лет.

Вот про метрики — это отдельный разговор. Это бенчмаркинг. То есть, например, у нас в команде Гигода команда бенчмаркеров, она даже больше, чем команда агентостроителей. Вот. Ну, там есть разные SVE бенчи, там есть своё мера от Сбера, хороший как бы бенчмарк. Ну, то есть это способ что-то объективно замерять. Если вы не замеряете, вы не управляете. То есть вы не можете сказать, что, например, там YaGpt лучше, чем Quentin или что там Quentin лучше, чем там ещё что-то, да, чем Kimi. Ну, потому что если вы не измеряете, всё это на глазок, какой-то рандом и вкусовщина. То есть уборщице нравится Вася, а там Васе нравится там Коля и всё что угодно. Вот про метрики. Метрики есть бизнесовые, да? Это удовлетворённость пользователей, насколько они там вам ругаются. Есть метрики бизнесовые типа DAU, да, естественно. Вот. А есть метрики академические — это как раз бенчмарки и верификация на тех или иных классах задач, на тех или иных там языках программирования, например.

Так, да, LLM-ки хороши в работе с Legacy кодом абсолютно, но если они, естественно, это сильная модель в агентском режиме, потому что от чего она прочитает файлы, она вам, то есть смотри, вопрос, что вы с ней будете делать. То есть вы скажете: "LLM-ка, вот куча говнокода, вот задача, иди решай". Ну она что-то сделает. Если вы скажете: "Уважаемая LLM-ка, вот у меня куча говнокод, давай его проанализируем, давай напишем спецификацию, давай опишем флоу данных, давай вытащим контракты на эти данные и потратите там 2 часа, условно говоря, на парное программирование с этой моделью на документирование вашего кода". То потом, имея все эти доки, спеки, контракты и прочее, вы скажете: "А, пожалуйста, вот такую фичу надо сделать". Если вот такую багу поправить, давай поищем, где она. Не поправим, а поищем. И вы поищете, вы найдёте, а потом вы попробуете её поправить в этом найденном месте. Если она поправилась, всё хорошо. То есть работа с Legacy кодом — это работа с как бы документированием этого кода в первую очередь. Пишите спеки, пишите доки, там документируйте, комментируйте этот код, пишите там docstrings к нему. То есть, когда вы код вот так вот так вот хорошо обмосолили, он превращается из Legacy говна в какую-то понятную структуру, и агенты с ней работают. Просто если раньше нужно было для этого там брать какого-нибудь человека, отправлять ему 3 месяца этим заниматься, потом он перегорал и увольнялся и убрали следующего и вот этот бесконечный цикл, то агент это сделает просто за там пару-тройку дней раскомментируют, раздокументируют. То есть куча проблем сейчас просто решается такими современными кодинг-агентами.

Так, всякие GigaCode-ы складывать. Так, подождите, с ними смотрится айсберг для вайпкодинга. Ну, GigaCode использовать можно. Проблема GigaCode, она в недостаточности как бы ресурсов, да, поскольку за GigaCode пока никто не берёт деньги, то слишком много видеокарт нам не выделяют для инференса. А раз не выделяют видеокарт много, оно подтормаживает. То есть GigaCode хорош, им можно пользоваться, и люди им пользуются. Пользуйтесь GigaCode. Сейчас ещё клик- клик клиента выпустят open-source-ного к к GigaCode. Ну то есть мы условно мы отстаём от фронтир моделей, да, но у нас и ресурсов меньше, и денег мы не берём. Вот. Но в целом за бесплатно прекраснейший вариант. То есть, да, просто если CodeLlama код вас как бы за за, не знаю, 15 минут вы сделаете то, что надо, то с GigaCode вы там 45 минут будете доки спеки писать. Ну, то есть чуть чуть-чуть больше нужно скафолдинга, чтобы он работал.

Так, там есть вопрос, кем? Я не знаю, к чему он. Сейчас не соображу. Нет, не только DAG. То есть используют DAG, если на GigaChat, и циклы React, если это на GigaCode. А тулы GigaCode спокойно вызывают тулы, в которых GigaChat и с циклом на на на DAG на на исполняемом.

Так, ну если люди гонят лажу, почему LLM не будет это делать? Ээ, ну вот здесь всё-таки всё-таки не всё так однозначно. LLM может не гнать лажу, если вы сделаете систему, минимизирующую как бы гон этой лажей. Те, кто писал на ассемблере, убьют программирование. Ну нет, не убьют. Да, все будут программировать на естественном языке. Ещё как-то, я не знаю, что будет. Всё будет интересно. Буддисты говорят, что всё будет как-то. Я полностью с ними согласен. И обретёт сознание? Нет. И не может обрести сознание, потому что это просто вычислительный алгоритм предсказания следующего токена, да. Поэтому всё, что он делает, он генерирует тексты. Вы можете в этих текстах говорить, что о текст сознанием, но нет. Понимаете, проблема и не в том, что он приобретёт сознание. Проблема и в том, что к нему прикрутят пулемёт, а он будет в JSON генерить имя расстреливаемого, дату расстреливаемого и время расстреливаемого. То есть вот единственная проблема, что эта штука способна стрелять, если к ней прикрутить пулемёт. Ну, в любом образном смысле. Она вам создаст бактериологическое оружие, она вам создаст там фейки, она сгенерит там deepfake спорно. Оно, ну, это просто хрень, алгоритм, который имитирует картинки, имитирует тексты, символьные артефакты. А мы этими символьными артефактами можем делать всё, что захотим. То есть какую систему мы создадим, такая и будет. Ну и вторая тема опасная, что да, мы потеряем когнитивные навыки. Раньше нужно было вдумываться в код, там 3 часа парсить его глазами и создавать какую-то ментальную карту в голове, а теперь эта мышца не будет качаться. Вот. А это будет за меня делать там какой-нибудь CodeLlama или GigaCode от Сбера. А я разучусь держать такую когнитивную нагрузку, то есть там 3 часа вчитываться в LEG [ __ ] и всё. И просто потеряю навык. Ну это нормально. Значит, так. Так, так и будет.

Ссылку на призу. Так, а что записывать? Что я записываю призу? Ну, призу, ладно, скину призу. Только не знаю, куда её скинуть и как её скинуть. Так. Оху-ху-ху-ху. Ну, поскольку я веду для коллеги своего небольшой бложек качты хобби, краткий филиал этой призы я закатил вот сюда. Ну вот это примерно то, что я сегодня рассказывал. То есть я просто закатил эту призу в Quentin и сказал: "Уважаемый Quentin, давай мне статью делать по этой призе". Ну вот ровно то, что мы сегодня и обсуждали. Я вам скинул призу.

Бизнес-люди не ставят, не используют бенчи. Бизнес-люди зовут разработчика, говорят: "Эй, у тебя лоб высокий, давай, чтобы всё красиво было. Если не будет красиво через квартал, я тебе там премию годовую не дам. А не будет красиво к концу года я тебя на мороз выставлю". А дальше уже умные люди используют бенчи. То есть бизнес говорит, где бабки и почему так долго.

Где взять бесплатный доступ к GigaCode? На GigaCode есть же сайт gigacode.ru. Да. Значит, через Gitverse, в общем, регистрируетесь на Gitverse, получаете там ключик к GigaCode. Сейчас у GigaCode есть JetBrains, то есть для PyCharm плагин, для JetBrains, для VS Code плагин, и клишный клиент выйдет, ну, вот где-то по итогу первого квартала, потому что такая цель есть. Ну, и у меня есть свой там лишний клиент GigaCode, который я сегодня вам показывал. от отладочный тестовый. Может быть, я спрошу боссов и его там выложить. Ну не прямо в Сбер будет промоутить, а просто там я куда-то его выложу. Ну просто не знаю, знакомым давать скидывать. Вот так что не знаю, может быть два клик клиента к GigaCode официальный и такой-то от fun-community.

Так, коллеги, нет Telegram-канала у меня нету. У меня есть вот этот вот бложик, который я веду для товарища, и есть мой личный маленький сайтик, в котором я иногда выкладываю как раз записи каких-нибудь видюшек, которые я где-то когда-нибудь провёл и имею право их выложить. Что-то не открывается. Ну, в общем, там, если что, даже мой Telegram написан или email. Ну, ну, но мне лучше не пишите, потому что у меня очень много работы, и я не найду времени что-то для вас сделать. Ладно, всем всего доброго. Тогда до свидания. Да прибудут с нами добрые агенты. Всем пока.