📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

LangGraph + MCP в Cursor IDE: создаем автономного агента для глубокого анализа Google Trends

OTUS IT Онлайн - образование1:46:11

Transcription

Привет, привет, ребята. Привет. Так, шарю экран и начнём. Меня слышно? Видно, видно и слышно. Ага, супер. Спасибо, спасибо. Сейчас я пошарю, представлюсь. Угу, угу. Так, если честно, платформа для меня новая. Мы обычно в MTS Link проводим, поэтому я сейчас немножко так старт share. Start брока. Стартше. Да, мне нужен sharriнг экрана. En screen. Да, вот теперь вы должны видеть мой экран. Вот я его даже раскрою побольше. Всё, да, я вижу. Видите экран? Привет. Привет. Меня зовут Артём, фамилия Рева. Я в IT лет 20, наверное, уже сегодня. А, и преподаю вто сейчас. Сегодня посмотрим на нграф плюс MCP, как это всё в курсоре работает. И я прямо кайфанул, ребята, правда. Я готовился к этой лекции, я подключил SQL Lite МCшку. Я смотрел с курсором вместе делал вот этот вот проект, который вы сейчас увидите. И я в восторге. Я думаю, вы тоже будете сейчас в восторге, когда увидите, насколько всё, насколько всё круто. Значит, сейчас я буду искать свой презентер. Э, вот он, мой презентер. Да. Ура.

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

Так, нра. Да, вот он граф. И вот он чат кошка жену, как вариант. Так, видно, да? Видно, значит, э- или илистрокся, короче, да, шутки шутками, но, ну, в общем, единственное, что я вас прошу, вы напишите потом, пожалуйста, как оно вообще, потому что мы смотрим и пытаемся понять, что лучше сделать, что хуже, как там, как там чего. И мы вам даём знания, время, проводим всё это бесплатно. Если понравилось, если что, ну, напишите, как минимум. Не обязательно на сам курс приходить. Ну, пишите, как оно там, как прошло, не прошло. Значит, по поводу Отуса. Старая компания, здоровая компания, много, очень много проводит и открытых вебинаров, как этот. Сегодня, по-моему, их несколько проходит, и они буквально ежедневно идут вот эти открытые вебинары. Зазываем вас всех на курсы. У нас авторские курсы. Это значит, что здесь впецы, типа меня, а люди, которые вот прямо реально много проработали в IT. И, насколько я помню, сейчас около четырёх, да, курсы все живые, абсолютно все живые. А около 400 преподавателей было, если я не ошибаюсь. Вот поэтому, а, продолжаю, продолжаю рекламировать. Да, давайте вот как вас сейчас 40 человек, и я могу помереть, если я буду смотреть чат. А если вы не будете писать в чат, то вы упустите знатную, хорошую возможность пообщаться с профессионалами, потому что каждый из вас спец, сюда не пришли люди. А вот поэтому если вопрос ко мне, вы прямо пишите восклицательными знаками вопрос. Хорошо, я тогда прочитаю. А вещи вот сейчас все вот написал с нуля к нейром. Я тогда буду игнорировать, хорошо? Потому что, ну, просто не успею.

Так, дальше пошла реклама. А у нас образовательная лицензия, поэтому будет бумажка шикарная, красивая. Видите, там с печатью будет обалденная вообще. Можно повесить куда-нибудь на стену там будете вот выступать где-нибудь. И в общем, не знаю, какие она ещё, ну, что-то даёт она. Вот эти бумажка, она наверняка очень классная и успешна. и плюс 50 очков, когда будете устраиваться куда-нибудь. Рыночек, рыночек сейчас не супер. Не супер. Значит, по поводу курсов. У нас сейчас много по AI курсов развиваются, но, в принципе, основы - это айтишные курсы по программированию, по управлению, по аналитике и прочее, прочее, прочее. Это а аишка - это вот буквально, может, полгода, по-моему, назад или чуть чуть больше, может быть, полгода назад начали. Вот вот этот конкретно курс, на который я вас зазываю. Сейчас у нас пока что пять человек, включая меня. А, возможно, кто-то ещё добавится из преподавателей. Посмотрим. У нас это, ну, такая гибкая курс. Курс рассчитан на программистов. Курс для тех, кто хочет делать агентов. Не просто ими пользоваться, а вот именно делать. Мы посмотрим вот этот же вот ланграф, о котором я сейчас буду рассказывать. Мы посмотрим протоколы, ээ, которые работают, в том числе посмотрим вот последний гугловский APP, да, AP2, по-моему, называется. Ну вот для оплаты. Сейчас два протокола для оплаты. конкурирует Open AI и Google. Не знаю, может быть, Openi тоже включим, но я думаю, что вот, ээ, значит, по поводу курса, что именно создавать. Мы рассмотрим нграф, мы рассмотрим N8N, я всё время путаю, как его правильно произносить. И в целом посмотрим, как вот эту вот инженерию выстраивать, как вот выстраивать вот этот вот цикл. Когда агент запрашивает у модели, модель ему отвечает, он он ей либо к ней, либо он возвращается. Вот эти вот вещи, кто там перенаправляет эти запросы? Это сейчас невероятно удивительная, интересная история. Для тех, кто пользуется, например, э Cагентами, у меня лично подписка на Gemini. И вот Джимини буквально недавно они впендюрили прямо локально мне установили 1 млрд, по-моему, моделька. Она у меня локально смотрит на вопрос и разруливает. Либо его в этот самый, либо в Gemini Pro в дорогой направлять, либо в Gemini FL. Локально поставили. Вот вот экономия токенов для того, чтобы экономить денежки. Для того, чтобы экономить наши с вами денежки. вот эти вот мелкие-мелкие вещи, там, как следить за окошком, за этим контекстом и прочее, прочее. Вот, вот с этим будем разбираться на курсе. А программа вся свежая, э только испеклась. И более того, сейчас ещё нету ни одного, вот прямо в данный момент, когда мы с вами говорим, нет ещё ни одного готового вебинара. Они все пекутся вот прям -э прямо онлайн, потому что индустрия, сами видите, индустрия суровая, невероятно суровая.

Мы О'кей, теперь а поводу так, что интерет вас вести курсы, кроме на основной работе в продолжении предыдущего комментария. Ну что на этом так А мотивирует вести курсы? Слушайте, я с психологом со своим разбирался по этому поводу. Там, ну, куча всего понамешано. Ну, куча, правда. Я, а, ещё работаю на основную, да, на ещё ещё работаю. Это у нас все работают. Это не знаю, все, не все, но в принципе это же всё по вечерам, поэтому все преподаватели, они приходят, попьют чаю, садятся и продолжают. Поэтому, ну, я не знаю, может быть, кто-то есть и флтайм. А-а, на этом то, что рассказываете уже на практике своей в работе применяете. Я запускаю эти самые свои педпроекты. Один из моих личных петпроектов. Вот они на этом самом, на Google Chrome Store выложены. Один из прикольный, который я сейчас развиваю. Может быть, он принесёт деньги одежду на себя примерять. Ходишь по онлайн-магазинам Wberies, загрузил своё селфи и кликнул правой кнопочкой на товар, и тебе нанобана всё это сшивает вместе. Вот поэтому, да, использую. Так, ссылки на петпроекты я сейчас себе выпишу. Я это не готовил, и я боюсь, что я сейчас начну отвлекаться и прочее, прочее. Ссылки я себе запишу. Вот так. Ссылки. Значит, варианта два. Либо, если я забуду, то тогда эти ссылки будут в, по-моему, вам придёт ээ презенташка и вам придёт эт ссылочки какие-то. Ну, после этого. Вот. Поэтому, э, да, ну, честно говоря, не не это самое, не готов. Ну, и там код такой, ребята, ну не знаю, кто из вас хорошие пецдпроекты пишет, тем хвала и респект. У меня вот, а, поэтому, да, применяю, э, да, агентов применяю и агентов делаю, и их использую. Локально у меня стоят и антигравити, и курсор, и НСРF, и Kро. О'кей. А и, ну вот не спрашивал других преподавателей. Кстати, интересный вопрос. Я себе запишу, кто чего использует. Использует в real life. Угу. Прошу. Интересный вопрос.

