Самый ЛЁГКИЙ Способ Сделать RAG на Яндекс Диск в 1,5 Раза Точнее (По Шагам, n8n, Я.Диск, Supabase)
18:47

Самый ЛЁГКИЙ Способ Сделать RAG на Яндекс Диск в 1,5 Раза Точнее (По Шагам, n8n, Я.Диск, Supabase)

ИИшенка | AI Automation 30.07.2025 7 086 просмотров 279 лайков обн. 18.02.2026
Поделиться Telegram VK Бот
Транскрипт Скачать .md
Анализ с AI
Описание видео
🚀 Усиленный вариант этой автоматизации, который работает с множественными файлами, docx и отрабатывает файлы больших объёмов ищи в Pro-сообществе тут: https://t.me/iishenka_pro_bot ⭐️ Бесплатный шаблон из этого видео тут: https://t.me/+W1SnvvkcV6A3NWMy Следующее видео тут: https://youtu.be/mW_WxGPhevM Статья от Anthropic: https://www.anthropic.com/news/contextual-retrieval В этом видео я расскажу, как сделать ваш RAG ещё более точным с помощью Contextual Retrieval на Яндекс Диск. Что особенного в этом уроке? Мы не только изучим, как это работает, но и создадим собственную реализацию этого подхода на n8n. 🔥 Независимо от того, работаете ли вы с AI-агентами или только начинаете осваивать автоматизации в n8n, этот урок поможет вам овладеть процессом настройки ИИ для любых задач. 💡 Не забудьте поставить лайк и подписаться, чтобы не пропустить новые уроки по n8n и AI-агентам. Давайте сделаем AI-автоматизации простыми! 🙌 Тайм-коды: 00:01 - Введение. Зачем это? 00:36 - Как работает RAG? 01:20 - Основная проблема RAG 02:21 - Что такое Contextual Retrieval 03:26 - Строим автоматизацию на n8n 03:30 - Подключаем Яндекс Диск 10:43 - Кеширование промптов 13:54 - Подключаем Supabase Я — Илья Бовкунов, основатель и СЕО Sendforsign — это компания, занимающаяся AI-автоматизацией договоров и документооборота. В прошлом был Директором по продукту и продуктовому дизайну в международных AI-стартапах. Позвать в подкаст или предложить другое сотрудничество aiiszdes@gmail.com Не забудьте поставить лайк, подписаться и нажать на колокольчик, чтобы не пропустить новые видео об AI-агентах и автоматизациях!

Оглавление (9 сегментов)

  1. 0:00 <Untitled Chapter 1> 6 сл.
  2. 0:01 Introduction: Why this matters 104 сл.
  3. 0:36 How RAG works 118 сл.
  4. 1:20 The main problem with RAG 190 сл.
  5. 2:21 What is Contextual Retrieval 201 сл.
  6. 3:26 Building automation in n8n 12 сл.
  7. 3:30 Connecting Yandex Disk 1176 сл.
  8. 10:43 Prompt caching 473 сл.
  9. 13:54 Connecting Supabase 752 сл.
0:00

<Untitled Chapter 1>

Друзья, всем привет. Сегодня у меня
0:01

Introduction: Why this matters

суперпрактический разговор для вас. Каким образом мы можем сделать наш рак лучше и точнее. В этом видео мы посмотрим на очень интересные практики, которые предлагает команда от Anтропик. Попробуем их реализовать вместе, сделаем это прямо на Яндекс-диске и посмотрим, каким образом это всё работает. Сегодняшний разговор будет строиться вот на этой статье от Anтропик, да, в которой они рассуждают про методы возврата контекста в наших рак алгоритмах. Так, ну прямо сейчас прервись на 2 секунды и оставь какой-нибудь комментарий, лайк, подписка, потому что так видео круче продвигается. Погнали дальше. Каким образом работает рак и в чём бывает с ним проблема? Если вы уже давно
0:36

How RAG works

