🚀 Pro тут:
https://t.me/iishenka_pro_bot
⭐️ Все бесплатные материалы из этого видео тут:
https://t.me/+W1SnvvkcV6A3NWMy
В этом видео я покажу, как ИИ агенты парсят сайты в интернете разными способами — Поиск, Кроулинг, Скрейпинг. Что особенного в этом уроке? Мы не только учимся парсить данные, но и векторизовать их для того, чтобы агент отвечал нам на их основе.
Следующее видео:
https://youtu.be/anKmrIXBCyc
🔥 Независимо от того, работаете ли вы с AI-агентами или только начинаете осваивать автоматизации в n8n, этот урок поможет вам овладеть процессом настройки ИИ для любых задач.
💡 Не забудьте поставить лайк и подписаться, чтобы не пропустить новые уроки по n8n и AI-агентам. Давайте сделаем AI-автоматизации простыми! 🙌
Тайм-коды:
00:01 - Введение. Зачем это?
00:43 - Какие есть способы парсинга
01:00 - Что такое Поиск в интернете для LLM
01:46 - Что такое Scraping / Скрейпинг
02:22 - Что такое Crawling / Кроулинг
05:25 - Строим разные вариации парсинга
15:02 - Учим ИИ агента парсить интернет
18:55 - Скрейпинг на более глубоком уровне
Не забудьте поставить лайк, подписаться и нажать на колокольчик, чтобы не пропустить новые видео об AI-агентах и автоматизациях!
для наших агентов - это, наверное, самый, ну, горячий вопрос, который мы обсуждаем и в комментариях под прошлыми видео в YouTube, и в нашей прогруппе, и в наших обычных беседах. Поэтому сегодня мы разберёмся, каким образом мы можем превратить интернет в данные для нашего агента, чтобы понять, какие способы, в принципе, есть взаимодействие нашего агента с веб-страницами и каким образом мы можем забирать оттуда данные. Друзья, но прежде чем мы начнём, обязательно подпишитесь на этот канал, поставьте лайк этому видео, напишите обязательно какой-то коммент, потому что так работают алгоритмы Ютуба и так больше людей узнаёт про уникальные знания. И также сходите в нашу бесплатную Telegram-группу, где будет находиться шаблон непосредственно от этого агента.
А мы начинаем. Если мы говорим о том, каким образом мы превращаем сеть интернет в данные для нашего агента, то, в принципе, мы подразумеваем три базовых пути. Это может быть поиск в интернете, это может быть скрейпинг или это может быть кроулинг. В чём отличие этих трёх опций? Когда мы говорим про поиск, мы
говорим о том, что есть некоторая нейронка, которая может по нашему запросу осуществлять поиск в интернете и формировать свой ответ в зависимости от того, что она нашла в соответствии с нашим поиском. То есть этот опыт очень похож на работу с чатом GPT, который уходит в веб, ищет релевантную информацию нашему запросу и формирует ответ на основе этой информации. Следующая опция, которая кроется в этом же способе, мы задаём некоторый вопрос нейронки. Она идёт, ищет в интернете релевантную информацию и вместо или вместе с ответом на основе этой информации возвращает нам все источники и все данные, которые она использует для того, чтобы сформировать ответ нам. Этот способ даёт нам больше гибкости, потому что мы ещё и получаем исходные данные, на основе которого нейронка сформировала
нам ответ. Следующий метод называется скрепинг. Он взаимосвязан с методом, который мы только что обсудили. Этот метод предполагает, что у нас уже есть некоторая известная страница либо набор страниц, их URL, прямые ссылки, которые мы отдаём модели. Модель идёт именно по этим ссылкам и формирует нам ответ и скрейпит информацию, забирает информацию с этих веб-страниц особым способом. может оборачивать это в Markдаун, может делать скриншоты страниц, может возвращать чисто HTML, но итог таков, что мы в результате имеем полный слепок страницы или нескольких страниц, которые мы попросили у нейронки. И последний
метод называется Роулин. Кроулинг заключается в том, что мы изначально не знаем все страницы, контент с которых мы будем получать, но мы обычно знаем некоторую стартовую страницу. Например, если вы представите какую-нибудь документацию, вы знаете, что есть стартовая страница, где указаны ссылки на все sub саб-страницы этой документации. И мы даём инструкцию нейронки пройтись по нашей главной странице, найти все ссылки, которые на ней содержатся, и пройти внутрь каждой ссылки и забрать информацию ещё и оттуда. Здесь может настраиваться масса разных нюансов, глубина прохода, количество информации, которую мы забираем, и многие другие параметры. Так вот, теперь мы понимаем все базовые способы работы с сетью, когда мы говорим о ней как о данных для нашей нейронки. Возвращаемся в наш NEN, и самый базовый пример, который мы можем посмотреть, например, у нас есть какой-то запрос к нейронке. Например, что такое Sent for Science? Это один из моих продуктов, про который мы говорили пару видео назад. Мы можем отослать в нейронку этот запрос, и как ответ мы получим какое-то количество вариантов, какое-то количество ответов в формате Markда. Да, давайте переключимся в таблицу. То есть нейронка нашла какие-то ресурсы, забрала оттуда информацию. И так как мы её даже попросили сделать скриншоты, сформировала нам скриншоты, да, с ресурсами, откуда она взяла эту информацию. Вот, например, скриншот page for sign или вот, например, какие-то другие ресурсы, которые она тоже изучила. То есть, да, какой-то сайт с рассылками про AI тулы тоже писал про Sent For Sign. Она это нашла, забрала всю информацию оттуда и сделала скриншот. Это всё очень интересная тема. И давайте пройдёмся пошагово по каждому методу, каким образом он работает и каким образом мы можем использовать его для своих целей. Нам с вами понадобится несколько тулов. Первый тул - это Fireроwл. Это тул, который помогает и сёрчить, и скрейпить, и кроулить всё подряд. И его конкурирующий Тул Тевели, потому что наверняка вы слышали про Тевели, потому что только ленивый уже не показывал, каким образом это работает. Но так как мы учимся замбазе, то нам очень интересно постичь все тулы, которые сейчас популярны и которыми реально можно пользоваться и добиваться хороших результатов. Соответственно, tvil. com источник длявели. Fireoll, да, гуглим, переходим. Ну, это, в принципе, сайт для Firecroll. Если мы перейдём в документацию, нас обычно, когда мы говорим про взаимодействие с разными тулами, интересует документация, да, и здесь, и здесь. Документация Tavли говорит, что у них есть search, то есть поиск, да. А у них есть экстракт, то есть извлечение информации с сайта. У них уже есть кроулинг в бета-режиме и маapпинг в бета-режиме. У Firecроwл есть примерно всё то же самое, да, у них есть скпинг, кроулинг, поиск и много чего другого. Давайте сравним, каким образом работает поиск от Tavel и поиск от Firecoll, потому что они работают по-разному. И мы можем это использовать для разных кейсов. С чего мы всегда начинаем работу с API внешних сервисов, да? Нам, конечно же, нужно найти сам кулзапрос, да, то есть пример запроса, который мы можем посылать в нейронку для того, чтобы она нам отвечала. Вот здесь, если нас интересует Tavly Search, мы кликаем прямо сюда, видим запрос, да, довольно большой, у него довольно много параметров. Давайте разбираться, для чего это всё есть. Прежде чем разбираться, мы прямо нажимаем здесь
копировать, заходим в наш NVM, добавляем ноду HTTP request, да, нажимаем Import Curl. Вставляем, нажимаем импорт. И, в принципе, N8N распарсил этот курл, этот запрос, да, и уже, в принципе, вставил всё тело запроса и хедеры запроса, которые нам понадобятся, чтобы отослать туда правильную команду и получить ответы. Здесь, как и всегда, требуется авторизация toкенen, как он получается, да? Соответственно, здесь прямо есть большая кнопка получить API ключ. Нажимаем её, попадаем внутрь дашборда, где вот у нас прямо здесь есть наш API ключ, да, мы должны нажать скопировать, вернуться в Cem и вставить прямо сюда вместо токен, да? То есть мы оставляем rer, пробел и потом этот токен. Соответственно, давайте разбираться, что здесь есть, да? Здесь есть, собственно, само телозапрос. Это базовый параметр, он обязательный, без чего у нас, в принципе, и не будет никакого ответа, да. Дальше мы можем посмотреть, что у нас глубина поиска есть, сколько чанков от каждого источника мы ожидаем. Ну и, в принципе, разные другие вещи. Например, наверное, самое важное и популярное, да, мы хотим включать домены или хотим исключать домены. Если мы, например, хотим исключить какие-то определённые источники, которые мы точно не хотим, чтобы а туда попадали, давайте вместе это сделаем. Например, я опять хочу же спросить, что такое S for Sign, но мы уже увидели, что он в основном тянет информацию с самого Dominance for Sign. А нам, на, например, интересно посмотреть, кто ещё что писал про Cent for Sign. Соответственно, мы должны exclude domains, да, сюда вставить такую строчку, что нас не интересует sendsign. com и все связанные домены, чтобы главное в урле не было этой связки. Давайте попробуем запустить этот запрос. Изучается результат, в котором нету в урле S for Sign. Прекрасно. Это crunch Base, да. Соответственно, так как мы его попросили не искать на S for sign related sources, да? То есть он поискал где-то в других местах. И более того, он нам вернул, а, какую-то выжимку контента довольно небольшую, да, и сформировал нам ответ, что SFS Sign - это API based contract management тула, которая делает то-то, то-то и то-то для B2B платформ. Да, круто. Мы хотели получить ответ. Это свежая информация, да? То есть мы получили свежачок прямо в нашего агента. Насколько это полезно? Для каких-то кейсов это прямо полезно, да? Мы хотим получать прямо ответы, не заморачиваться и использовать это эти ответы дальше. Ну, допустим, а что, если мы хотим получить не только ответ от системы от нейронки, да, а ещё и получить прямо контент, полный контент, на основе чего система формировала свой ответ. Для этого мы будем использовать другой сервис Firecroll. И мы прямо идём, ищем, каким образом здесь работает search. У них такая же есть документация, да, и мы же научились, что чтобы нам начать работать с сервисом, да, нам нужно забрать курл откуда-то. Вот тут есть search, да, мы забираем курl, возвращаемся в N8men, добавляем HTTP запрос, нажимаем импорт, вставляем импорт. Отлично. Мы также вот, а, возвращаемся сюда, да, нажимаем на дашборд илибо у вас будет sign in, да, и здесь вы также увидите свой AP ключ. Нажмёте скопировать, да, вернётесь и вставить сюда. вставите сюда вместо токена, да, вставляете berре, пробел и ваш API ключ. И давайте попробуем сделать то же самое, да, то есть мы оставим здесь вот такой запросик, тот же самый запрос, что такое SF sign, да, limit. И мы также хотим его ограничить, не искать ресурсы самого S for sign. Хотим всё остальное, но не S for sign. Здесь с этим работается несколько иначе, да, давайте искать вместе. Разбираемся, как разбираться с документацией. Здесь для того, чтобы ограничивать нашу нейронку, есть так называемые операторы, да? То есть, например, хотим исключить все sendsign. com сайты и все их производные, да? Здесь есть как раз оператор, который называется exclude certain keywords, да? И вот он выглядит вот так. Мы прямо можем забрать их пример, каким образом исключить сайт firecroll. de, да, возвращаемся, и мы хотим прямо в наш query, да, добавить вот такую конструкцию. Только мы должны сюда написать sinforsign. com. То есть получается вопрос тот же самый, но сервис другой, да, и работает он несколько иначе. Пробуем. Так, смотрите, и у нас приехали ответы. То есть он забрал title, да, откуда-то он нашёл где-то результат open tools, да, сFign. com. Вот весь, весь marкdдаун, да, также сделал скриншот. Другой listi, то есть ни одного сайта или производного от сайта sforsign. com. И смотрите, здесь кардинально другое поведение. Он не стал нам формировать свой ответ на вопрос, что такое Sent for Science. Он нашёл именно сайты, на которых можно найти этот вет, и вернул нам весь контент в формате Marкdown. Почему это для большинства кейсов намного круче? Потому что этот контент, мы потом с ним можем сделать что угодно. Мы же его можем превратить в рак для нашего агента, да? То есть мы можем скормить это в векторную базу данных, и потом уже агент будет формировать какие-то свои ответы на основе этого. То есть это очень крутая тема, это намного ближе к скрейпингу, да, чем первый вариант, когда мы просто получаем ответ на основе нашего вопроса. Давайте, допустим, откроем какой-нибудь скриншот. Да, и мы получили скриншот с сайта, допустим, который лично я никогда в жизни не видел, да, но они вот что-то писали про S for Sign, и, соответственно, мы можем этим пользоваться очень гибко. Таким образом, работает search от Firecoll, да, то есть возврат исходных источников и их контента. А давайте посмотрим теперь, как работает скрепинг, да, мы будем использовать для этого также сервис Firecroll, да, возвращаемся в их документацию, соответственно, также забираем вот этот курл. Да. Смотрим, какие тут есть параметры. Забрали. Также вставили и смотрим, какие параметры. Я ставлю краеугольный параметр. Да, мы здесь прямо задаём уже конкретный URL, который нас интересует. И дальше мы задаём форматы, в котором вернётся наш ответ от этого сервиса, да, только main contтент. Если он встретит пдфки, то он их распарсит, да, блокировщик рекламы и прочее, прочее. То есть параметры вы всегда можете вернуться, да, в документацию конкретного сервиса, посмотреть, какие же у него есть параметры, и в зависимости от того, что вам нужно, прямо накидать в ваш запрос эти параметры в соответствии с документацией. В чём кардинальное отличие того, как работает этот подход? Да, мы уже не спрашиваем у него вопрос. То есть нету такого понятия понятия, как quy, да? Есть такое понятие, как конкретный URL, который нас интересует, который мы, в принципе, хотим забрать для того, чтобы потом с ним что-то делать. Давайте выполним этот шаг. И смотрите, нам вернулся Markдаун полностью, полностью всей-всей-всей страницы, которую мы его попросили заскрепить. Ничего больше, конкретно URL и данные, которые он вернул с этой страницы. По сути, это частный случай поиска, когда он подбирает нам сам страницы и возвращает нам результаты. Только здесь конкретный URL. Ну и, наверное, самый интересный вариант - это вариант кроулинга. Давайте для кроулинга вернёмся опять в сервис номер один, да, Тевели. Вернёмся на кроулинг. И он пишет: "Мы можем пройти сайт как граф, начиная с базового URL. То есть наша задача - задать базовый URL, потом какие-то параметры, которые ограничивают наш поиск. И после этого неронка начнёт копать внутрь, да, проанализирует сначала базовый URL наличие внутренних ссылок и пройдёт внутрь по каждой ссылке и заберёт контент также и оттуда. Это работает очень круто. Давайте посмотрим. Допустим, самый базовый вариант, популярный вариант, как этим можно пользоваться. Например, мы знаем, что у нас есть какая-то базовая страница документации, да, и на этой базовой странице есть просто сотни ссылок, огромное количество, да? Мы хотим задать только базовый URL, вот этот, и потом хотим задать определённые параметры, которые скажут: "Ещё пойди вовнутрь и забери контент из внутренних страниц". Давайте прямо это сделаем вместе. Возвращаемся сюда, забираем этот курл. Всё, как умеем. API ключ у нас уже есть, да? Мы уже используем этот сервис. вставляем в HTTP запрос этот курlл и получаем вот такой набор параметров, да, где URL, да, мы прямо вставили наш URL, который нас интересует. У нас там очень много вложенных ссылок, да, и, допустим, мы хотим, не знаю, поработать только вот, не знаю, вот с этими четырьмя ссылками, да, каким образом можно нашу нейронку ограничить, да? Здесь, например, есть URL, да, если мы сюда перейдём, мы видим, что здесь конкретно URL содержит clientт, да, такое слово. И мы хотим, чтобы всё, что связано с клиентом, он прошёл, а все остальные ссылки не трогал, потому что это займёт очень много времени, и нам, допустим, сейчас это не нужно. То есть мы должны понимать, что если мы его никак не ограничим, он просто каждую ссылку вот прямо на этой странице пройдёт и закроулит, да, провалится вниз, провалится вниз и ещё раз и ещё раз. Поэтому мы говорим, максимальная глубина один, да? То есть провались на одну ссылку вниз, но дальше уже не надо. Лимит, да, сколько мы хотим, чтобы ты ссылок прошёл максимум, да? И дальше как раз очень важная штука, каким образом мы делаем ограничитель, да? Мы говорим: "Выбранный путь должен содержать вот такую конструкцию. Client/звёздочка", вернее, client/точказвёздочка. Это значит, что там должен быть и после него всё, что угодно, но обязательно должен быть. Да, можем дальше задавать выбранные домены, что-то исключать, что-то включать. Вы можете с этим поиграться так, как вам угодно. И просим его вернуть Markдаун. То есть уже разобранный хорошо сайт, как ответ. Давайте попробуем выполнить этот шаг. Выполняем. Так, смотрите, нам вернулся массив, да? Смотрите, первый URL, который он нашёл, client list. Прекрасно, да? То есть один из URL, который нам нужно, вот он так и выглядит. Client list. Так, хорошо. Следующие URL, которое он нашёл, client 3. Так. Это прекрасно. Ещё один client create, то есть он именно нашёл именно те sub URL, которые нам нужны, да? То есть client list, client read, client create, client update. Всё, что мы
хотели именно так, как мы его ограничили. Но каким же образом воспользоваться теперь этим практической плоскости? Да, если мы хотим, например, сделать бота, который вот этой информацией потом пользуется как исходный для того, чтобы формировать ответы на наши вопросы. Ведь мы это уже умеем с вами делать, да? Мы умеем с вами векторизовать данные, сохранять наши в нашей векторной базе. Мы это уже делали неоднократно, поэтому сходите, посмотрите предыдущее видео, каким образом мы векторизуем, если вам нужны азы, основа этого процесса. А я, например, для себя сейчас добавлю прямо вот такую конструкцию, которую мы добавляли уже кучу раз, да, это векторная база данных, для которой я создал отдельную векторную таблицу. Каким образом создаются векторные таблицы? Это мегаважная штука, да, потому что нам нужна и таблица, и функция поиска для этой таблицы. Мы это обсуждали в прошлых видео. Посмотрите, там это всё прямо по косточкам разложено. Либо альтернативно присоединяйтесь к нашему проканалу. Там вся техническая информация прямо по полочкам лежит для удобного поиска и работы с ней. Соответственно, я хочу добавить сюда векторную базу. Да, хочу добавить датаader. Давайте сразу присоединим ответ от нашей нейронки, потому что он уже содержится, да, чтобы мы видели, с чем работаем. В даталоader мы, вообще говоря, хотим добавить вот этот контент, да, потому что смотрите, вот он прямо всёвсё-всё нашёл с наших внутренних страниц, да, и мы прямо немудрствовая лукаво прямо хотим всё, что он находит, векторизовать и помещать нашу в векторную базу в качестве имбедингов. Да. Добавляем текст splitter. Опять же, мы это делали уже многократно. Смотрите в предыдущих видео, зачем это нужно, как это работает. И добавили нашу модель от Open для того, чтобы превратить это, конвертировать всё в мбединге. Обычно это не работает, если мы не добавим какой-то триггер, поэтому просто для нас добавим ручной триггер, поставим сюда. Так, ответы уже у нас есть. Вот я открыл свою superabase. Да, вот моя табличка documents White Now. Она совершенно пустая. И нам теперь ничего не мешает нажать здесь execute. И смотрите, и у нас векторизовались наши данные. Если мы перейдём в таблицу обратно и рефрешнёмся, они появились здесь. То есть всевсе данные, которые мы только что закроулили из интернета, да, они прямо перекочевали в нашу векторную базу данных, в векторную таблицу в качестве долговременной памяти. И почему это важно? Ведь теперь мы можем моментально, автоматически создать агента, который смотрит на эти данные, которые мы только что забрали откуда-то из интернета, который теперь будет полагаться в своих ответах на эти данные. Мы опять же делали это с вами много раз, да, мы можем добавить в качестве тула векторную базу, да, мы также прописываем, что это мы смотрим на табличку documents Whit now, потому что мы в неё сейчас векторизовали, да, прописываем системный пром для агента, что всегда смотри в нашу векторную базу, чтобы давать твои ответы. И что это означает? Прямо сейчас, если мы, допустим, захотим спросить очень специфическую информацию, а каким образом, допустим, я могу вернуть список всех клиентов с помощью курсзапроса, да? То есть, вообще говоря, этот агент не может ни откуда знать эту информацию. Но так как мы только что нашли эту информацию, векторизовали её, поместили в нашу базу данных, то теперь мы можем попробовать спросить: "А если я хочу посмотреть всех клиентов, каким образом мне задать запросл?" Да, отправляем, смотрим, каким образом работает агент. Ага, сходил в нашу векторную базу данных. О, смотрите, это просто нужно вид, да? Для того, чтобы получить список всех клиентов с помощью курм, вам нужно выполнить запрос. Вы должны целиться в API for sign client, задать такие-то хедеры и выполнить команду action list. Если мы вернёмся в нашу документацию, мы увидим, что это ровно та команда, которая нам была нужна. То есть для нас это, по сути, открывает колоссальные возможности для нашего агента. То есть шаг номер один. Мы задаём конкретные ресурсы, откуда мы хотим взять информацию. После этого моментально её векторизуем. И после этого агент начинает основывать свои ответы на уже векторизованной информации, которую мы ему только что отдали. Мы уже подходим к концу этого урока. Я хочу сказать, что есть ещё более глубокие способы получения
информации и превращения этой информации в знания для нашего агента. Есть ситуации, когда агент не может пробиться к необходимой информации. Допустим, эта информация спрятана внутри сервисов за логином, за какой-то капчей, за формой. И чтобы пробраться туда, мы должны залогиниться, да, пройти какие-то капчи, только потом уметь забирать информацию. И, конечно же, для этого тоже есть свои способы. Конечно, такие продвинутые механизмы нужны далеко не всем. И один из таких механизмов мы создали недавно в нашей прогруппе. Например, здесь вы можете видеть, как агент проходит через вход специализированные сервисы сам, без нашего участия, вводит необходимые креды, логины, пароли. Сам нажимает необходимые кнопки, получает доступ к закрытым страницам и после этого кроулит эти страницы и возвращает нам полностью готовую информацию в виде текстовых файлов и джейсонов. Если вас интересуют такие продвинутые способы, обязательно присоединяйтесь к нашей прогруппе, там просто огонь. А на этом всё. Я хочу напомнить ещё раз: обязательно подпишитесь на этот канал, поставьте лайк, поставьте колокольчик и пользуйтесь интернетом как открытыми данными для ваших агентов. Прямо этот шаблон я сейчас скачиваю в виде JSON файла и помещаю в свою бесплатную Telegram-группу. Соответственно, вы можете зайти туда, скачать его, нажать здесь import from file и экспериментировать с вашими агентами так, как вам это нужно. и за прознаниями, за глубокой экспертизой и за уникальными кейсами. Обязательно идите в нашу платную прогруппу.