Значит, по поводу ланграфа. Кто из вас вообще встречался с ланграфом, кто на нём хоть что-то делал? Есть такие из вас? А кто впервые слышит? Делал Денис. Да. О, респект. О, Сергей, вас много чего интересного ждёт сегодня. Супер, супер. Тогда смотрите, Денис, можете меня прожаривать аккуратненько там. Э, я не назову себя спецом нграф, но но покажу, что смогу, то покажу сегодня. Поэтому смотрите, нраф - это произвольное от библиотеки LНchaй. Ребята когда-то сделали на коленке LН chain, в которой они у могут собирать ноды, которые идут одна за одной. Эта нода выполнила это, передала следующее, выполнила это, передала следующее и так далее, и так далее, и так далее. Обычная простая штука, но они придумали вот в этот фреймворк, в эту библиотеку, добавить подключение ко всем провайдерам, ко всем AI провайдерам и стандартизировать их. Таким образом ты пишешь там подключение к модели, ну, я сейчас покажу, у меня там есть, и тебя не интересует, как там под капотом какой апи у коп или контропикуты или ещё кому-то. Они это всё стандартизировали. Плюс они стандартизировали передачу данных между вот этими вот нодами. И получилась очень такая востребованная, интересная библиотека. А дальше они сказали, что мы сделаем граф. У нас будет не линейная, а вот ланграф она почему, вот видите, этот самый я правый показываю, у меня здесь монитор второй, я на него смотрю и показываю. Они сделали эту штуку граф, и они ввели такие такие вещи, что мы сделаем что вы просто в графе Сейчас я расскажу про ноду. Сейчас всё будет, ребята, всё будет. А в этом графе у нас есть ветвление, и ты просто указываешь там условия ветвления и всё. Эта штука дальше переходит по графам. Ветвление у тебя может быть через иишку, в том числе, вот как у меня тут реализовано. Сейчас посмотрим. Вот сейчас расскажу. Нет, нода - это функция. Но - это вот она что-то одно выполняет. Так вот, у ландграфа, э, поче, почему они в принципе от чейна перешли? Потому что, ну, не устраивал чейн, нельзя было эту самую, м, сложную логику сделать. И там, э, вот эти вот прыжки назад, они э замучили всех. Так, если не разбираюсь, но слышал про это примерно NNграф. Nen - это они похожи, они делают одно и то же, нограф - это библиотека, которую вы импортируете в в ноду и в Python. А N2N - это сервер, который крутится. Вы можете его поднять сами. Вот. Но это это интерфейс, в котором вы таскаете руками. Nathan, точно, Nathan. Я что-то призна Nat, да. Хорошо. Значит, дальше у лонграфа есть, э, ну, наверное, локальный аналог фреймворк для создания агентов. Вот так. Значит, есть есть три кита у лонграфа, три основы. Это но, это функции, которые что-то вот ээ выполняют. Это - это вот передача э От кого к кому поплывут данные. Это тоже мы указываем в коде. Ну сейчас покажу. Просто пишешь edge отсюда туда, вот такой вот GE или там conditional edge отсюда сюда, но с условием. Вот, значит, но - это функции, которые что-то делают, а GE - это переходы. И, наконец, всё это дело э в состоянии. Они нам дают способ вести а состояние держать. И причём опять же они это стандартизировали. Ты можешь состояние в рейде сдержать, ты можешь его в эту самую в SQL-базу скидывать. Ты можешь что хочешь, можешь просто его в памяти держать, если у тебя сервер крутится. Вот я сегодня состоянием, ну, так не очень буду показывать, но в целом имейте в виду, что красота вообще фреймворка в том, что он стандартизировал. Вы просто работаете вот с этими понятиями, а под капотом какой он там пошёл модели, как там у него этот ветвление устроено или где он стейт хранит. Это это он скрывает, и вам остаётся только вот логику эту продумывать. Вот на лонграфе можно сделать агента, чтобы он с нашими LM работал. Алиса Гигачат, слушайте, там у него 300-500.000 миллионов этих самых коннекторов к разным моделям, поэтому конкретно GPT и гигачат, ну, Яндекс GPT гигача я не смотрел, но, скорее всего, комьюнити уже что-то выкинуло, скорее всего. Или можно на коленке там этот коннектор тоже самому сделать, и всё заработает. Поэтому, поэтому так. Э, по поводу гигачата и Яндекс GPT, наверное, можно отдельно очень долго холеварить. Я пока остановлюсь. Вот как всё это выглядит. М, конечный автомат. Ну, на, блин, хорошее словосочетание, надо его изучить. Конечный автомат. Конечный автомат. Смотрите, вот как выглядит ээ простейшая архитектура. Вот у нас есть нода. под под нодами у нас с вами statт. State перерастёт. Вот он месседжи держит. Сначала у него был x1, в конце у него будет x1, x2, x и так далее. Это у нас state, а между, ну, логика перетекает от одной ноды к другой. Здесь у нас линейные показаны и соединяют их эти эджи, но может быть и витвистые. Вот это в двух словах, да, state доступен для любой ноды. Значит, по поводу стейта. Ну, я сейчас говорю о питоне, хотя в принципе там п ланграф идёт ээ в двух вариантах: для аноды и для питона. Ну вот да, typeдикт - это питоновская. Значит, он типизирован, у него есть редюсеры, и у него удобно сделано то, что ты partial updates поционну добавляешь данные. Там у тебя просто стоит этот самый ad функция, и ты кидаешь в кидаешь в этот стейт стренгу какую-то, и он её туда докидывает просто в в свой словарик. Вот. А, и потом, ну, потом всё это всем доступно. Значит, но, они же узлы. А всегда большая проблема, когда пишут то ли на английском но писать, то ли на русском. Короче, это это чистые функции. Но - это функция. Подал, она что-то выполнила и вернула. Вот, собственно говоря, и, э, вот, собственно говоря, и всё. Бывают такие, бывают сякие. Значит, теперь поводу мм соединения. Аэ, что такое updatт? Что такое updates? Где? А, ну, апдейты стейта возвращают какие-то. А, некоч. Так. А, хорошо. А есть два путя, есть два варианта связывать ноды. Либо у тебя прямой конекшн, прямой GE, либо у тебя этот самый conditional. Они сейчас увидите в этом самом будем разбирать код, увидите. Там прям супер просто всё сделано. Вот. И позволяет такие вещи, да, как и человека можно вставлять между этими самыми между нодами. У нас здесь не будет Humano, но в целом благодаря тому, что этот сохраняется, можно надолго прямо прерывать. Решение принимает lm или ваш код. Это как? На основе чего выбор, кто принимает решение. Смотрите, у нас conditional edge - это это тоже функция, в которую что-то приходит и она отвечает. Вот у меня здесь в этом самом в примере, который я буду показывать, у меня там ходят параметры внутри эта функция смотрит эти параметры, отправляет в модельку, моделька ей что-то отвечает, функция возвращает то, что ответила модель, и дальше уже в зависимости от этого ответа ветвица дальше этот самый. То есть имеется в виду, что вы можете внутрь функции впендюрить обращение к lм, и у вас фактически будет лм принимать решение. А можете просто ифами всё пообложить и и всё. Вот что имеется в виду. Ну да, ну да, вы да, безусловно. А как иначе? Ну вы можете напрямую возвращать её JС, конечно. Вот. А я не стал сегодня включать Human in the loop, но в принципе всё это благодаря тому, что у нас state persistent, всё это всё реально и у нас хранятся вот эти ID м стейта. Поэтому поэтому всё это ну достаточно просто реализовывается. Вот. Ну и, э, просто в конце концов реклама этого нграф, за который мне не платят почему-то, в том, что он действительно, хотя вот я сейчас я хотел сказать, что он готов к промышленной разработке, но я его сам не включал в промышленную разработку, поэтому, Но, в принципе, я на 100% уверен, что в проде он работает. Надо просто копать, кто где кто где внедрял. У меня просто кейса не было. Вот. И ещё одна прикольная фишка в том, что можно ответы в том, что ответы можно стримить. А вы вы же видели, когда вы в чате GPT пишете и вам пошёл этот самый ответ мпум-пум-пумпумпум помаленьку. Это же не не сервер придумывает для того, чтобы там ощущения с живым человеком создать, а это реально модель, она достраивает эти токены и вам выплёвывает один за одним всё эти токены. И то же самое можно здесь сделать. Сейчас увидите, там у меня этот самый м стримингом сделанный, и прямо будет видно, что как она пошла по мысль ланграфа, как она пошла по графам, по этим вот, э, интерфейс, я к нему сейчас подойду. Я просто хотел немножко так, а, сплит, сплит, сплит. Как так-то? Ё-моё, как я так умудрился? Так, new t split. Да, сепара, да, separate views. Да, вот смотрите, а вот здесь у нас будет с вами запрос, потом пойдёт от сервера ответ, и мы увидим с вами, как этот ответ будет плясать вот здесь между нодами. Вот к этому сейчас ещё вернёмся. Так, и я потерял свою презенташку. Я потерял свой презентор. Два монитора мало. Вот, значит, ну, понятно, да, по поводу стриминга.