подписаны на наш канал, то вы уже прекрасно знаете базовую методику работы рак. Да, у нас есть какой-то текстовый документ, он разбивается на какое-то количество чанков. Эти чанки могут быть одного размера, там чаще всего это 400-600 символов, либо они могут разделяться по каким-то сепараторам. И у этих чанков есть ещё свои метаданные. И, соответственно, после этого они векторизуются. После того, как пользователь задаёт какой-то вопрос, формирует свой мпромт, выбираются конкретные чанки, чаще всего три-пять чанков с помощью векторного поиска Similarity search, в которых как раз содержится вся релевантная информация, которая соответствует нашему запросу. И, соответственно, уже после этого какая-то лмка на основе этого контекста, чанков, которые мы получили, формирует ответ и отдаёт вам обратно как пользователю. В
1:20

The main problem with RAG

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

What is Contextual Retrieval

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

Building automation in n8n

пообещал, что всё это будет работать на Яндекс-диске, поэтому открываем наш CAN
3:30

Connecting Yandex Disk

и сразу же с ходу добавляем ноду HTTP request, с помощью которой мы будем обращаться к нашему Яндекс-Диску. Помните, мы с вами пару месяцев назад уже подключались к Яндекс-Дску. Откройте это видео и посмотрите все нюансы, потому что сегодня мы их будем пролетать мимо. Ну, в общих чертах, конечно же, пройдёмся. Мы гуглим ЯндексДиск AP, переходим по первой же ссылке, да, кликаем на REST IP диска и видим, что здесь есть специальная кнопка полигон. Кликаем на неё и получаем специальный тестовый токен для того, чтобы разрабатывать приложение для тестовых целей. После этого возвращаемся в NV CMEN, да, и в нашем HTTP реквесте прописываем метод get и прокидываем специальный URL, который позволяет нам обращаться к нашему Яндексу. Откуда я это всё знаю? Я это знаю прямо со странички Полигона, где приведены все-всевсе энд endпоинты, да, для API и Яндексдиска. Соответственно, вы можете тут экспериментировать, как вам угодно. Я уже это поделал, да, поигрался с этим API. Соответственно, мы прокидываем вот такой URL и дальше можем добавить как аргумент, да, путь в папочке на Яндекс-Диске. Соответственно, я пошёл себе на ЯндексДиск и прямо создал папку, которая называется YT теest. И вот прямо сюда я её и прописал. Дальше мы указываем несколько параметров, да, и обязательно указываем, прокидываем авторизацию, да, это будет token, и, соответственно, вы прямо сюда, да, после пробел вставите ваш токен, который у вас есть на полигоне. Так, ну, я только что вставил, давайте пробовать. Нажимаем. О, отлично, у нас вернулась, смотрите, путь к нашей папочке, да, и вернулись все файлы, которые я только что закинул туда какую-то пдфку. Вернулись все файлы, которые есть у меня на Яндекс-диске. Так, отлично. Дальше нам потребуется ещё один HTTP requкст. Да. И здесь обратите внимание, когда мы возвращаем все наши файлы из нашей папки, то нам также возвращается ещё поле файл. Кстати, вот этот момент мне подсказали в комментариях на Ютубе под прошлым видео про ЯндексДД, поэтому обязательно пишите комментарии. Я прямо много из них узнаю, да, и периодически отвечаю, так что не стесняйтесь. Соответственно, мы знаем, что есть специальный метод get, да, который позволяет с помощью вот этого URL просто получить бинарник этого файла, то есть сам файл. Давайте нажмём Execute. О, смотрите, и мне вернулся наш файл. Я только что закинул пдфку, да, в ЯндексДиск. И вот смотрите, вот оно так выглядит. Здесь вот какой-то там мегаспецифический текст, да, какой-то договор купли-продажи. Явно что-то юридическое, да, но это как раз интересно проверить систему работы консексуального Рак, да, на довольно сложных текстах. Соответственно, я получил пдфку, которая у меня лежит в моём Яндекс-Д. Вот она, эта пдфка прямо тут и лежит, да? Дальше мы хотим получить контент этой пдфки, да? Есть специальная нодаct from pdf, да? И прямо мы присоединяем эту ноду к последнему запросу на скачивание, да, и она уже работает прямо из пакета, да. Вот смотрите, вот он договор купли-продажи. То есть у нас прямо вернулся текст, да, этой пдфки, что есть прекрасно. Так, мы почти до него добрались, да. Что нам понадобится ещё? Дальше мы добавляем ноду Edit Fields. Да, это лично мой подход. Я всегда в каких-то таких ключевых моментах workflow переименовываю инпуты, да, и вот сейчас перекладываю текст, который нам вернула предыдущая нода, да, в конкретную в конкретное поле текст, да, и вот я буду всегда его там иметь, да, и буду точно знать, что он у меня всегда лежит в ноде ротекст. Соответственно, добавили такую ноду. И дальше возникает момент, когда нам нужно вернуться в описание метода от антропика и посмотреть на вот ключевой промт, который они рекомендуют использовать. Обратите внимание на этот промт. Он заключён в том, что мы сначала даём весь документ, да, не пугайтесь, весь документ, мы ещё про это поговорим. Потом после всего документа мы говорим: "А, вот ещё и чанк из этого документа". Да. Потом отдаём сам чанк и дальше даём инструкцию лэмки. А теперь дай мне короткий контекст и определи значение чанка в рамках всего документа. То есть мы как раз пытаемся создать контекст для каждого чанка, для конкретного чанка из-за этого документа. Это мегаважная штука. Но теперь вопрос, каким образом мы получим эти чанки, да? То есть, когда мы векторизуем, там мы можем отдать в специальную ноду на inмен там весь текст или весь файл, а, и там специальный парсер сам разобьёт на нужные кусочки текста. А нам нужно разбить текст на чанке ещё до того, как мы начнём это векторизовать. Поэтому мы вставляем специальную ноду код. Да, вот её нажимаем и пишем такой код. Мы с предыдущей ноды получаем весь текст, да, то есть, соответственно, весь текст ПДФки, да, определяем chun size 400. И дальше пишем очень простенький скрипт, который берёт этот текст и разбивает его на кусочки размера 400, потому что это самый часто используемый размер чанка, да? И, соответственно, заботимся о том, что если там в конце останется хвостик, да, мы его тоже заберём и образуем из него чанк. Кстати, не пугайтесь, я понимаю, что код сложно писать, да, поэтому в конце этого видео, да, я прямо сохраню скачаю этот файл, да, он будет в формате JSON, положу его в бесплатную Telegram-группу, там ссылка на него будет в описании, и вы прямо зайдёте, скачайте этот GSON, да, нажмёте здесь import from file, и у вас прямо вот этот же самый workflow окажется у вас в NVCM. Так что не надо сейчас пытаться заскриншотить ваш экран, да, и потом распознать текст, да, всё это будет доступно для вас совершенно бесплатно. Соответственно, давайте прямо обе ноды вы выполним подряд. Так, вот мы получили весьвесь текст из ПДФки, да? А дальше выполняем этот код. Прекрасно. Смотрите, у нас обвал образовался массив из 18 элементов. И мы уже внутри разбили весь на весь наш текст начанки по 400 символов. Круто. Дальше, каким образом мы один массив из 18 элементов, да, просто превращаем в 18 элементов? В NCMN есть специальная нода, которая называется Split out. Да. Добавляем её и прописываем, что по какому полю, да, мы сплитуем по чанкам, да, и выходное поле тоже чанк. Давайте мы прямо попробуем её выполнить. Ой, смотрите, прекрасно. И у нас образовалось 18 элементов, да? Каждый элемент называется чан, да, но в каждом элементе уже тот кусочек текста, который нам нужен. Теперь мы начинаем уже работать с нейронкой, да? Добавим ноду, которая называется basic lm chain, да? И здесь нам нужно будет прописать специальный промт. Мы немудрство лукаво, забираем весь этот промт, потому что за нас это уже сделали ребята из антропика, да? Вставляем сюда. И обратите внимание, прямо как они рекомендуют. Мы должны сначала отдать весь текст, да, в теге документа. Дальше, а, мы отдаём весь чанг. И дальше уже просьба наша, да, создай контекст для этого чанга. Весь текст мы уже заблаговременно, да, оставили в ноди рокст. А каждый чанк у нас уже содержится в ноде ch. Соответственно, мы из родтек, да, забираем весь текст документа. А чан мы забираем из предыдущей ноды. И теперь смотрите, как это выглядит всё красиво. Весь документ, да, вот он весь документ купли-продажи. Вот он прямо, да, до самого конца. Дальше начинается чанк. Именно тот маленький чанк, 400 символов, да? И дальше уже просьба определить контекст этого чанка. И дальше, наверное, у вас
10:43