Теперь перехожу, прежде чем перейти к разбору вот этого самого алгоритма, ещё в двух словах об MCP. Ну, наверное, все использовали, да? Давайте скажите мне, кто ещё не вставил себе MCP, кто ещё не впендюрил свой курсор MCP? Есть такие? Красота, красота. Всё супер, я рад, есть кому рассказывать. Смотрите, сейчас я вам покажу. Я открываю курсор, я вам покажу магию, если смогу. Так, ну-ка перетаскивай. Стоп, стоп, стоп. Сейчас я перетащу на этот экран курсор. А, курсор. Курсор. Сейчас я вам покажу магию, а потом перейдём, посмотрим теорию. Значит, вот он курсор. А в курсоре у меня стоит MCP, этот самый SQL Lite. У меня здесь есть SQL Lite. Скажите пару, я скажу пару слов про MCP. Прямо даже не пару слов про MCP, прямо скажу. Хочу магию показать. Вот смотрите, вот у меня стоит прям SQL Lite здесь стоит. Вот она сам файлик SQL DB. Вот они здесь данные какие-то. Теперь магия. Значит, смотрите, у меня, э, оговорюсь, у меня большая проблема с VPN. Сейчас я сижу без ВПН, чтобы побыстрее с вами разговаривать, но без ВПН у меня курсор сильно лагает. Поэтому давайте вот как я сейчас пытаюсь магию. Если магия не сработает, я включу VPN. Если с ВПНом я останусь здесь, ну, в смысле, не выбьет меня, то супер. Если выбьет меня, то я вернусь. Значит, итак, поехали. Я делаю магию. Магия состоит в том, что у меня курсор подключен к этой базе данных, и я с ним могу разговаривать. Посмотри. Посмотри, сколько записей в таблице. Какие вообще есть таблицы? Так, теперь смотрим, что у меня с с этим самым. Сработает ли у меня без VPN? Скорее всего, нет. Судя по тому, что О, поехали. Да. Ура. Вот он, смотрите, вот он обнаружил, что у меня есть табличка. Дальше он вызвал этот самый, проверил, какие есть таблички. Курсор работает без их подписки. Да, у него там какие-то, по-моему, есть эти самые э лимиты, но лафа, ребят, заканчивается. Готовьте свои денежки. Я не думаю, что кто-то ещё вытянет вообще бесплатно. Лама недавно. Здорово. Сейчас расскажу. Сейчас расскажу. Это я хочу загреть ваш интерес. Вот смотрите, вот он нашёл findest record. Вот он. Вот он. ID восемнадцатое создано тогда-то. Kword вот у него. Ну, ну вот он пошёл. Вот что-то нашёл. А теперь показал магию. Теперь рассказываю два-три слова про сам MCP. Значит, MCP модель котек протокол. Его придумала компания Antropic в конце 24 года и подхватила вся индустрия. Причём мало того, что подхватили, сейчас уже даже развили. Компания Open AI развила этот протокол. Чуть позже об этом. Так вот, что он даёт? Он детерминирует, ребята, он просто описывает, как сервер показывает свои ресурсы ЛМК. Сервер экспортирует JСН, определённого плана Джейсона и всё. И в этом Джейсоне описано, что сервер умеет делать, какие ему параметры нужны, э, что это вообще за параметры. И вот этот Jon, который сервер отдал, его берёт агент, ну вот, в частности, мой курсор там или ещё какой-то агент, берёт этот JС, кладёт себе в системный промт, и каждый раз, когда он отправляет модели, вот я написал сейчас: "Найди мне последнюю, найди мне последнюю строчку". Курсор взял вот этот вот мой промт. присобачил к нему всё, что у него есть в этом самом в системном промте, и отдал модели. Модель видит мой промпт, начинает изучать, что у неё есть в системном промте. В системном промте она видит, что есть вариант вызвать вот такой-то тул. Ему нужны вот такие параметры, он вернёт вот тот. И тогда модель говорит: "О'кей", возвращает агенту: "Вызови вот то-то, то-то". Агент вызывает, он берёт параметры, которые ему дала модель, отправляет жесончик обратно этому серверу. MCP- это отдельный сервер. Он может быть, э, локально стоять, может стоять в этом самом в облаке где-то, это неважно. Главное, что между ними есть такое общение.

Теперь я вам то же самое покажу на видео. А вот здесь на этом примере у меня 1 2 3 4четыре действующих лица. А сразу оговорюсь, наверное, неправильно было бы описывать, что агент - это что-то отдельное от модели. Здесь я, наверное, ошибся, но тем не менее. Вот здесь usер - это я. Вот здесь MCP сервер. В моём примере MCP сервер - это просто сервер типа этого самого Security, который принимает Sonor Cub. Вот Son он он есть в виде MCP сервера. Можно ему отправлять код, он проверяет и возвращает. Агент - это, правильнее сказать, это клиент, MCP- клиент. Курсорчик мой и моделька. Ну вот, ээ, в зависимости от того, какая у вас модель выбрана. Вот здесь у меня стоит авто. Ну вот он сам каждый раз выбирает, в какую модель отправить. Ну неважно, в какую-то модель отправляет. Они всё равно все стейс, все модели, они ничего не помнят. И что в системном промте отправил, то и есть. Модель сама по себе ничего не помнит. Так вопрос. Как в курсор посмотреть детальное выполнение запросов к агенту? как бы в дем-режиме, как формируется прям tofing ээ, да, в стандартном не отображается полностью хочет больше контроля. Например, курсор при вызове должен как-то передать ей данные вызов в серверах, которые можно вызывать. Да, смотрите, честно говоря, точно сам не копался, но есть вот это вот Ctrl G. Вот здесь у неё есть debug консоль или output. Во, да, output, по-моему. А где же? Во вововово. И вот здесь в output куча всяких разных вариантов логов. Поэтому Ctrl G - это вы переходите вот в эту вот в нижнюю панель. Оно и и укода, по-моему, точно так же, и практически у всех. И здесь А почему у меня кто кто кто у меня перекрыл этот output? А вот он. Out. И здесь есть этот самый м вот такая вот выпадающая менюшка. Что что аутпутить, что смотреть? Вот возвращаюсь. А, и я потерял свою мысль, на чём я остановился. Так, остановился я на том, что хочу показать, как работает. Значит, первое, фаза Discovery. Давайте я, наверное, у этого видео есть звук. Скажите, пожалуйста, когда я включаю, вы звук слышите? Звук не слышно. Ну супер. Хорошо. Значит, первая фаза Discoverovery это только когда я запустил курсор или, ну, будем на курсоре говорить. Только-только ты его запустил, он первым делом что делает? Идёт в настройки своих MCP серверов. Вот сейчас я показываю настройки. Settings, курсо. Вот здесь у него tools and MCP. И вот здесь у него идут все эти настройки установленных MCPшек. Первое, что он делает, когда включается фазу Discovery, он обращается ко всем этим MCP серверам, которые есть, с каждым обсуждает, какие у него есть тулы. Вот он первый. Дай мне тулы. Обычный RPC. Ой, ээ, Jon RPC, ребята. Вот он, видите, примерно я его тут, э, указал. Вот он указывает прямо какой метод. Дай мне список тулов. MCP сервер на фазе Discovery подключает это и возвращает ему список тулов. О'кей. Дальше следующая фаза. Ой, я, наверное, это самое пере Следующая фаза. Вот он вернулся вернул список

тулов. Окей. С этого момента у нас в системном промте MCP-сервера где находятся? Локально или на серверах компании? Могут так, могут так. Они в двух вариантах бывают.

А вот с этого момента, а Tools - это функции, которые есть у MCP сервера. Например, MCP сервер может возвращать в список таблиц. Я возвращаюсь в курсор, перехожу вот в этот вот в настроечку. Вот оно SQL Lite MCP сервер, который только что сейчас эту всю магию и делал. Вот его тулы. Вернуть этот самый информацию про базу данных, выполнить какой-то quy выдать список таблиц. Вот смотрите, вот он тула называется list tables. Вот её э наименование. List all user tables in SQL database. Исключая системные. У этого тула нету параметров.

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

Вот возвращаюсь к видео. Прошли первую, включили курсор. Он сделал на Discovery обратился ко всем. Все сервера ему вернули, э, что у них есть, какие есть тулы. Дальше ждём. Дальше вот оно, видите, это самое печатает. Это я, юзер, печатаю. Вот я ему напечатал в чате. Ну, в данном случае я напечатал там просканируй мне мой код на наличие секретов в коде. Сейчас я писал, что верни мне таблицы. Ну, можно что хочешь написать. Пишешь промт. Этот промт попадает к курсору. И курсор этот промт вместе с историей сообщений, вместе с описанием тулов всю эту бодягу берёт и отправляет модели. А пошло модели, всё она прожёвывает. А без слова вопроса я тогда читать не буду, ребят. модель прожёвывает и отправляет в ответе. Она говорит, если ко мне вопрос, пишите слово вопрос. Модель в ответе говорит: "Вызови вот вот в данном случае этот самый м вызови тулу, которая называется Scan Secrets." Обратите внимание, я отматываю назад на начало Discovery. Вот он нам в спецификации. Вот видите, name Scan Secrets это туза, которая есть у MCP сервера. Он её на фазе Discoverovery отдал, она лежит и она ушла вместе, вот вместе с запросом ушла Лэмке. ЛМКА в ответе говорит вот типа да в данном случае курсор, да, идешка - это курсор. Модель отвечает: "Вызови вот это вот". Ну, она тоже в виде Джейсона, наверное, там всё присылает, но это уже вот это как раз то, кто что вы спрашивали что там под капотом у них происходит.

Вот пришло и он всё, что вот вот здесь локально у меня в курсоре никакого ума уже нету, никакой модели нету, никто не нагружает ваш локальный комп. А видео сделано с помощью remotion remotion. Я напишу сейчас загуглите. Обалденная штука. Emotion а да ну вообще ваша задача спрашивать моя отвечать и отвлекаюсь это я ещё не зрелый как лектор наверное так вот модель решает что вызвать вот она ему отправила дальше вот здесь локально никакого ума нету пришёл стандартизированный ответ модели в нём прямо прописано прямо словами вызвать этот самый ээ Scan Secrets. И всё, что делает наш, ну, агент, правильнее сказать, MCP-клиент, он просто отправляет то, что ответила модель, упаковывает в правильный Jon MCP сервера. Вот он ему отправляет. Вот он здесь, видите, это Jon RPC. Вот он отправил ему. Бум. Теперь там Теперь дальше магия происходит на стороне MCP сервера. В нашем случае у меня был MCP сервер SQL Lite. Он обрабатывал запрос там, верните мне таблицы или выполни. Это всё в данном случае MCP сервер. Представим, что это Sonor Cub. Ему там прилетел этот самый Scan Secrets и в качестве аргументов, как он там файлы ему либо бинарниками отправит, либо этим самыми. Ну, в общем, он отправит ему Scan Secrets и в аргументах отправит, ну, наверное, сами файлы уже отправит или что-то.

Так, вопрос. Модель так. Агент - это равно курсор плюс модель, да? А курсор - это харнес для модели, правильно? Нет, не совсем. Харнесом мы называем то, я сейчас боюсь, смотрите, нету британской энциклопедии, в которой расписано слово харнес. Нету. В Википедии, скорее всего, будет Харнес, но разные компании, разные спецы на Ютубе, они это слово по-разному описывают. Переводится как это, как упряжка. И это действительно упряжка. В Харнес входит, какие у нас есть MCP, какие у нас есть скилы, какие у нас есть рулы. Всё, чем мы укрепляем знания этого самого агента. Курсор не А, да, курсор не курсор. Курсор не курсор. А так отправили агента, отправил, правильнее сказать MCP- клиент в составе агента, отправил запрос в этот самый в MCP сервер, передал ему нужные параметры все. И вот он тот отвечает тоже в виде Jсончика отвечает: "Вот у вас там critical AVS K found где-то там у вас found пришло пришёл ответ. Клиент, MCP клиент отправляет этот ответ модели. Это всё происходит behind the под капотом всё это происходит. Это вот я отправил и сижу жду, пока у меня там крутится. Вот это вот всё происходит".

Вот он отправил модели. И модель такая: "Ну да, надо это самое отозвать AVS ключ". И такая: "Ну, типа всё, вот, вот это отправляй уже э человеку. Всё." И вот он мне в чате отдельно уже пишет дальше уже, как там устроен курсор Gemini, CLI, Open Code Kiro или неважно кто. Полезут они сами ваши управлять, напишут тебе в чате или ещё как-то. Это неважно. Главное, что вот какой-то, ну, какой-то модель прислала ему вариант. Дальше вот что там они как, как решит агент локального уже, либо мне просто в чате напишет, либо сам поправит. Вот. Вот так выглядит простой а цикл. Слово забыл, простой цикл. Продолжаем вопрос. Артёма агент это равно курсор и он пользуется в M как мозгом. Ну да, MCP-сервером как памятью. Ну, наверное, да. Да, можно и так сказать. М, честно говоря, я боюсь сейчас что-то ляпнуть и сказать: "Агент - это то, харнес - это это". Потому что, ну, сами видите, индустрия супер жёстко. развивается и много игроков, каждый что-то что-то стандартизируют. Килы MCP стандартизировали. Спасибо большое. А слово агент, ну, мы считаем, что да, агент - это плюс вот её какие-то способы взаимодействия с миром. Вот так. Это значит по MCP в двух словах. Возвращаюсь. Я свой презентор потерял, не потерял. Вот он мой презентер.

Так, э, если ко мне, пишите слово вопрос. Остальное я игнорирую. Итого получается, что у клиента, а, у MCP клиента, в данном случае, у моего курсора, я сейчас опять к нему вернусь и покажу, сколько у меня там этих самых стоит MCP. серверов. Вот у меня MCP сервер, который умеет слайды создавать. Вот Фигма у меня отключена. Можно Фигму подключать. Даёшь этот самый ID этого самого элемента из Фигмы. Он вытащит его и реализует тебе прямо это самое Reactкод тебе выдаст. Контекст, ну, в общем, их много, много разных MCP серверов, ребят. Э-э, контекст предоставляет, эээ, библиотеке одна из прикольных вещей Chrome Def Tools. Не буду показывать сейчас, но в двух словах. Вы можете написать своему агенту: "Открой такую-то страничку", нажми на ней там кнопку логин и посмотри, что в консоли происходит. И ваш агент свяжется с Хромом, выполнит там в нетворке либо в консоли у браузера. и будет будет знать, и это всё у агента будет в памяти. Обалденно, просто супер, просто супер. Вот. Ну и таких вариантов много. Сейчас уже практически каждый пень имеет свой MCP-сервер. Ээ вот таким образом возвращаюсь. Сейчас я отвечу. Сейчас пока у меня мысль здесь. Я отвечу. Возвращаюсь к презентажке. Таким образом, мой MCP-клиент, в данном случае курсор, у него, видите, вот как у осьминога есть, и он как осьминог не знает, что делает та или или эта нога. Он отправил задание, получил результат и всё. И, кстати, кстати, в животном мире у осьминогов у них реально вот весь головной мозг, он по этим по щупальцам распределён. Реально, это вот не шучу. Поэтому он может одновременно разными щупальцами здесь камешек захватить, здесь рыбку. и прочее, прочее. Он одновременно всеми щупальцами, потому что у каждого щупальца свой.