Prompt caching

возникает как раз тот самый трепет: "Как это возможно? А если документ большой? Я что, потрачу все свои деньги на нейронку?" И ребята из Антропика, конечно же, про это тоже здесь говорят. На самом деле, вся история кроется в том, что у различных моделей есть так называемый промткэшинг, кэширование промта. Они говорят, что вот мы зарелизили, и, конечно же, они хотят, чтобы мы пользовались их нейронкой. Но секрет в том, что у всех популярных моделей, от Open AI, от Google, от других популярных ребят, есть кэширование промта. Что это значит? Если вы посылаете в нейронку два очень похожих промта, например, у которых начало идентичное, а отличается только концовка, то алгоритмы нейронки сами закшируют повторяющиеся части и будут производить с ними работы либо с большим дисконтом для вас, либо вообще почти бесплатно. Вот антропик говорит, что кэширование позволяет вам снизить косты почти на 90%. То же самое заявляют в Open AI и в Google, да? Соответственно, выбирайте именно модели, в которых есть кэширование. Это гиперважно, чтобы не слить бюджеты ваши. Да, я точно знаю, что кэширование есть Open Ai и там от 50 до 90% может быть экономия, да? И более того, так как сама задача довольно простая, то есть у нейронки будет на входе весь огромный текст, да, нашего документа, маленький текст, который уже содержится в это в этом документе, и будет просьба его описать. Опять же, мы провели массу тестов, и даже самые маленькие модели отлично справляются с задачей контекстуирования для нашего рака. Поэтому я тут вообще выбираю модель Nно. Она просто, ну, мегадешёвая, поэтому давайте на ней остановимся, да, и, в принципе, ну, давайте запустим, чего ждать. Так как у нас готов весь алгоритм, запускаем. Так, и вот у нас приехал ответ. Смотрите, этот отрывок рассматривает эволюцию модели договора купли-продажи. Этот фрагмент относится к описанию модели. Этот фрагмент относится к обсуждению характеристик. То есть для каждого чанка, да, у нас было 18 чанков. Вот он сделал 18 раз этот запрос. И у нас для каждого теперь чанка есть наш контекст. Задача. Следующая задача технического характера. Каким образом мы слепим теперь вместе контекст чанка и сам чанк. Делаем. Используем нашу любимую ноду Edit field, да, мы уже ранее использовали. И здесь прописываем вот такую историю. Мы в полетекст хотим прописать вот такой expressionшн контекст. И дальше идёт ответ от нейронки. Дальше чан и сам чан, с помощью которого формировался контекст. Давайте попробуем всё это слить. Смотрите, что у нас теперь на выходе. Смотрите, контекст. Этот фрагмент относится характеристике договора куб-продажи. А дальше чанк. Сам чанк идёт вот таким образом. Дальше следующий контекст, да, и дальше следующий чанг. И мы получили 18 кусков информации, то есть чантекстом. И дальше векторизуем, добавляем ноду, да, так как мы используем superbase, да, добавить документы, векторный векторное хранилище. Так вот, мы добавили, друзья, мы уже тыся раз обсудили с вами, каким образом коннектится Superbase, да, и тем
13:54