Вот так вопрос. Chrome defols отдельная библиотека или есть уже реализова это реализованный MCP сервер, который, я не помню, где он крутится, локально или но он как-то, короче, связывается с этим э с хромом. И у хрома есть специальные там они пишут, что Chrome, короче, экспозит а этот самый, э, порт. через который можно этим хромом управлять. И вот у тебя отдельный этот MCP сервер, он подключается к хрому вот по этому порту. И поэтому они говорят, что вот если ты типа идёшь по этому пути, имей в виду, что у тебя у Хрома будет открытый порт, которым можно будет управлять. И в этом случае там Chrome даже пишет, ругается, что вот он у меня открытый порт, имейте в виду. Вот. Вот так оно всё устроено. То есть ещё раз, кто участвует? Host - это экзешник, ну, в терминах Windows, это какой-то софт. И у этого софта есть функция, библиотека, часть его, клиент, который может общаться по вот этому MCP протоколу, может формировать эти джесоны, разбирать их и связыва, ну, складывать там куда-то в себе память хоста, память свою в контекстное окно или неважно куда. И есть MCP-сервер, он может по HTTP, э, отдельно висеть. в сети, а может локально стоять и по этому самому вот опять боюсь неправильно прочитать stdio прямо локально его ставишь. И здесь тоже огромные на целую много лекций вопрос о безопасности. Во-первых, ээ сейчас отвечу на вопрос по поводу безопасности. Во-первых, если вы ставите себе локально какой-то MCP- сервер, имейте в виду, вы ставите чужой софт и с какими там привилегиями вы его поставили. Это первое. Второе. Имейте в виду, вы отправляете запрос чужому серверу и что он там вернёт вашему агенту, какие там у него будут эти самые промнъекции или ещё что? Все слышали эту самую историю, как чувак этот OpenC, OpenC эту клешню запустил на сервере, подключил к нему свою все свои ресурсы. Утром проснулся, ему все эти самые грохнули, все письма его грохнули, потому что у тебя приходит запрос твоему агенту, агент его читает, и что он там, что он там сделает, какие ему ресурсы доступны. В общем, это отдельная лекция, можно сюда, просто имейте в виду, это всё может обернуться. Вот пока что максимум, что я слышал, это из прикольных историй прямо на Редите. Я сам читал, что у чувака интернет-магазин. Он установил туда этот он к интернету, к интернет-магазину подключил чатбота, и кто-то с этим чатботом болтал, болтал, болтал, болтал. Короче, его на скидку раскрутил там то ли 80%, то ли 90% скидку какую-то. И это реально кейс, потому что человек приходит к интернет-магазину, типа, вот мне бот дал 90% скидку, будьте любезны. Ну и там разбирали юристы, но вроде это самое отбился этот чувак. Вот. А кто-то клиш не уставил и Openк и подключал свои у кого-то secrТ утянули. Потому что ты подключил клешню ко всему, к чему можно и нельзя, и у тебя клешня общается с кем-то по А вот всё.

Теперь перехожу к вопросам. Так вопрос. Host тире cloudдиктоп на презентации это аналог и дада даклод desktop может тоже хостом выступать абсолютно и этот самый кодекс и всё что хочешь дакод и дальше по списку. Так, дальше слова вопрос нету. Я еду дальше.

Теперь, теперь я хочу показать, что я из этого из всего собрал. А, дисклеймер, дело в том, что есть MCP сервера на для Google Trends. Почему я всё это написал в в объявлении в рекламе? Потому что я лично, я подключил себе платный этот самый APIF MCP сервер, поигрался с ним, и я решил, что Google Trends он всем открыт. А оказывается Google Trends они ещё вообще в Alpha даже. IP IP Google Trends ещё в Alpha. Двух словах, Google Trends. Что такое? Это ээ сейчас это немножко в стороне от лекции. Если вдруг кто не знает, есть такая штука Google, да, который можно написать, что сейчас в тренде, и он тебе скажет, что сейчас вот А и курсор я напишу курсор. Так, тема или usеer интерфейс код эдиit Iitor. Да, вот код вот они всплески интереса к нему за последние 24 часа. по Нидерландам. У меня сейчас вот эти самые Нидерланды, поэтому он смотрит. За последние 24 часа были два всплеска курсору по Нидерланду. Выбираю World Wide. Выбираю за последние там м ну три 3 месяца. Вот так вот по миру скачет. Это не абсолютные цифры. Это вот как-то внутри себя аэ приводит вот как к какому-то параметру вот как количест ну насколько люди интересуют. Причём это не то, что там вот кто-то слово курсор написал, это Google реально понимает, о чём речь, что человек ищет. Код edдиitр он ищет или этот самый э курсор Windows, как его рисовать или прочее. Поэтому в этом красота. И теперь, а, я здесь ввожу wiorf. Worf, а, либо спорт, либо topic, либо soft company. Мм, вот Company, давай. Ух, какой слабый. Может быть, потому что неправильно я выбрал. Ну и давайте Kро от Амазона сравним. Э, рыбка Kirв амропик. Ну вот, да, топик K. А и сравним кто у нас ещё S-код. S-код всё, да? Вот она. Softv. Вот. Вот здесь уже более-менее. Это, кстати, интересно эти самые выплески. Короче, не вдаваясь дальше в детали, Google Trends позволяет посмотреть, насколько людям интересно. А дальше вот он, видите, он показывает, что одновременно с этим люди ищут. Э, те, кто искал вот курсор Kiro Visual Visual Studio, вот что они одновременно с этим ищут. А с этим же вот слово аи, видите, оно пошло вниз на 6%. На 30% курсор код прибавился на 60 о клодом люди начали интересоваться. Так вот, я не знаю, почему как сюда попал Walmart, но видите, у Walmartта брекаут - это значит вообще всплеск, просто невероятный всплеск, больше там 5.000%. Не знаю, наверное, потому что у меня вот, может быть, слово Кира, я зря сюда приплёк. Как-то может по-другому надо, по-умному. И вот он здесь показывает курсор Acquisition Space X. Во, смотрите, насколько люди заинтересовались тем, что слышали, да? 60 млрд SpaceX выкупает курсор за 60 млрд. Для сравнения, у нас Газпром, по-моему, он ещё когда торговался на западных площадках, он под 60 млрд стоил. А Яндекс, по-моему, в районе 30 млрд. Теньков, когда ещё торговался, он в районе 9 млрд стоил весь. Это я просто к тому цифры, цифры вот люди open, ну и так далее. Это это Google Trends. Теперь, что было бы круто, это взять и подключить этот Google Trends себе в сафтину, чтобы ты вот здесь вот пишешь что-то, а тебе кто-то дальше агент запрашивал этот этот текст у Google Тренса, смотрел бы там у него аномалии вот эти вот, видели, всплески, там, выплески, смотрел бы, что там рядом ещё есть, и сам бы потом шёл и искал Я вот, например, когда по курсу разбирался, я смотрел, почему я сейчас курсор, курсор, курсор и написано курсор, потому что курсор невероятно невероятно популярен, когда люди вообще девелоперы, когда говорят о AI, разработка AI, как правило, здесь рядом слово курсор стоит, поэтому поэтому курсор, курсор, курсор. Так вот, и круто было бы всё это автоматизировать через тот же MCP сервер. Вот идея. А, вот такая идея софта. И вот в этом софте я поставил себе четыре ноды. Первая, которая смотрит тренды, потом этот самый, а, смотрим аномалию. Потом у нас маркетинговый стратег маркетинговый, он вот имея уже на руках все эти данные, дальше у него конitional этот самый. Сейчас посмотрим. Помните, я говорил, есть, как его, conditional эти ветвления. Вот здесь оно вот так вот нарисовано, но по правильно ему по алгоритмам надо будет нарисовать этим ромбиком. Вот он, видите, может либо обратно на refать и и ещё погуглить, либо уже отдать на конечную верификацию автомату, который будет финальное решение выдавать. Скажу сразу, само по себе, софт он пока что он меня не взлетел, потому что у меня то 403, то 429 там этот самый дедоOS у меня возвращается. Поэтому смотрим на это всё просто как на идею. Вот. А покажу ещё раз то же самое, только в виде диаграммы. Рмеade диаграммой все пользуетесь? Есть ещё кто не пользовался Mermмеade диаграммами? Смотрите, а по поводу Mermмеate диаграммы, если если вдруг кто не знает, вот она вот так вот выглядит. В ней описываются это просто способ описания диаграмм. Так вот, что я сделал, да, ну вот курсор умеет прямо здесь отрисовывать. По-моему, больше никто не умеет, кстати. Видите, здесь mdфайл, вот у него эти самые три апострофа, и стоит слово merмей. И он умеет ээ вот он, видите, прямо вот так вот умеет отрисовывать. Что я сделал? Я взял весь свой код, весь этот питоновский скрипт, закинул в модельку и сказал: "Сделай мне по этому коду, напиши мне вот как там этот самый ланграф, как течёт, как течёт река Ланграф. Вот он мне написал, вот она. А вот это уже, ребята, реально по коду сделано. Вот у нас есть нода resarcher, с которой всё начинается. Дальше всё это поступает в анализ. Э после анализа стратегист, вот стратег вот он-то как раз и отправляет в лэмку запрос, и лэмка ему реально отвечает. У меня здесь вшит этот самый ключик Джемини реально отвечает. От ответил. Ответы передаёт в виде джейсона, по-моему, я не помню, ну, в виде этого type, ну, в виде переменной какой-то передаёт в эту, э, функция shoot continue, которая подключена вот как он находится conditional. conditional graph conditional conditional edge condition у него стоит если should resarch true то возвращаемся ещё поресёчам если нет то переходим дальше к верифаеру и выдаём результаты человеку теперь А, закрываю. Возвращаюсь в У меня реализовант. Мм, я сейчас смотрю эту самую свою подсказочку как, ну, по своей подсказочку, короче, свою. Значит, реализован стейт, который один держит в себе все эти переходы. Давайте я вам сейчас сейчас немножко покажу этот питоновский. Ссылка на презентацию будет, да, вам придёт этот самый ээ на почту придёт потом ссылка на запись презентации. А, кстати, хорошо. Идём сейчас 21:05. Как не приходит? Пишите этим самым тогда. Мм, приходит, приходит, должна прийти. Пишите методистам. Ссылка. Так, погодите. Ну, ссылка на А, господи, на презентацию. Блин, извините меня, я перепутал. Да, чёрт знает, не помню я. Она будет где-то или нет, не помню. А что вам, что вам в этой презентации? Там ну картинки и картинки. Ладно. А-э, значит, у у нашего графа есть, э-э, state, вот он, вот он весь, э, все эти ноды и весь этот граф, вот оно и всё описано тут, в принципе, немного. Ой, как он мне Ну ладно, я не отрефакторил, каюсь. А, видите, он накидал всё в один файл. Ну и ладно. А сейчас с вами сейчас с вами разберём. Я только хотел показать вот эту conditional, как ээ насколько просто этот Ой, а кондиition вот у меня намного раньше я я потерялся и запутался. Я хотел показать, насколько просто сделан conditional витпление. Вот она. Вот она. Вот видите, здесь функция шут. А, да, это всё ИДешка писала. Ну, мы вместе. Кто-то из нас обсуждал, что хочет, кто-то исполнял. Ну вот так вот распределили немножко наши усилия. Так вот она шут. Возвращаюсь в этот самый. Вот она функция shoot continue. Всё, что она возвращает, она вернёт куда перекидывать. Здесь у меня просто, видите, либо такая, либо такой литерал. М, а вот ина, вот он этот conditional edge, как выполнен. Очень супер просто. Откуда придёт проверка, э-э, что вызвать и дальше куда пойти. Если вернули слово resarcher, мы тогда пойдём на узел, который называется resarcher. Возвращаюсь к диаграмме. Вот она у нас conditional. Вот. Вот если true, вот он на resarcher пошёл. Возвращаюсь обратно в код. А если вернули слово verifier, то мы пойдём на узел, который называется verifiму. Вот здесь эти самые единственное, что стрелочки еле-еле еле-еле эти стрелочки, блин, видны. Я так и не смог цвет стрелочек поменять. Вот он, видите? Либо он на verifire пойдёт, либо на заново запрашивать. Так, закрываю. Возвращаюсь в презентацию. Где моя? Да, вот она, презентация. Значит, state. Вот у меня тут есть agent state. Сейчас к нему чуть позже вернёмся, в котором, собственно говоря, и хранится всё. Всё, что значит начинается всё с того, что вот мы в этот в Agent State мы запихиваем туда ноды, запихиваем тудажи и компилируем. Давайте я вам сейчас покажу state граф. Возвращаюсь в код. Возвращаюсь вот сюда. Где-то у меня тут был вот он. Вот прямо здесь. Смотрите, вот я создают граф. Я просто создаю ноды. Я даю название ноды и пишу функцию так 668. Запомнил. Ctrl F. Вот она, эта функция. Вот функция. Чистая функция. Всё. Вот она. А, кстати, обязательно должны быть чистые функции. А, накидываю в свой граф четыре ноды. Накидываю между ними связи. От старта мы идём к ресчеру. От ресчера мы пошли ээ к детектору. От детектора к стратегисту. Дальше у нас этот самый ээ стратегисту. Стратегу стратегисту. Дальше у нас стоит conditional условие, в котором указано, смотрите, от стратега мы это условие, ну, у него один вход только от стратега. А что в качестве условий? Это вот вот эта вот функция shoot continue. А вот её результат вот либо вот этот, либо вот этот. Он ведёт либо на эту ноду, либо вот на эту ноду. И всё. И вот последняя нода у нас. А, да, вот у нас связь есть прямая связь ноды, которая называется verifire и окончание работы. Всё. Вот он. Вот он весь граф. Вот он весь граф. Вот так. Теперь, э, возвращаюсь опять в презентацию. Вот так. Ээ всё. добавили, скомпилировали и запустили там invoc где-то, по-моему, раньше, то ли дальше, то ли inвок, то ли run, как-то так оно будет называться. Так вот, с чего всё начинается, что мы запускаем вот эту вот runниш агент. А у меня висит в Питоне этот самый астфастапи, по- он называется, да, который вот слушает входящие запросы. у него висит возвращаюсь в код, возвращаюсь в питон. Вот у меня питон из двух файлов состоит. Вот он main. Вот он сидит, слушает эти самые м как их? Да дада, да, да. Функция. Сейчас я сейчас я вернусь. Э, да, вот он resarch. Вот она у меня точка входа. Вот он всё, что делает generator, вот он где-то здесь запускает, запускает всю работу. Ниш, где где же тут этот самый нишагент нишагент. Что-то такое здесь будет сейчас. Сейчас, сейчас, сейчас, сейчас, сейчас, сейчас. Так, вот она наша точка входа. Вот она. Resarch. Вот он input. Мы заполняем. Это то, что прилетело из веб-приложения. Дальше пошёл трай и пошли для Вот они. А, да, да, да, вот они. Мы вы выполнили ноду. Вот он результат. Payload для для агентов. И вот на не пошла э верификация. Значит, здесь я ещё добавил 0,5 задержку, чтобы хоть как-то было видно, что он крутится-то. Так, из какой функции вызывает собственный lm? В каком виде lm передаются данные, получены из MCP сервера? Значит, смотрите. MCP сервер - это отдельно это он у меня в курсоре в дизаignта, в раймтайме здесь MCP сервера я не внедрял. Это можно сделать, но я просто не стал этого делать. Теперь давайте посмотрим, где у нас вызывается, по-моему, Стратег вызывает. Вот он маркеттек. Так, по контролю не переходит. Ctrl F. Так. Вот он marкеттек. Давайте на него посмотрим. Во-первых, мы полсекунды спим, значит, проверяем. Проверяем. Вот он кто. Вот она работает функция. Вот мы обращаемся к Джемине, и она передаём текущий стейт, и Джеми отвечает. Дальше мы смотрим, надо ли дальше продолжать, э, почему и какую модель. Так, переходим вот сюда функцию should. Вот она. Значит, вот она, эта функция. Если так подтягиваем ключик, он у меня вва переменных лежит, это реальный живой ключик с реальными деньгами. Подтягиваем ключик. Если нету, то ругаемся. Смотрим, какие модельки доступны. Выбираем модель. Ээ флш. Я ему написал, типа, смотри, если вот эта модель флш, она ещё рабочая, то давай вот к ней обращайся, потому что я выбрал подешевле модели старые 2.5 флш, и Google их иногда гасит, поэтому есть шанс, что вот ты какую-то, ну, название модели зашиваешь, и у тебя отвалится весь скрипт, потому что в какой-то момент Google её просто деприкейтнул. Это вполне, вполне верен. Так вот, подготавливаем

запись. И вот в модель передаём вот такой промпт. Опять же, скажу честно, я этот промпт не писал, мне его написал агент: "Ты аналитик, реши, надо ли ещё поресёчить, чтобы ещё больше данных вытащить. И ответь джейсоном, никаким не маркдауном, только Джейсоном". Вот он описывает, как должен выглядеть JSON ответа. Again, reason, всё.