Connecting Supabase

не менее почти под каждым видео в Ютубе я получаю комментарии, что вот ты не объяснил. Если каждый раз объяснять одно и то же, да, то видео получается очень большими. Поэтому вот сходите на соседние буквально видео, там прямо добавлялась нода Superabase, а генерировались креды к этой ноде, да, а добавлялось туда векторное расширение, там всё это будет. Поэтому не поленитесь, сходите, посмотрите, а потом вам просто станет всё понятнее. Соответственно, мы добавили ноду Superbase, да, добавили аккаунт, а кредок к этой Superbase. Если мы всё сделали правильно, у нас уже подтянутся все всевсе наши таблицы, которые есть в Supase. Опять же, векторные таблицы добавляются чуть чуть-чуть иначе, да, с помощью а SQL запроса. Я вот только что его создал и, соответственно, добавлю его прямо сюда. Так что нам нужно бединги, да? Тут мы не будем опять же ничего выдумывать, просто добавим ноду от Open AI, да, текст 3 small. Дальше нажимаем сюда, да, и добавляем def default data loader. Вот я его добавил. И вот здесь у нас уже нужно будет прямо аккуратненько отнестись ко всему, да, тип данных JSON. Дальше, а, мы должны выбрать Load specific data, да? То есть мы сами определим, какие данные загружать, да? И, соответственно, сюда мы хотим засунуть JSON текст, да, который мы как раз уже объединили в объединили в предыдущей ноди, потом весь контекст, да, потом наш чанк идёт, то есть именно этот кусочек информации, да, и дальше мы, конечно же, добавляем файл title, да, а его забираем из но download для того, чтобы у нас в метод данных сохранялось название файла, да, с которым мы работаем. Так, дальше мы добавляем рекурсивный, да, текст splitter. И обратите внимание, поставьте здесь size побольше, да? У нас чанз никогда не выйдет за этот объём, да, потому что вы видели их размеры, да, они не очень большие, но мы просто хотим убедиться, что весь чанг, который мы сейчас подаём на вход, да, попадёт как одна запись, как единая запись. Поэтому прямо поставим чанйз побольше. Соответственно, на этом мы можем посмотреть, что у нас там пустая наша таблица, да, Docum YT. После этого в Яндекс-диске, да, посмотреть, как выглядит наш файл. И по идее теперь при финальном прогоне весь этот файл, да, должен сначала получить разбивку по чанкам, потом каждый чанк должен получить свой контекст и потом всё это вместе, а вот эти все конструкции должны отдельно завекторизоваться и попасть в нашу векторную базу данных. Ну что, тестовый прогон. Погнали. Так, видим, как работает. Погнали. Тактактак. Опачки. Значит, смотрите, начал векторизовывать. Мы видим количество раз, да, которое прогоняет эта модель. Так, он завершает восемнадцатый раз, да? И пошли векторизовать. Так, и что нам говорят, что наш workflow только что выполнился. Идём проверять. Смотрите, у нас 18 записей появилось. И давайте обратим внимание, как выглядят эти записи, да? И смотрите, как выглядит наш чанк, да? Сначала идёт контекст. Этот фрагмент относится к разделу, да? То есть полный контекст место этого чанка, значение этого чанка внутри документа, потом весь чанк. И то же самое для каждого чанка, да, контекст, потом весь чанк, да? А в метаданных, как мы видим, провалились, провалился как раз наш файл tйтle. И, в принципе, всё отработало круто. Ну и, наконец, давайте проверим, как это работает. Для этого я добавляю очень быстро, да, я агента, да. К нему сразу добавляю чат триггер. Дальше модель от Open AI и Tool. Мы хотим добавить вектор STE, да, который смотрит именно на ту же таблицу, на в которой мы векторизовали данные. Да, вот у нас documents YT. И теперь самое интересное. Давайте спросим какой-то специфический вопрос и посмотрим, как именно возвращаются чанки. Расскажи про сингулярное преемство. Итак, сингулярное преемство - это такой юридический механизм перехода имущества прав от одного лица к другому. Самое интересное, какой был ответ от Супаase? Обратите внимание, да, что когда мы обратились в Superbase, в наше векторное хранилище, да, мы как раз получили вместе с контекстом эти чанки. Соответственно, нейронка уже формировала наши ответы, получая и контекст, и сами чанки. Ну что, обязательно попробовать этот механизм на ваших сложных документах, насколько он увеличит и улучшит качество ваших ответов. Ещё раз, этот флоу прямо забирайте в нашем бесплатном Telegram-канале. Усложнённый флоу, который может работать сразу с большим количеством файлов на Яндекс-диске, а также не только с ПДФ-ками, ещё и с текстами файлами. Он как раз помассивней, более инженерный. Его забирайте в нашей прогруппейте также в прогруппу, если вам интересна тема и вы хотите развиваться, углубляться прямо конкретно в технические знания и в нюансы работы искусственного интеллекта. Ну а на этом всё. Всем спасибо и пока. M.

Ещё от ИИшенка | AI Automation

Ctrl+V

Экстракт Знаний в Telegram

Транскрипты, идеи, методички — всё самое полезное из лучших YouTube-каналов.

Подписаться