Дальше мы, по-моему, здесь уже питоновский код, который составляет этот самый запрос. Мы гайдим decision модели. Если если уверенность низкая, то ты только этим самым один рефайминг только сделай. Ну и вот здесь дальше, короче, мы гайдим модель и сколько она, сколько рефайнментов вы в итоге сделать. Всё, отправляем request body. Составляем в request body. Мы формируем этот самый dict. Да. Я я хотел сказать, что JSON формируем, но в случае с питоном я не уверен, что... Короче, формируем массивчик такой.

Вот она моя модель. Вот он этот самый. Здесь, кстати, да, здесь, обратите внимание, обращаемся напрямую к модели без этих самых, без обвязки. Можно было бы, да, здесь посидеть и впендюрить обвязку LangGraph, который он сам же предоставляет. Ну, пока вот так. Пока просто напрямую модели. Вот поэтому и поэтому, собственно говоря, вот такой, видите, специфический этот самый, что вот текст, промпт и так далее.

Так, вопрос. Понятно. Мы из state выкачиваем нужные поля и отдаём. А как state заполняется и откуда в него данные попадают?

Ай, ребята, держит сам по себе. Это одна из фишек LangGraph, что я стейтом практически не заведую. А я сейчас вернусь. Так, кто у меня вызывал? Давайте сейчас я вернусь и покажу. Вот у меня вот это вот шу вызывала, а тула, которая Market Strategist. Вот он возвращает вот этот dict. Собственно говоря, всё. Вот он мне и передаёт, и результат он в этот стейт сам и запихнёт. И теперь сейчас я покажу вам...

Мм. Одна из. Хорошо. Так, давайте я сейчас здесь остановлюсь, потому что я могу уйти глубоко в код, и я боюсь, что мы потеряем общую конву повествования. Итак, у нас есть LangGraph, которым ноды эти, ээ, нода - это чистая функция. Они связаны между собой. Связь на себя берёт агент. Где-то у меня тут было add, да? Вот он граф берёт на себя. Вот он его. Добавляет ноды. Вот. И я ещё хочу показать, что вот этот вот стейт он найду, не найду сейчас. Вот он. Он описывается. Вот. Вот как мы логи храним. Смотрите, мы храним логи в виде этого dictionary, типизированный dictionary, и добавляем с помощью оператора add. Поэтому то, что вернёт этот самый, ээ, чистая функция, оно приплюсовывается ко всему мйту вот с помощью оператора add. Вот в двух словах, наверное, вот так.

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

М возвращаюсь в в презентацию, да. Trend Search. Я, честно говоря, мысль потерял. Trend researcher. Вот он trend researcher. Всё, что он у нас делает, он, ээ, 668 сбрасывает, ээ, флагин. Ну вот он, ээ, установил, выводит в консоль, там вот он результаты. Вот он первые первые. Вот он заполняет лог, начинается всё. Вот она, видите, простая стринга здесь. И всё. Это первое, что пошло в лог. Ну и так далее. Заполняет.

Возвращаюсь в презентацию. Дальше у нас работает следующий детектор аномалии. Он смотрит, где у нас выплески. Помните вот эти вот. Ну и здесь же я тоже обложил, что эти, если ошибочки, то отдельно ошибочки обрабатываем. Вот он этот аномальный детектор аномалий. Где он? Вот он. Он вот он детектор аномалий. Вот. Вот они аномалии. Это вот эти вот выплески. Вот он на них смотрит.

Возвращаюсь в в презентацию и вернусь сейчас в сам этот самый, в фронт. Вот он. А, да, извините, я хотел показать, но, наверное, лучше не показывать. Сейчас давайте оставшиеся две ноды разберём и потом вернёмся в интерфейсе. Я покажу, как оно всё, в принципе, работает.

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

Дальше после стратега. Ой, да, после стратега стратегия. Наступает вот это вот витвление. Помните? У нас витвление - это, в принципе, просто одна функция should_update. И она там возвращает именованные самые значения. Либо то, либо всё вернёт. Вот. Вот она, да, функция, которая либо true, либо false. Либо она на researcher перекинет, либо на на verifier. Вот. И последний у нас узел verifier, который вот он смотрит там и решает, чего чего, собственно, надо делать-то, перенасыщен рынок или не перенасыщен.

Вот давайте сейчас посмотрим. Возвращаюсь в самую, обновляю. Вот оно агентство моё по курсор ascent. Вот сейчас мы наблюдаем стриминг. Я надеюсь, никто у нас там не повис. По идее, у меня всё это быстрее было, когда я вот только что. О, да, не по 429. Вот почему он так долго. А сейчас видите, как. Ну, в общем, да, ребята, это живая мы вла. И поскольку Google Trends я подключил через обходной манёвр, есть библиотека Pends, она мне периодически выдаёт вот эти вот 429, это на DDoS меня подозревают. Хотя, честно говоря, я не очень понимаю. Я же неужели долго помнит меня, что ли, или что? Я думал, уже сбросилось.

Вот, значит, вот оно прокрутилось, дальше перешло к стратегу. Он он сказал, что corsignal недоступен. Вот он его решение. Это уже LLM отвечала, что типа failed. Стратегия помечена как невозможно на её на её основании принять решение. И дальше verifier down because trend failed. Вот. И вот в конце концов вот у меня это самое verification uncertained Google trend failed. Окей. Плохой результат тоже результат. С этим уже можно работать, но не сейчас.

Давайте ещё раз попробуем слово курсор. Теперь я хочу посмотреть, чтобы вы Обратите внимание, я сейчас ещё раз запущу. Ctrl X. Обновляю. Обратите внимание, как он сейчас вот здесь будет скакать по нодам. Не, это на React сделано этот самый. Вот видите, trend_researcher. Это вот реально сейчас работает trend_researcher. UI UI на React сделан. Он просто по API с этим с Cast общается. О, вот во вот это вот он уже какие-то данные нашёл, вернулся ещё раз присёчить. Вот они выплески были. Сейчас, сейчас, сейчас вернёмся. Выплески были пятнадцатого числа, 22 апреля были выплески. Вот буквально, я так понимаю, что у меня здесь вон в американской нотации, а, нет, нормальной нотации, ээ, в 5 апреля были выплески и 12 апреля были выплески. Вот он стратег применил Gemini 2.5fш игру significant volatility volatility прыгает короче туда-сюда trend sharp decline after major anomalies большие какие-то аномалии, а потом типа тренд пошёл на спад. Понимаю, что это всё было М, в связи с покупкой этого, когда SpaceX объявили, вот они, наверное, и были эти выплески по поискам. Ээ, надо, говорит, надо подтверждать данные, насколько они стабильны.

Так, теперь дальше он на втором раунде. Researcher. А researcher у меня запустил второй раунд. Дальше он, ээ, дальше он вытащен. Ну, в общем, давайте вот как. Давайте я сейчас не буду уходить в. Всё-таки у нас мы больше про технологии, а не про, ээ, а не про маркетинг и Google Trends. Так вот, в итоге, в итоге, в итоге тренд, а-а, вот он тренд запросил, а он попытался посмотреть, что у нас происходило 8 марта. 8 марта он не смог посмотреть, потому что мне вернулся 403. Это привет нашей локации, потому что Google очень умно определяет из какой-то локации. Даже с этим я выхожу с с VPN-ом, он всё равно очень хорошо сечёт. Вот поэтому мы не смогли понять, что там у нас было 8 марта, но кому интересно, загуглите, что он там, чему он, значит, unн, потому что live search у нас недоступен и не может быть траст.

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

Так, вопрос. Вот это в это приложение, оно у вас чисто на вашей лока?

Да, оно чисто на моей локальной машине крутится. Кроме больше никакие внешние ресурсы не исполь...

Нет, больше никакие. А, нене, не, используется LLM и вот это вот кто мне 403 возвращал - это гугловский ээ гугловский API поиска. Вот он-то как раз 403 и возвращал.

Как стратегист выбирает, какую модель выбирать?

Я там ему зашил 2.5fш. У него он там поставил какой-то выбор, что вот, мол, если 2.5fш недоступно, наверное, он флбечится на что-то. Я уже не стал обращать внимания, но, в принципе, я ему зашил, что 2.5 флш.

А, да, вопрос. State - это, да?

Не, не, SQL Lite я отдельно прикручивал. У меня state там, он просто в памяти. АQ Lite там отдельно, но он просто руками прикручен SQL light и всё. Вот. Вот всё.

Подходим к подходим к окончанию этого самого. У меня даже уже картинки перестали показываться. Значит, дада. Да, Lite тоже может быть в качестве. Да.

Итого. Итого. Запускаем, инициализируем. Пошёл researcher, потом после него детектор аномалий. На основе детектора аномалий стратег отправляет в эту самую. Дальше он решает, надо ли ещё поресёчить или уже передаёт верифаеру. Там, если у него выплески какие-то странные, то он тогда ещё будет рисёнчить, ещё обратиться к Google Trends. Если нет, он тогда к верифаеру и дальше ой, назад. И дальше верифаер нам передавит. Вот вот такая вот несложная несложный такой алгоритм. Описывается это всё, как вы видели, просто нокиваешь в него, и уже там внутри нот ты можешь либо LangGraph-овские решения вытаскивать, там подключение к моделям, сохранение в базу данных, либо, как я, просто руками прикручивать всё это самое главное, что вот есть кодинг. Ну, больше 100, больше 100. Не, не хочу я руками писать, честно говоря. Вот, значит, есть best practice. Почему у меня, собственно говоря, он, видели, в эту самую всю в одну партянку скинул, это я упустил. Мне не надо было ему правила туда вставить и показать, как правильно вайп-кодить, но это отдельная ээ отдельная лекция, отдельная вообще. Вот, значит, по поводу best practice. Да, действительно, надо вот эти вот узлы, это должны быть чистые функции, их желательно держать маленьким. Вот видели, у меня он специально он у меня разбит. Эт и researcher, verifi, аналитик трендов, они разбиты, друг другу передают данные. Значит, типизированный он что и в Node, что в Питоне, мы с вами используем типизированные и бюджеты. Это чертовски важно. Я вот себя там ограничил двумя, потому что сжечь можно, ээ, деньги можно очень легко сжечь, особенно если вы Anthropic подключили у AI. Anthropic по AI никогда не подключайте, друзья мои. Там в десятки раз выше стоимость будет. Вот всё это финальный слайд. Аэ, полтора часа я ваши занял. Огромное вам спасибо, что доверили мне своё время, что пришли. Значит, ссылка. Ссылка. Давайте я вам дам ссылку на на гулак. Ссылку на опрос. Мне, по-моему, скидывали тестировать инструкции. Вот она ссылка на опрос. Да, пожалуйста, не отключайтесь, не уходите. Вот ссылка на опрос. Вот мне за неё дадут миску риса и кошка жену. Скрылка на исходники. Давайте я вам дам ссылку на исходники вот прямо сюда, прямо сейчас. Ээ, где моя ссылка на исходники? Дайте мне одну минутку, я вам достану GitHub свой. Я вам дам ссылку на свой GitHub. Одну минуточку, пожалуйста. Если есть какие-то вопросы, сейчас пока напишите в чат, пока я на втором мониторе эщу свой GitHub. Вот онон, вот она ссылка на исходники. Он, ребята, код грязноватый, я скажу честно. Он Я бы с таким кодом на не пошёл бы на сабес. А не надо исходники, дайте Google Play. Ээ, зачем, в смысле, какой Google Play? Я не не очень понимаю. Вот исходники и нате вам эту самую, ээ, презенташку. Так, всё, презенташку я сворачиваю. Значит, я одним глазом я смотрю в чат. Сейчас я скину ссылку на презенташку. Одним глазом я смотрю в чат на случай, если есть вопросы. О, даже кто-то этот самый дизлайк кто-то поставил. Да, да, такое бывает. Напишите, пожалуйста, если вы ещё здесь, кто дизлайк поставил. Не в Google Play, а в этом самом, в Chrome. В Chrome. Chrome, как его? Веб, ну где где расширението для Chrome? Не плагины, Chrome Webstore. Вот Chrome Webstore. Так. Вот она. Сейчас я вам расшарю и дам вам эту презентажку. Забирайте на здоровье. Сейчас шарится, ребята. Что? Всё, вопросов нету. Ни у кого не будет. Пойдём спать, чай пить. Сейчас я расшарю презенташку, скину вам сюда. Так, и да, курсор лидер или хотя бы топ-три инструмент во время или сейчас другие инструменты решения, которые...

Послушайте, огромный большой вопрос, действительно, кто лидер, кто крутой или не крутой. Я думаю, что всё зависит от того, как вы обвяжете модель рулами, MTP, ээ, скилами. Я думаю, что это уже намного важнее, чем какой это самый, потому что если там копать внутрь этих самых, внутрь агентов, они даже ищут код по-разному. Курсор, например, строит у себя внутри, у себя в облаке, кстати, выстраивает этот самый эмбединговый граф в виде эмбедингов граф всей твоей кодовой базы. А CodeLlama или Курсор, ой, Курсор этот самый Codex, они просто grep-ом просто, ну, как Ctrl+F, они ищут. И тем не менее и тот, и тот нормально, и те, и те нормально. За счёт того, что они экономят контекстное окно этими самыми субагентами, за счёт того, что они рулы применяют. Ну, в общем, отдельное.

Так, LangGraph. В каких кейсах использовать вместо Niche?

Я думаю, во всех кейсах, потому что он точно такой же простой, а Niche в 100, в 100-500 млн раз. Но это моё личное мнение. Я так думаю.

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

Его сохраняет ээ софт, который стоит между веб-интерфейсом и LLMкой. Вот в этом софте хранится этот самый ваш у вас у каждого чата есть свой уникальный ID, где-то хранится. Ни одна модель у себя не хранит. Все модели stateless. Ни одна модель не хранит у себя ничего. Единственное, что они потом на основе этих чатов они уже могут перефайнтюнить, ну, ээ, переобучать модель, они уже будут ей вкидывать, могут, но в real time ни одна модель не хранится.

Как из первого сохраняется контекст для следующих? Почему в контексте записывается не только то, что я написал, но и какие-то части ответа?

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

Вопрос: можно ли через VS Code аддоны для общения с LangGraph без курсов?

LangGraph - это просто библиотека, и она просто импортируется, ребята. Вот она. Вот я в самый верх иду. Вот он импорт идёт. Где где у меня тут граф? NGraph граф. А, вот он, да, вот он из LangGraph импортирует. Всё, можете в Node импортировать. Это это просто набор этих самых функций, модулей, не знаю чего.

Супер, супер. Спасибо.

И вам тоже спасибо, что доверили своё время. А чатботы AI разве не в контенте? Чатботы AI разве не в... Я вот вообще не понял этот вопрос, если честно. А-а, чатботы. А и разве не в контенте хранят? В контексте. Контекст. Давайте, я сейчас уже сворачиваюсь. Ээ, контекст - это то, это то, что вы подаёте в модель, да? И в этом контексте хранится. Чатботы AI разве не в контексте хранят? Чатботы AI разве не блин, я не понимаю. Ну, короче, вы в модель передаёте всю историю чата каждый раз. Это и есть контекст. И то, как какую огромную строку может в себя вобрать модель, называется окно контекста. Контекст Window. Там по этому поводу ещё отдельно можно много говорить.

Всё, сворачиваемся, пойдёмте чай пить. Время уже почти 10. Можно ли подключить MCP для хранения истории локально к LangGraph? Для хранения истории локально к LangGraph. Слушайте, я думаю, да, потому что MCP - это это просто у тебя торчит снаружи сервер, который принимает JSON запрос. Всё. Да. Да, можно. У меня сейчас просто в голове не самое не складывается. И наверняка там, наверное, можно можно LangGraph, конечно, можно там MCP подключать.

Всё, да, я вижу, уже уменьшается количество участников. Уже 32. Прощаюсь, прощаюсь, никак не это самое. Всё, я это самое смотрю вопросы. Так, скинул, да, презентацию я скинул, GitHub скинул, всё скинул. Let's go. Счастливо. Спасибо. Спасибо, что пришли. Счастливо. Ссылку. А я что ссылку на опрос не скинул? Да ладно, да скидывал я ссылку на опрос. Не может такого быть. Вот сл ссылка на опрос была, да? Вот ещё раз. Да, ссылка на опрос. Всё, чао, чао, какао.