RAG | самый полный и понятный гайд
1:55:31

RAG | самый полный и понятный гайд

Владимир Карпухин 03.08.2025 25 153 просмотров 807 лайков

Machine-readable: Markdown · JSON API · Site index

Поделиться Telegram VK Бот
Транскрипт Скачать .md
Анализ с AI
Описание видео
Узел дня. Разбор ВСЕХ нативных узлов в n8n - https://web.tribute.tg/s/FwG Polza AI - https://polza.ai/?utm_source=blog&utm_medium=cpc&erid=2VfnxXH25Vg Приватка закрыта! -------------------------------- https://t.me/vladimir_kkkkk - телеграм канал (смотрите закреплённый пост) Ищите материалы к роликам в тг по названию видео https://github.com/kossakovsky/n8n-installer - репозиторий для установки на сервер https://timeweb.com - домен оформил тут n8n - https://n8n.partnerlinks.io/9f51nckey33z beget - https://beget.com/p2340235/cloud/marketplace/n8n RAG | самый полный понятный гайд. Я, Владимир Карпухин, в этом видео расскажу про то, что такое RAG. Объясню, как он работает. Покажу, какие есть методы улучшения RAG - Контекстуализация, Фильр по score, Реранкинг. Расскажу, что такое Cache Augmented Generation. Объясню, что такое Fine-Tuning. Разберу, когда использовать RAG, а когда Fine-Tuning. Покажу, как загружать документы в векторные базы данных и в RAG через LlamaIndex. Научу парсить документы через Llamaindex. Расскажу, как установить векторную базу данных к себе на сервер. Покажу, как установить Qdrant к себе на сервер. Объясню, как установить Supabase к себе на сервер. Покажу, как использовать все это для создания автоматизации и ИИ агентов в n8n 00:00 - Что такое RAG? 07:00 - Как работают векторные базы данных? 11:04 - Собираем RAG в n8n 30:00 - Что такое CAG? Cache Augmented Generation 39:46 - Кэширование и CAG в n8n 52:10 - Как делать Fine-tuning 1:04:02 - Контекстуализация, Contextual Retrieval 1:15:37 - Фильтр чанков по score 1:19:58 - Реранкинг чанков от Cohere 1:24:52 - Комбинирование улучшений RAG 1:30:03 - Подготовка документов для RAG через Llamaindex 1:38:04 - Установка на сервер Qdrant, Supabase, Embedded модель, Redis, PostgreSQL

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

Что такое RAG?

Это самый полный и самый понятный гайд на Retrievalmented Generation. Мы разберём, что такое RCK, что такое векторные базы данных, что такое к, что такое fнтюниing, как улучшить rec, как подготовить документы для загрузки в векторную базу данных и как установить embeded модель и векторной базы данных к себе на сервер, чтобы не платить деньги за подписки. Для удобства это видео будет разбито на тайм-коды по выше перечисленным темам. А ещё обязательно добавьте этот ролик смотреть позже, чтобы впоследствии к нему возвращаться. Что такое RCK retrieval agменed generation? Ну смотрите, вот как раз я расшифровал для вас, получается это слово retrieval поиск. То есть мы ищем в векторной базе данных релевантные чанки. Аменed - это дополнение. Добавляем эти чанки в prompt, в lm и generation - это генерация. То есть ll выдаёт нам ответ уже на основе дополнительной информации. Вот я сделал скриншот из N8N. Конечно же, всё мы сейчас будем разбирать. Поехали. Да, для начала нужно разобраться, а зачем R вообще нужен? А для того, чтобы LM отвечала на основе ваших данных. Почему так происходит? А вот всё написано, да? Какие проблемы решает? Оm, устаревшие данные. Что это значит? Вот, как вы можете видеть на скриншоте, написано, да, Open GPT4O Mini 2024 0718. Это значит то, что конкретно эта модель обучалась на данных до 18 июля 2024 года. То есть всё то, что произошло после 18 июля и было зафиксировано в интернете где-нибудь, она про это просто не в курсе. Ну вы, наверное, сталкивались с этим, да, то, что а лэмки вообще все, которые существуют, они обучены до конкретной даты, и нужно как-то дать им новые данные. Один из способов это делать это через Webресarch, то есть подключать нейронку к интернету. Но у нас всё-таки специфика задачи другая. В любом случае R решает проблему, то что у LM устаревшие данные. Погнали дальше. Нехватка специализированных данных в LM. Огромное меню в ресторане, например. Ну не обязательно меню, ну какие-нибудь информация о вашей компании, которых, ну просто нету в ЛМ, потому что она, в принципе, не обучалась на этих данных. Либо даже у вас такая компания огромная, то, что LLM обучалась на эти на этих данных, потому что ЛМ они обучались конкретно Ча GPT обучалась на Редите. Вот если на Рейдите до 2024 года как-то всплывала ваша компания и там есть какие-то данные даже внутри ЛМА вашей компании, всё равно это ничего не гарантирует, потому что они будут очень расплывчатыми. как раз-таки RК решает проблему, то что мы даём наш LLM специализированные данные, то есть те данные, на которые она должна опираться в первую очередь, когда формирует свой ответ. И третья проблема - это лимит контекста. То есть ваши данные не влезут в промт, либо будет очень дорого. Ну да, на тот случай, если вы решили, допустим, дать данные о вашей компании LLM, чтобы она отвечала на ваши вопросы на основе данных о вашей компании, и вы думаете: "Ну, сейчас я тогда прямо в промт их и запульну". Но так не работает. Если бы всё было так просто. Во-первых, а если даже они туда влезут, то это реально будет дорого. Но, скорее всего, вы столкнётесь с лимитами контекста, потому что у LLM языковых моделей есть контекстное окно. Вот я, кстати, решил у Клода спросить, какое контекст окно у самых популярных LLM. И вот вам наглядная демонстрация устаревших данных. Да, смотрите, что он мне говорит по состоянию на начало двадцать пятого года, а сейчас уже давно не начало двадцать пятого года. И он мне даёт устаревшие данные. То есть он мне даёт clotд OPUS 3, хотя отвечает мне Clotд Sonet 4, да, Clot 3 set, ну и так далее. То есть это устаревшие уже модели, которые не актуальна. То есть у него нету, он не обучался на тех данных, которые есть сейчас. Вот вам демонстрация проблемы. Ну вот, например, Son4, да, у него ограничение в 200. 000 токенов в контекстном окне. Это значит то, что ну у вас помимо вашего промта есть же ещё история сообщений, которая сохраняется, и это всё входит в это контекстное окно. То есть лимит там есть и его нужно как-то решать. Как работает к? Понятно, зачем нужен к, какие проблемы он решает. Самое главное, естественно, чтобы LLM при ответе в первую очередь опиралась на те данные, которые вы е скормили. Но тем не менее есть ещё проблемы, которые она решает. Как работает? А, смотрите, вот она схемка, да? Промт идёт в embeded модель, которая трансформирует текст вектора. Вот у нас проompt идёт в embed модель. Всё покажу в Nem, не переживайте, на практике всё будем воспроизводить. Прот идёт в embeded модель. Embeded модель преобразует наш промтте текст. в векторы, в числовые значения. Затем полученный вектор сравнивается с векторами внутри векторной базы данных, то есть сравнивается с данными которые мы предварительно загрузили. Потом вектора из векторной базы данных, которые больше всего похожи на наш вектор, который мы туда запульнули, передаются в наш контекст. Всё. Вот так это и работает. Почему именно векторные базы данных? Об этом чуть позже. Ну вот, кстати, ключевая деталь тоже. Векторы позволяют искать в базе данных данные по смыслу. Это семантический поиск, а не поиск по ключевым словам. Именно поэтому нам нужны векторные базы данных. Это очень удобно. Вот пример, да, справа рассмотрим пример. Промпт. Из какого материала у Володи стол? Запрос пользователя, да? Embeded модель переводит текст векторы. То есть наш текст она переводит в числовые значения векторы. Retrieval внутри векторной базы данных ищет, какой вектор больше всего похож на вектор пользователя. Видит, что тот, где идёт речь про предметы в комнате Володе, дальше найденные вектора передаются в промт ll вместе с исходным запросом пользователя. Вот смотрите, как это примерно происходит, да? Запрос пользователя: "Из какого материала стол, найденный контекст? У вологи в комнате, заполняющий свет, шкаф и деревянный стол. То есть он поискал среди векторов нашёл самый похожий, да, по его мнению, системный промпт получается. Дай, то есть то, что мы пишем в системный промт нашем нашей lm. Дай ответ пользователю на основе найденного контекста. А какой у него контекст? Вот этот контекст и вот такой запрос пользователя. То есть вот это вот то, что попадает в нашу LLM. То есть она уже не сама выдумывает, из какого материала у Володи стол. Она отвечает на это, исходя из того, что мы нашли в векторной базе данных. И она отвечает у Володи деревянный стол. И вот, да, я поясняю то, что если бы мы просто спросили сразу lм без поиска по базе данных, тот же вопрос, она бы выдумала какую-то дичь. Это правда. Она бы, скорее всего, сгаллюционировала, ну, выдумала бы какую-то несуществующую какие-то несуществующие факты. Едем дальше. векторной базы данных, да? Как

Как работают векторные базы данных?

загрузить туда наши данные? Обратный процесс. Смотрите, мы берём наши данные, берём нашу там, я не знаю, книгу в виде пдфки или какие-то там документы тоже PDF или не PDF, не обязательно. Мы сначала их готовим определённым образом, да, об этом будет позже видео, поэтому смотрите до конца. Потом мы точно так же, как мы преобразовывали наш промт в векторы с помощью eded модели, мы наши данные точно также с помощью тот же embeded модели. Это, кстати, очень важно, они бывают разные, нужно брать именно ту же. То есть embeded модель должна быть такая же, с помощью которой вы впоследствии собираетесь искать в вашей векторной базе данных. На практике будет понятнее. Сначала разбиваем начанки, наш текст. То есть у нас попадает огромный текст. искать, ну, огромный текст. В чём смысл? Просто загрузить огромный текст в векторную базу данных. Мы его разбиваем на части, на много маленьких частей. Каждая из этих частей называется чанк. Все эти чанки мы преобразуем векторы, прогоняем их через bдет модель, и они у нас оказываются в векторной базе данных. В принципе, вот я только что это всё рассказал. Но ещё их нужно подготовить. К примеру, если в ваших документах, которые вы загружаете в векторную базу данных, есть текст, понятно, он спокойно с этим справится, но вот фото и таблица, если вы пробовали уже рак системы, то вы, наверное, в курсе то, что фото и таблица он переваривает не особо хорошо. И мы это тоже будем делать видео, как я уже говорил, будем это делать через ламы индекс, об этом чуть позже. Вот, кстати, как происходит сравнение векторов более подробное. А, смотрите, это всё упрощённая модель. Понятно, в реальности там немножечко посложнее. Ну не немножечко, нормально так посложнее. А короче, как происходит сравнение векторов? Вот опять же нас наш опять же наш этот же пример, только на сравнение векторов, да? Получается промпт. Из какого материала выводит стол? Он преобразуется векторы через embeded модель. Как выглядит вектор вообще? Вектор - это числовое значение. Вот оно выглядит, ну, примерно вот так, да, допустим, там много разных циферок. Что значит эти циферки? Да, эти цифры могут значить что угодно. То есть каждая из этих циферок - это так называемые мбединги. А если вы как бы вникали в то, как работает LM, вы в курсе то, что внутри LLM а тоже есть такая тема, то, что она тоже разбивает запрос на эмбединге. Но сейчас не об этом. А внутри этого векторного значения есть вот эмбединги. Вот каждое число - это мembдинг. И эти эмбейдинги, цифры, ну, числа, наверное, я не знаю, они могут значить что угодно. К примеру, помещение, материал, допустим, это материал, вот это предмет, вот это вот еда, а вот это цвет. Ну, и время суток, там, какое-то из них. И смотрите, ещё прикол в том, то что а мы-то не знаем, что они конкретно значат. Почему мы не знаем? Потому что как тренировали вот эти вот eded модели вообще в целом лолмки ей скармливали данные и она сама уже создавала вот эти вот тембейдинги и сама приписывала каждому числу там своё значение для eded модель в данном случае понятно что значит эти числовые значения, за что они отвечают, но объяснить она это нам не может и сами мы тоже не до конца понимаем, что они значат. Вот такая вот интересная деталь. Вот. Но это немножечко отоп. Сейчас тема видео в целом другая, да. Вот, кстати, я опять это описал. Ну, давайте прочитаю. Может быть, тут лучше формулировка. Это эмбединги, которые делает деedмодель. И за что каждый из них отвечает, мы знаем плохо. Хорошо знать неронка. Мы реально хз, что именно это значит и за какой бединг, что отвечает. Это всё упрощённая модель. Опять же в реальности всё сильно сложнее, но для работы в NOC man и создания автоматизации углублённое понимание не требуется. Если нет необходимости, не надо туда лезть. Как говорит Алекс Хармози, сфокусируйся. Ну действительно, давайте сфокусируемся на релевантных знаниях. И теперь у нас

Собираем RAG в n8n

практика N8 man. Позже в ролике расскажу, как установить векторную базу данных Квадранabase и embeded к себе на сервер. Поэтому смотрите до конца. Это правда. Смотрите, что мы делаем. Мы загружаем документ PDF векторную базу данных. Строим классический rec. Строим rec. Сначала мы загружаем документ в векторную базу данных. В векторную базу данных будем брать квадрант, потому что квадрант - это самая быстрая и вообще самая лучшая векторная база данных, которая доступна в N8N. Чтобы загрузить корректно в векторную базу данных документы, мы для начала поставим вот такую штучку. Все шаблоны кролику, вообще все, которые тут есть, все будут в моём общем Telegram-канале, поэтому переходите туда, подписывайтесь сразу. Там помимо этого тоже есть полезная информация. Мы ставим вот такую штучку on form submission. То есть мы через форму загружаем наш документ. Здесь а вот тут нужно поставить то, что мы загружаем element type. Вот так отформы элемент. Жмёте файл name ставите data и ставите вот так через запяту все форматы, которые вы хотите принимать. Ну я поставил PDF, txt и doc. И теперь что мы делаем? Теперь мы выходим вот сюда и нажимаем на кнопочку Execute Workflow. Вот у нас открылась форма. Нажимаем выбор файлов. Ну и загружаем вот этот файл. Я специально подготовил классический rec. Отлично. Ой, он уже пошёл загружаться в нашу векторную базу данных. Давайте мы пока что его восстановим. Смотрите, чтобы постоянно там его не загружать туда-сюда, мы поставим P, чтобы он запинился, наши данные закрепились. И здесь мы ставим экстраct втром файлу. Здесь ничего менять не надо, просто extract from pdf и ставите дата. То есть вот у нас дата идёт на входе. Здесь мы тоже его запиним. Всё отлично. То есть у нас на этом этапе вот извлекаются наши данные из файла. Извлекается кривенько, корявенько, потому что данные нужно готовить перед этим, да. Мы пока что самые базу, самую основу разбираем. Смотрите, что происходит дальше. Мы достали вот с помощью extract from file наш текст. То есть вот тут его можно посмотреть поближе. Вот он у нас. Вот он у нас вот весь наш текст. Мы его извлекли. Теперь мы его, собственно, загружаем в векторную базу данных. Мы открываем квадрат вектора store. Как это сделать? Просто пишете quadrant quadrant vector store. И берёте document vector store, ну либо что-нибудь другое. Достаёте. И что мы тут делаем? Здесь нам нужно настроить следующие штучки. Во-первых, вам нужно как бы подключиться к вашему аккаунту Quadrant. Квадрант можно поставить к себе на сервер. У меня на своём сервере он есть ещё в облаке. Ну, я рекомендую, конечно, на сервер ставить. Так проще потом. А, ну мод тут не меняем, он будет insert documents. Quadrant collection - это мы выставляем, куда будет сохраняться. Я могу нажать from list, конечно, и вот тут выбрать те библиотеки внутри базы данных, куда я могу это сохранить. Ну, я, допустим, хочу новую создать, да, ID и напишем что-нибудь типа классический. Embing size - это, короче, ну, количество векторных представлений, сколько квадрант может за раз обработать. Если вы поставите 200, то у вас он, ну, вот один раз работает. Если вы поставите вот у меня 24 айтема, допустим, 10, то будет несколько раз срабатывать. Это можно, чтобы не грузить, допустим, ваш сервер, потому что если сразу много грузить, то будет сложнее. Ну, пусть будет 200, да. Теперь дальше мы, конечно же, ну, тут больше ничего не делаем, выбираем нашу embeded модель, то есть ту самую модель, которая возьмёт текст разбитый на чанке. Ага, он уже тут разбит на чанке, но мы всё последовательно мы делаем. Просто я, ну, заранее уже выполнил execution. Вот я обновил, чтобы не отвлекали зелёненькие штучки. Тут мы выбираем нашу модель, то есть она по дефолту будет пустой. Здесь вы выбираете ту модель, а, с помощью которой вы, ну, преобразуете, получается, ваши чанки в векторы, и потом они загрузятся векторную базу данных, да, можно через op это сделать, можно через любые другие, можно через она этоed модель локальная, которая установлена на моём сервере, то есть я за неё ничего не плачу. А запоминайте обязательно, какую вы выбрали модель, потому что впоследствии ровно с помощью этой же модели вы должны будете вытаскивать, когда будет выстроен сам reg при поиске в векторной базе данных. Вот она модель одна. Выбираю её и подключаю. Потом мы здесь что делаем? Мы подключаем а документ. Документ вот этого у вас изначально не будет. И вы ставите вот сюда добавить либо с Гитхаба. Ну, с Гитхаба что нам выгружать. Default data loader. Отлично. Да, выбираем его. И вот здесь вот мы ставим load input data дата нам не надо, потому что он иначе возьмёт вообще вот смотрите на предыдущем шаге вот тут вот вообще всё возьмёт, что у нас тут есть, весь этот мусор и загрузит это всё в нашу векторную базу данных, разовьёт начанки. Понятно то, что вот эта вот информация нам нахрен не нужна. И вот это тоже нам нужна только эта информация. Поэтому, естественно, мы жмём не input data, а specific data. Сюда ставим текст. текст сплитен, то есть то, как разделять наш цельный текст длиннющий на чанки, как я говорил, он же перед тем, как загрузиться в векторную базу данных, он разбивается на чанке, потом загружается в embed модель. Смотрите, как он разбивается на чанке. Если оставится simpleм то вот он говорит нам, будет разбиваться каждую 1. 000 символов с 200 символами наложения. То есть, как бы вам объяснить, да? Вот, например, вот эта строка у нас начинается с такого значения. N 8N выходит в лидер почти 100. 000 1. 000 звёзд GitHub. Это начало строки. И наложение значит то, что конец предыдущего чанка будет заканчиваться на эту же строчку, да? И сколько именно будет символов в строчке, зависит от вот этого параметра. Вот здесь, допустим, 200, да, символов. Давайте посчитаем. Нет, я не буду считать, это долг. Допустим, так, да, вы можете поставить 100 символов, тогда будет предыдущий чанк, получается, будет совпадать с началом нового чанка вот только на такой количество символов, только вот на эту небольшую, на эти несколько слов. Но я не хочу, чтобы он был дефолтный, вот simple и чтобы он не был дефолтный. Мы ставим custom. И в случае, если он custom, у нас появляется вот такая вот штучка default data loader. Теперь мы можем не только отрегулировать, сколько символов будет в каждом чанке и наложении, мы можем выбрать ещё текст splitter. То есть они тут есть разные. Токен Сплитте - это если вы хотите токены экономить, вам важно значение количества токенов в каждом чанке. КТРТ СпIT - это который тупо делит вот весь текст на чанки. Там вот 500 символов разделил, 500 символов разделил. Recur of Chactтер Splitter - это который пытается там искать абзацы, пытается искать концы строк и, короче, делить более грамотно, чтобы не было прямо жёстких обрывов между чанками, чтобы не было такого, что у вас чанк заканчивается на слово там приш. Ну, а следующий чанк продолжается со слов л сюда. То есть он слово пришёл, разделил на две части. Как бы такое здесь тоже возможно, но тут всё равно более щадящий режим, поэтому мы выбираем его. И вот тут уже мы можем выбрать те же параметры. Ну, я не помню, что я тут поставил, по-моему, да, 300 и 20 я поставил. Ну, давайте также и выберем, да. Вот у нас текплиitр ставим 300, ставим 20. Отлично, да, товарищи, поздравляю. Поздравляю вас, друзья. Вы теперь вы в курсе, как загружать документы в самом простом виде в нашу базу данных. И теперь всё, что нам остаётся, мы вытащили текст. То есть вот он наш текст из документа. Сейчас покажу, что за документ. Документ вот этот вот. Что-то с перплексе я там собрал, я не помню что. Ну, чисто экспериментально для видео. Теперь мы можем загрузить в нашу векторную базу данных. Давайте только поменяю чуть-чуть. Будет не классический к видео, классический к. Вот я открыл, а вот в соседнем окне, получается, квадрант локальный на моём сервере. И сейчас оно тут появится. Нажимаем Execute Workflow. Всё, пошёл процесс. Мы B сай поставили большой. Он, скорее всего, один раз только обработается. Отлично. Оно закинулось в нашу векторную базу данных. Смотрим, ничего нет. Обновляем страницу. А у нас дополнительные появились, да? Вот смотрите, второе видео, классический рэк, пожалуйста. Да, открываем. И вот они наши чанки, да? То есть у нас есть ещё метадата и есть контент. Мы нарезали, кстати, прямо небольшими чанками. То есть, что я там 300 символов поставил. Вот оно прям по чуть-чуть оно и нарезалось, да? Вот смотрите. Ну вот это ещё как-то нормально выглядит. Вот это вообще ужас. Ну это неважно. Главное, что оно сработало. Есть ещё тут метаданные. Пока что вот без этого обойдёмся. Отлично. Наши чанки уже есть в нашей базе данных. То есть всё, мы загрузили чанки в нашу векторную базу данных. Мы разбили наш документ на составные части. Каждую из этих частей мы преобразовали векторы и закинули в нашу векторную базу данных. Ну зачем мы это делали? Для того, чтобы быстренько по нашему документу производить поиск, допустим, да? Ну или там подгручить LLM для других целей. Отлично. Теперь мы переходим к workflow, который у нас как раз-таки по классическому. Вот он. Открываем. Смотрите, что у нас здесь. Это у нас adentic. Мы его чуть попозже разберём. Вот у наш классический. А для начала разберём схему. Здесь просто приходит сообщение вот внутри чата N8N, чтобы там Telegram не подвязывать. Можете подвязать Telegram. Ну, это чисто ради демонстрации уже сделано. Потом у нас идёт тот же Quadrant Vector Store, только мы ставим тут режим уже get MAN. То есть мы забираем данные из нашей векторной базы данных. Тут мы ставим тот лист, который мы только что туда загружали. Вот мы вот этот брали, если помните, видеоклассический rec. Тут у нас чат input, то есть то, что мы пишем в чат. А это у нас количество чанков максимальное, которое мы забираем из нашей векторной базы данных. На самом деле вот у меня вот тут в примере было описано, да, ну вот то, что он находит на один контекст у Влоди в комнате заполняющий свет шкаф, деревянный стол. Это по сути один чанк. На самом деле в реальном к один чанк никогда особо не загружается. Ну вы, конечно, можете так поставить, но это странно. Хотя бы там два-три, но тут я ставлю вот четыре. То есть он найдёт четыре самых релевантных чанка по нашему запросу и закинет его в промт внутрь нашего LLM. Вот здесь стоит та же MVAD модель, как я говорил, что и была в том Workflow, с помощью которого мы загружали в нашу векторную базу данных документа. Потом агрегат - это мы просто, ну, сейчас увидите, будет более понятно, чтобы в один элемент склеить все наши мбединги, которые вытащили из векторной базы данных. И дальше мы закидываем в наш LLM. Закидываем следующим образом. Просто ставим это вопрос пользователя, вот где он у нас будет вопрос пользователя. И ответить на него на основе этих данных. Вот этой штуки, чтобы разделить просто наши чанки. Сейчас на практике будет понятнее. Так, ну теперь давайте, да, на практике проверим, как это работает. Пишем. Как вы помните, там документ что-то про NN было, да? Я его не читал, если честно. Что знаешь про NN? Спрашиваем его и смотрим, что он ответит. Он отвечает нам. Отвечает нам. Следующее, пожалуйста. N8N - это популярная Open Source платформа для автоматизации рабочих процессов. Там запущено в девятнадцатом году, к середине двадцать пятого года. Почти 100. 000 звёзд на GitHub. Смотрим, да. Видите, вот ровно та же информация. 168 новых нот в месяц. Ни фига себе, кстати. Короче, да, она берёт информацию из нашего документа и на основе её отвечает. А теперь как это происходит? Ну, подробнее. А вот наш чат инпут поступает, да? Что знаешь про N8N? Он что-то знает явно. Короче, сначала квадрант идёт, смотрите. А в квадранте он как раз-таки и достаёт самые релевантные чанки. Он достаёт те чанки, которые, по его мнению, оказались самыми релевантными. Что такое его мнение? Его мнение - это конкретные математические вычисления. У него нет мнения. Это векторная база данных. Как он определяет самое релевантное? Он высчитывает значение скор, то есть ну соответствие, типа насколько, ну, грубо говоря, наш промт, вот что знаешь N8N, соответствует тем чанкам, которые есть внутри векторной базы данных. Как вы помните, он сравнивает с тем, что есть внутри векторной базы данных. И то, что оказалось с наибольшим параметром скор, он оттуда достаёт. То есть, видимо, он сравнил и увидел то, что вот, например, вот этот чанк по его вычислениям оказался вот самым релевантным, да, хотя тут информации мало. Вот дальше вот это чанк тоже и вот этот чанк. В принципе, они, ну, вполне себе реально релевантные. Тут речь идёт про N8N, да. И вот они выписаны наши значения релевантности. На самом деле достаточно неплохие значения, достаточно высокие. Отлично. То есть ещё раз, что произошло? Наш промпт залетел в векторную базу данных, преобразованный в вектора, вектор, точнее, сравнился с векторами, которые есть в этой векторной базе данных. Значение сравнения - это значение вот это вот скоe. И те, которые оказались наиболее на него похожим, достались из векторной базы данных. Вот что произошло. Теперь достали мы четыре штуки, как я говорил, потому что мы поставили элемент четыре. Если мы поставили больше, ну, было больше. Теперь вот у нас четыре айтема передаются. Мы, чтобы их объединить в одну цельную строку, мы ставим агрегат узел. Тут individual fields и документ page content. Просто, ну, здесь просто вот так делаете. Документ page content, всё, приносите. Можно field поставить, но я не хочу. Короче, мы объединили их в одну в один цельный айтем, как тут видно, да? Тут их было четыре, стал один. И теперь уже этот айтем мы закидываем внутрь нашего лма. То есть мы пишем ему: "Это вопрос пользователя. Вопрос пользователя - это какой? Вот что знаешь про Nem? " Ответь на него на основе этих данных. Вот мы берём вот так вот page content и закидываем сюда. Но этого недостаточно. То есть он закидывает все наши чанки, как видно, да? Все наши чанки закидываются. Вот по мы, короче, чтобы было проще ламки нашей различать, что происходит, вот добавляем вот такую штучку. Вот можем её брать. Вот видите, всё склеилось. А мы как бы добавляем её обратно, чтобы разделить наши чанки. Вот 1 2 3 4, чтобы она проще в этом всём ориентировалась. Ну теперь лмке уже проще что-либо делать. У неё есть вот эти вот данные. И она, как указано в промте, отвечает на основе этих данных. Она уже не выдумывает что-то и так далее. То есть, ну, типа, вот так и работает, по сути, REC. Что ещё тут есть важного, да? Какую модель LM ставим? JPT41 mini. И вот тут что мы выбираем? Польза AI. А что такое польза AI? Вот тут у меня написано. Польза AI - это, по сути, аналог онроутера, но дешевле. Оплата в рублях. Не надо заморачиваться с криптой и зарубежными картами без комиссии за конверсию валют. И в отличие от open онроутера, там будут ещё позже доступны нейронки для генерации изображений видео и аудио. И всё работает через единый API ключ. То есть вот так вот их сайт выглядит. Вот у меня тут API ключи. Здесь реально оплата за рубли у вас. Ну вот один API ключ, через который работают все лэмки, которые вам нужны. Вот смотрите, здесь можно поискать нейронки, которые вам нужны. Можете вот по длине контекста, да, поискать. Можете по цене промта поискать, вот выбрать там файл изображения. Всё подряд. Можете выбрать тут модели конкретные нейрона, которые вам нужны. Например, мне нужна какая-нибуд вот аджека, да, я даже не знаю, что это. И тут описание модели. То есть всё, всё описано. Как подключить API ключ? Очень просто. Вы просто копируете ваш API ключ, который у вас есть, э, после регистрации, который вы получили. Переходите обратно в NCMN и берёте вот здесь вот chat model. Вы берёте, ну, пишете OpenI chat Model. В Open Chat Model вы делаете следующее. Вы вот здесь вот ставите ваш API ключ, а в URL вы меняете OpenI на следующий URL, то есть ставите HTPS API польза AI/api V1. Теперь вы можете открыть сюда fromlist и вам покажут все доступные модели, которыми вы можете воспользоваться. Вот, например, 37, да? А смотрите, что у нас дальше. Да, мы разобрали, получается, загрузили документ векторную базу данных, но это самый простой кг. В реальности приходится улучшать. Об этом позже видео, да, у нас будет сейчас про улучшение и все шаблоны из ролика в общем ТГ канале. Но мы-то не разобрали ещё сentic RCK, который чаще всего на Ютубе-то фигурирует. Смотрите, что такое Gentic R. То есть мы вот эту штучку нашу переносим сюда. Вот R спросим, ну напишем N8N, я блогер. Посмотрим, что он выдаст. Вот смотрите, он мне пишет то же самое, да, на основе нашего документа. Nos блогер. Можно сделать следующие сведения. Там как работает Adentic Crack. В чём вообще разница? Здесь разница в том, то что мы вместо того, чтобы напрямую направлять наш промт в как бы сразу векторную базу данных и искать там, мы сначала его закидываем в агента, а у него уже, в свою очередь, есть инструмент - это векторная база данных. И так, как мы ему прописали в промте, просто мы ему рассказываем то, что у него там есть инструмент, есть контекст, который мы даём. Если ничего не нашёл, пиши контекст не найден. Вот мы ему говорим: "А что у нас залмка? тоже от польза. Я поставил GPT 4. 1 Mini. Кстати, что ещё появилось в NOMAN? По-моему, в недавнем обновлении можно поставить, а, enable fullback model, то есть ту модель, которая сработает, если это не сработает. Ну, как видно, всё в порядке, но мне было интересно. Уже можно поставить две модели, если одна не срабатывает, подключается вторая. Это, кстати, реально прикольная фишка. Ну и смотрите, то есть потом он сам уже решает, агент как бы уже сам решает, какой запрос отправить в квадрант, какой вектор туда запульнуть. он уже решает сам. Он не запуляет просто наши запрос, как было здесь. Он уже сам решает. А давайте посмотрим, что он, кстати, решил. Да, он решил запылить вот такой запрос. Вот написано NVMN я блогер, а он решил его поменять и запустить вот так вот. NVCN блогер. И вот он нам нашёл, получается, контекст. В остальном тут то же самое. Вот, кстати, значение векторов. Можете посмотреть. Мы запульнули в Аламу. Вот NVM блогер. Вот он его преобразовал. То есть по факту наш запрос NVN Я блогер в векторах выглядит вот так. Ни хрена себе. Ну, очень, очень много цифр. Сам решил, какой запрос отправить на основе нашего запроса. Сам получил ответ из векторной базы данных, выдал нам сразу ответ. Такой агент, короче, ну, он имеет смысл тоже. Нужно, ну, как бы тестировать и как бы анализировать, предполагать, ставить то, что подходит конкретно под задачу. Потому что если запросы к вашему агенту будут такими достаточно абстрактными, то лучше поставить, конечно, предварительно агента, который будет, может быть, и не обращаться к векторной базе данных, но хотя бы менять запрос пользователя таким образом, чтобы его можно было нормально заполнуть в векторную базу данных. То есть, чтобы он был более корректным для этого. Ну, в любом случае, вот, то есть мы разобрали самый классический, самый простой. Всегда ли нужен к? Переходим

Что такое CAG? Cache Augmented Generation

дальше, ребята. Смотрите, прежде чем говорить об улучшениях recк, мы поговорим про CK и fine tюниing. Бывает ситуации, когда вам кажется, что надо использовать rec, а на самом деле надо использовать либо к, либо fтюнинг. То есть вы хотите, допустим, чтобы ваша модель лэмка отвечала на основе ваших данных, и вы думаете: "Ну, значит, нужно использовать rec. Все вокруг говорят, что для этого нужно использовать rec. " Но как бы не тут-то было. Есть две вот такие штучки. Во-первых, кг. Cash augmented generation. Это когда вы загружаете ваши данные какой-нибудь документ прямо в пром для lm. Приехали. Я только что говорил то, что так делать, ну, странно. Ну, прямо так я не говорил. Ну, короче, скорее всего, по моей речи считывалось то, что читали вы между строк, так сказать, то, что, ну, такой подход мы не используем, потому что он не влезет в контекст. А даже если влезет, это будет дорого. Угу. Но не совсем. Сейчас расскажу про фишку, да, одну. В контекст он реально не влезет. То есть, а кг подходит для тех случаев, где у вас, ну, не супер огромные какие-то документы, которые вы грузите в вашу LLM. Так делать не надо. То есть, если у вас там реально простое меню в ресторане какое-нибудь, не особо большое, там на 5-10 страниц, в целом нормально, оно влазит, будет нормально работать. И смотрите, фишка, как мы экономим наши токены, потому что об этом здесь и будет речь. К. Но это же дорого. Нет, это не то же самое, что просто запульнуть ваши данные в лэмку. Здесь нужно ещё коеч поменять. Ваши данные всегда одинаковые. И если указать специальные настройки в LLM, она будет их кэшировать. То есть, смотрите, мы отправляем наши данные вLM. Она проверяет, есть ли они уже в кэше. А когда они есть в кэше, когда наш предыдущий запрос был таким же. Если их нет в кэше, то она их сохраняет. И тогда уже следующий наш запрос, он будет наши данные есть в кэше. Они извлекаются из кэша, и нам отвечает с использованием кэша. И получается экономия и скидка для пользователя. Какая именно экономия, сейчас тоже расскажу. Мы отправляем наши данные в ЛМ, и она сохраняет их в кэше. Теперь, когда мы в следующий раз отправляем тот же промт, но с незначительными изменениями, lм просто извлекает данные, загруженные в кэш из предыдущего запроса. Это обеспечивает экономию, что выгодно для Mmм, и она предоставляет нам скидку при использовании кэширования. А ещё это быстрее работает. Ну, это быстрее, чем Rк работает, это правда. Если вы даже не знаете, что такое кэш, как бы оперативная память у вашего компьютера, там, телефона и у нейронки lм, у неё как бы тоже есть оперативная память. Если мы просто отправляем в неё запрос, ей приходится производить больше действий, а тут мы его сохраняем прямо в кэш, как бы в оперативную память. Мы будем использовать модели от антропик, потому что в них можно сохранять кэш до часа. Ага, вот фишечка. Сейчас будет подробнее. Экономия на каждый последующий запрос составит до 90%. А это очень серьёзная экономия. И сейчас я наглядно всё покажу. Ну, есть ограничения, да, там у разных моделей то, что вот Clots Conet 3. 5 ограничение 40. 000 токенов в минуту. Других моделей примерно столько же. Это речь о том, то что не стоит загружать туда прямо огромные документы. Ну, в этом просто смысла мало. Лучше загружать туда небольшие документы, плюс ограничение в минуту и контекстное окно. И по стоимости конкретно клод, когда мы просто отправляем наши данные в LM, они стоят, допустим, ну, один там рубль, 1 рубль, доллар, не знаю, давайте 1 доллар, когда мы загружаем их в кэш, пятиминутный кэш, то есть там есть разные настройки у клода. Есть, чтобы 5 минут хранилось, есть, чтобы час хранилось. Если мы загружаем в настройку, чтобы оно хранилось в кэше на 5 минут, то наш запрос будет дороже нашего обычного запроса в lлmм, то есть 1 доллар в 1,25 раза. То есть он будет стоить уже 1,25 доллара. Но смотрите, в чём прикол. Когда мы впоследствии к нему обращаемся, он теперь уже читает информацию из кэша, токены из кэша читает. И вот токены чтения кэша в 0 раза превышают базовую цену входных токенов. Если у вас плохо с математикой в 0,1 раза, это значит то, что 1 x 0,1, это равно 0,1. Скидка как раз-таки получается 90%. Если вы, ну, ровно тот же текст отправляете, что и в предыдущий раз, там понятно, что он меняется там периодически, но большая часть текста, который мы будем отправлять, он будет таким же, поэтому это актуально. Но если вы прямо идентичный текст отправите, вот, например, экономия, скидка для пользователя, запуляете в LLM, потом а запуляете тот же промт, экономия, скидка для пользователя, но уже с настройкой кэширования. Он будет стоить 1. 25 долларов, но зато последующие запросы будут стоить уже 0. 1 доллар. А если бы мы не настроили кэширование, то у нас бы каждый раз, когда мы запуляли наш вот этот промт VLM, стоил бы 1 доллар каждый раз. И смотрите, есть ещё тема записывать на 1 час. То есть мы можем записать в кэш, как я сказал, на 5 минут, а можем записать на 1 час, чтобы наши данные в кэше хранились в течение часа. И тогда уже токены записи в кэш будут стоить в два раза дороже базовой цены токенов. То есть, чтобы записать в кэш, мы уже будем использовать не 1,25 доллар, а 2 доллара. Но при этом чтение будет стоить столько же. Впрочем, я думаю, вы поняли, насколько это выгодно. Ну давайте дальше-то почитаем. Вот важный момент, когда использовать КК вместо reg. Когда важна скорость? Потому что это быстрее. Когда данных не очень много, они статичные и влазят в контекстное окно lм, да? Когда не хочется усложнять, потому что рек делает сложнее, ну, вероятность возникновения ошибки больше. Вам нужно где-то держать вашу векторную базу данных. Для этого нужно там арендовать сервер. И когда у вас статичные данные, то есть у вас, допустим, меню в ресторане и оно там, ну, не меняется там каждые 2 дня. Если оно у вас меняется каждые 2 дня и вам нужно постоянно фиксировать эти изменения, то лучше использовать R, потому что вы можете настроить просто, ну, каждый раз просто загружать через форму, как я показал, там или через Google Диск ваш документ, векторную базу данных, он будет обновляться. Ну тогда лучше использовать. Но когда статичные данные, они особо не меняются, там по нескольку месяцев там даже, да, даже если раз в неделю там особо не сложно их поменять, то можно использовать Кэк. И вот смотрите пример, самый наглядный пример вот такой дефолтный. Первичный консультант по продукту отвечает на часто задаваемые вопросы. Как здесь хорошо подойдёт, так как это первычная консультация. Данных о продукте не очень много, и они влезут в контекстное окно языковой моделию. Также к этому боту будет достаточно часто обращаться. То есть если это буду делать хотя бы раз в час, этого будет достаточно, чтобы данные не стирались из кэша. В этом случае проще дешевле к использовать, а нек. То есть, смотрите, как я говорил, мы можем настроить кэширование на 5 минут, а можем настроить на 1 час. В случае, если мы настраиваем кэширование на 5 минут, у нас как происходит? Допустим, мы записали наши токены в кэш, проходит там 4 минуты, даже 55 секунд, и мы закидываем вопрос заново, и мы читаем наши данные с кэша. То есть мы успели за 5 секунд до окончания как бы времени хранения наших данных в кэше. И в этом случае, если мы читаем наши данные с кэша, хранение наших данных в кэше с этого момента продлевается ещё на 5 минут. И нам нужно опять успеть в это окно, ну как бы закинуть промт, чтобы наши данные с того момента, как мы закинули новый промт, ещё на 5 минут остались в кэше. И то же самое работает с часом. То есть если у вас, допустим, какой-то там бот, ассистент, консультант первичный, и в него люди обращаются хотя бы раз в час, то тут точно надо использовать кг. при условии, что вот это всё описывает ваш случай, вот при этих всех условиях лучше использовать кэк, потому что вы, ну, представляете, у вас там реально меню какое-нибудь там, ну, я не знаю, меню там, а не знаю, может, вы продаёте деревянные кружки и у вас, допустим, информация о деревянных кружках, там пять страниц, допустим, полстраницы информация про сами кружки, остальное - это самые популярные вопросы пользователей, что надо на них отвечать. И у вас очень активный трафик. Ну, и, короче, вам пишут люди вашего бота хотя бы раз в час. Тогда вы вообще экономите жёстко. Вы вместо обычной генерации, вместо того, чтобы платить там, ну, условно, доллар за каждый промт, вы будете платить 0. 1 доллар, опять же, условно за каждый промт. А, ну и давайте, конечно же, разберём КК в N8N. И важный момент, КК есть не только в Antropic, он есть и в чате GPT, но в чате GPT нету на час, по-моему, есть на 5 минут. Конкретно на час, по-моему, был ещё в Google Дмине, но в Google G что-то не хочу им пользоваться. А клодом я хочу пользоваться. Вот. И сейчас я буду показывать настройку для клода. И не все модели поддерживаются. Поддерживаются вот эти вот модели clк 3, 35 там. Вы можете в документации колода почитать, не так уж и сложно её найти. Ну и что мы делаем? Мы считаем количество токенов наших данных. Сравниваем с контекстным окном модели, строим квен. Все шаблоны из ролика в общем Telegram-канале. А ещё есть приватка, кстати. Да, важный момент, ребята. Давайте я вот так сделаю. Должен был об этом в конце рассказать. У меня есть приватка, там выходят дополнительные всякие материалы, более углублённые. Там мы разбираем такие серьёзные, короче, более реальные проекты, чем те, которые обычно попадаются на Ютубе. Там я сделаю сейчас форму для предложения тем видео и тем постов. И там можно задать мне любой вопрос и получить на него ответ лично. И у нас ещё есть чат как бы единомышленников, где там тоже ребята делятся своим опытом, отвечают друг другу. И если вы хотите к этому всему присоединиться, то, пожалуйста, переходите в общий Telegram-канал либо по ссылке в описании сразу в общем Telegram-канале в закреплённом постежимаете, там есть ссылка на приватку, там описаны все её преимущества. Спасибо. Я ещё напомню в этом видео про приватку. Так, про приватку сказал, смотрите. Ну и погнали практику. Считать количество токенов я особо не хочу. Ну я они всё равно посчитаются, я вам продемонстрирую. Если что, можете заранее это делать и оценивать. Поехали. Вот наш к выглядит

Кэширование и CAG в n8n

уже немножечко по-другому, да, не так, как смотрите, что у нас тут. Тут у нас тоже как бы тригр чатмедж. И вот это всё я сейчас подробно расскажу. Давайте сначала я, наверное, его триггерну. Я уже не помню, что там был за текст. Наверное, тоже про N8мен man. Да, здесь тот же самый запрос. Там документ не очень большой, поэтому вместо rec можно использовать к тут. То есть давайте спросим то же самое, типа, что ты знаешь про N8N? И наглядно сейчас продемонстрирую, как это всё работает. Вот смотрите, что он отвечает. Не обращайте внимания на вот эту всю разметку. Мы можем подключить это в Telegram. Он будет нормально отвечать. Вот та же самая информация. Как помните, это 1. 000 звёзд на гитхабе. 100 млн там докер загрузок в 2019 году запущено. Та же самая информация. Убедились, что это работает. Это понятно, что это работает, но что насчёт экономии денег, экономии кэша, так сказать. Экономии кэша и экономии кэша. Для начала нам нужно выгрузить как бы весь как бы наш текст файла. Как мы это сделаем? У нас был классический rec. Ну давайте не это. Давайте вот этот. Загрузка документов. Мы, как помните, извлекли весь наш текст из файла. Вот он. Он он. Вот она наша дата. И просто возьмём, да, и скопируем, как бы, что нам мешает. И зайдём в нашк. Что мы делаем здесь? Я просто ставлю рандомный узел Edit Fields. Короче, вот мы заходим в Edit Fields и закидываем ровно тот же текст, как и там. Отлично. Ну, это для удобства просто сделано. Что мы делаем дальше? Дальше мы используем subbase. Смотрите, мы же хотим сделать полноценный кэг, то есть, чтобы у нас сохранялась история диалога. Как сохранить историю диалога в рек-то, понятно. Там вот здесь это не так сложно сделать. Мы можем, ну, тут память коломки подключить, будет всё понятно. А в как-то посложнее. Почему посложнее? Потому что, ну, мы же как будто бы могли тоже вызвать нашего иагента стандартного, подключить к нему кукло, и всё бы работало нормально. Но проблема в том то, что в N8 не поддерживается кэширование по дефолту, и поэтому мы так не можем сделать. И нам приходится это делать через узел HTP requкст. Там чуть посложнее, но не переживайте, я всё расскажу. Поэтому мы не можем просто подключить к нему память спокойно. Но мы сделаем следующее. Ставим узлы суabase здесь. Просто берём RAW, get many table name or ID. Мы берём CCK, то есть имя, таблица, фильтр никакой не ставим, return all ставим. Сейчас покажу, что у нас там. Так как я как бы предварительно это всё тестировал перед записью видео, у меня тут есть небольшая история диалога. Вот она как бы наша история диалога записывается. Ну тут нули, это неважно. И вот она типа вот вопросы user AI. То есть мы убедились то, что аналоз записывается в наш Base. Ну не обязательно subabase поставить. Можете вообще это делать через стандартную память вот в вот такую вот и тут подключить память какую-нибудь. Но я решил это сделать через супай. Мне так удобнее показалось. Здесь всё просто. На этом этапе мы читаем, если что-то внутри нашей таблицы. Мы как бы достаём историю нашего диалога, потом мы её агрегируем. То есть у нас опять же вот 15 айтемов, мы их, короче, соединяем. Просто ставим all item data into single list all fields, объединяем всё в один item. Теперь мы закидываем это в ноду код. В ноди код мы делаем, короче, смотрите, врок нужно закидывать историю сообщений, ну, как и в любую другой lm определённым образом. И так как мы это делаем не через узел а agent, нам приходится как бы вручную это всё обрабатывать. Это узелкод, который преобразует нашу историю диалога, которую мы достали из супайса таким образом, чтобы оно было в правильном формате для того, чтобы мы запихнули эту историю диалога в наш промт. когда мы закидываем сообщение в клод, то есть когда мы обращаемся к клоду по API. Я сейчас вникать в это не буду. Важно вот что, что у нас было на входе, вот в таком оно виде, как оно на выходе, то есть оно теopic messages, это важная приписочка, то есть роль контент, то есть вот оно всё преобразуется, лишние вот эти вот удаляются. Отлично. В любом случае шаблон будет в общем ТГ канале, можете его забрать и пользоваться. Ну вот, кстати, тут мы создаём уже, то есть тут мы считывали то, что мы нашу историю диалога, а тут мы как бы записываем новую. То есть мы же, когда пишем какое-то сообщение, его тоже нужно добавить в историю диалога. Тут мы просто ставим create, ставим ту же таблицу и тут ставим, а define below и добавляем поля, то есть field name user, field name AI, там добавляем, короче, в субайзеe вот так вот добавляете, пишете какое-то имя и вот тут вот type ставите stram, то есть вот оно текст. Ну, текст и всё. И добавляете. То есть вот мы записали, да, то, что ты знаешь про N8N, я спросил и то, что он мне сейчас ответил только что. Это всё понятно. Самое главное, где происходит кэширование, как его настроить и так далее. Открываем узел HTP. А здесь выбираем метод post, выбираем URLic. Очень важный момент. А чтобы настраивать кэширование в антропике, вам нужно напрямую API антроop. То есть вам нужно зайти на их консоль антроop, ну на сайт, короче, где пополнять API, закинуть туда деньги и вот только тогда вы сможете им пользоваться и настраивать кэширование. Вот так вот. Поэтому тут мы URL ставим APIropic. com v1 messages. Вот именно такое. Здесь мы просто выбираем, ну, типа авторизацию. Нам же нужно куда-то добавить наш API ключ. Можно, конечно, прописать просто ber и так далее. Но здесь я вот так поставил. prefended credential type. Здесь ставите ваш credential type. Ну, для какого сервиса? Вот сервисы тут все подряд идут. Dep. Я выбрал Antropic и выбрал тут свой аккаунт, который вы как бы по дефолту настраиваете. Вот ваш аккаунт Antropic. Просто ставите опять ключ, ничего тут не меняете. Потом мы жмём Send Headers и отправляем наши headers. Обязательно using, ну, можно через Jo, но, конечно, проще через using Fels below. Здесь мы настраиваем запись кэша на 1 час. Как я говорил, это наиболее оптимальный вариант. Нужно прописать вот тут nameic version 2023601. Это согласно документации. Нужно именно эти как бы headers прописывать, чтобы кэширование работало. Здесь вы пишете бета. Вот то же самое. Extended cash ttl 20250411. Это, кстати, работает, по идее, ещё в бета-версии, но в целом как бы нам-то какая разница, можно же пользоваться. И дальше мы листаем низ, ставим sendм jon. Usen Jon, здесь проще просто скопировать шаблон, который я оставлю в Telegram-канале. Ну, можете, конечно, и так прописать. Здесь мы что прописываем? Здесь мы вот тут можете поменять вашу модель, да. Во-первых, вам нужно загуглить, ну или в клоде найти, да, поддерживает ли модель кэширования, как я показал, там те модели, которые поддерживают кэширование. Ещё на всякий случай уточните, поддерживает оно кэширование на час или на 5 минут. Ну, обычно те модели, которые поддерживают коэширование на час, они на 5 минут по дефолту поддерживают. Ну, уточнить надо тоже на всякий случай. Я выбрал 3,5etт. Я знаю то, что оно поддерживает кэширование. Я проверил. И спросите унтропика, там в документации почитайте, как именно нужно называть, ну, писать название. То есть именно вот так оно должно быть. Не просто колод 35, а именно вот так. Температуры я ставлю 0,3, чтобы он особо не ну не выдумывал там ничего, чтобы он был, короче, более детерминированным. Максимальное количество токенов я ставлю 500. То есть, чтобы он мне не отправлял большие длинные текста, я ему принудительно ставлю 500 токенов ограничения. Здесь всё понятно. Смотрите, что дальше. Вот тут, вот тут что мы сюда ставим в графу текст. Здесь мы ставим наше системное сообщение. Видите, написано system написано. И мы ставим наше системное сообщение сюда. Вот. Я для удобства, как вы помните, добавил его в Edit Fields. Можно было бы, конечно, его просто скопировать вот так вот и впихнуть сюда, но мне не нравится. Оно что-то много места так занимает. Лучше взять вот так вот перенести. Вот. Вот оно у нас тут отображается, что по итогу будет отправляться в клод. Просто ради удобства. И вот оно, наша главная деталь. Смотрите, Cash Control. Мы прописываем type и TTL, то есть time to leave. 1 час. Можем прописать 5 минут, но нам сейчас надо 1 час, поэтому ставим 1 час. Дальше у нас идёт история сообщений, но тут она тоже типа, ну, не просто так записывается специальным образом. То есть мы не просто берём из нашего узла код, не знаю, вот массив, например, и закидываем. Не так просто так не сработает. Мы записываем именно так. Ну, здесь просто уточнение идёт, то, что там длина больше нуля, там и так далее. Там где разрезать, не разрезать, мы готовим, короче, для того, чтобы записывать вклад. И смотрите, здесь мы тоже прописываем, а, кэш. Ctrl кэширование нужно прописывать под каждый элемент отдельно. Тут у нас системное сообщение, тут у нас история диалога. То есть мы каждый раз, ну, если вы не знали, когда вы общаетесь с лэмкой, как работает вообще история диалога, как она помнит то, что вы писали ей до этого. Просто каждый раз с каждым новым сообщением ваш предыдущий диалог туда запуляется. Если вы помните, вот в ноде AI agent классической, вот в Memory можно настроить вот окно, то есть сколько сообщений помнить 14 там, 145, там 20. Это можно этот параметр настроить. Тут конкретно я его не настраивал, но вы можете это сделать в целом, если разберётесь. Но я не хочу. Что я говорил про кэш. Смотрите, как работает кэш. Нам нужно отдельно прописать кэш под наше системное сообщение. Так как у нас системное сообщение, то есть наши данные, которые мы, на основе которых нам должна отвечать лмка, у нас всегда одинаковые, значит, в первую очередь под него мы и прописываем. То есть вот эти данные у нас будут кэшироваться вот полностью эти, потому что они всегда одинаковые. Но историю сообщений-то мы тоже, оказывается, можем кэшировать, потому что это тоже токены занимает. И вот мы прописываем. А где это было? Я что-то потерял. А вот casш control. И тут тоже cash ш control. То есть мы ставим type femeral, но тут я время жизни поставил не сейчас, а 5 минут. Потому что, ну, захотелось мне так, типа, стои сообщений в течение 5 минут, потому что быстро общаешься с лэмкой, успеваешь ответить в течение 5 минут, а системное сообщение в течение часа пусть лежит. А вот запрос юзера мы уже не кэшируем. Ну, тут смысла нет просто. То есть у нас вот запрос пользователя - это то, что мы спросили в чате. Вот, как вы помните, что ты знаешь про N8N? Мы спросили. Это мы не кэшируем. Это мы кэшируем. И можно ли как-то посмотреть, а что мы сэкономили, что не сэкономили? А, конечно, можно, товарищи, конечно, можно. Смотрите, вот зайдём теперь request, enter и нажмём table. И вот вот оно указывается нам. Смотрите, тут у нас показывает, в чём у нас какие манипуляции с токенами. Мы видим то, что у нас а создано в кэше 2. 390 токенов, а здесь создано пятиминутный кэш. Это получается история сообщения. 547 токенов. Cash creation есть, то есть вот сколько создалось на 5 минут, сколько создалось на час токенов. То есть мы записали наши слова, наш текст, наши данные в кэш-модели. То есть вот они уже лежат у нас тут в течение часа. Если в течение часа мы к ним не обратимся, они исчезнут оттуда, и опять запрос будет стоить дорого. А теперь вот у нас новый запрос. Допустим, хочу снимать про Nosman. А я быстро от мысли к действию перехожу. Ну и как итог, прямо сейчас и снимаю ролик. Смотрим, что он мне найдёт. Вот. Ну излишнюю инфу присылает, там неюзер. Вот тут можно посмотреть чистенькое его сообщение. Вот. Привет, Володя. Отлично, что ходить снимать про N. Просто структура, которую можно использовать для первого ролика. Вступление. Привет, я Володя, и сегодня расскажу про Nos man. Такое уже было видео. Короче, вот он нам ответил. Понятно, что самое главное, что у нас с токенами. Открываем и смотрим. А теперь уже наш системный промт. В прошлый раз он записывался, а теперь он читается. Видите, cash ш putkens. То есть за эти токены мы сейчас платим по факту не оди доллар, ну, условно там не доллар стоит, ну, не о доллар, сколько оно стоит по дефолту, а уже 0. 1 доллар. То есть мы экономим 90% на этих токенах. Если вы сомневаетесь, настроили вы кэш или нет, вы просто заходите в ночь тепек и вот здесь вот проверяете, что у вас указано. Отличная тема. А мы двигаемся дальше

Как делать Fine-tuning

ребята. Смотрите, что дальше. Дальше у нас стрелочка идёт вот сюда. И куда дальше? Вот сюда. И мы возвращаемся к фантюнингу. Что такое фантюнинг и когда его использовать? Ну, смотрите, фантюнинг в переводе дословном это тонкая настройка. То есть это до обучениям на наших данных. Всё, что было до этого, я рассказывал, это не до обучения. Мы просто, ну, просто в промтм системный добавляем данные разными способами, а это именно до обучения. То есть мы берём модель и чуть-чуть её донастраиваем. Смотрите, F tunion, когда использовать, я его использую вот в таких случаях, когда вы хотите поменять стиль тон или формат ответа LLM, чтобы модель отвечала, используя нужную терминологию или же организмы, например, для юридической сферы, да, ну или там любой другой сферы с большим количеством терминологий же организмов, когда не стоит использовать, ну, я не использую в этих случаях. Когда вы хотите обучить LLM новым знаниям, это будет долго. Плюс у вас может появиться желание обновить данные, тогда вообще хард. В этом случае будет более местным к илик. И нужно обратить внимание, что когда мы фантюним нашу модель, нужно подготовить хорошие материалы для обучения, хорошие данные для обучения. А это, ну, сложно, короче, время занимает. И, кстати, фантюнить можно не только LM, а ещё vision моделью. То есть, допустим, если, ну, OCR какой-нибудь, чтобы, короче, вашу картинку различала нейронка, что на ней изображено. Но вы хотите её как-то специфически настроить, чтобы она была заточена, там круто различать деревянные, чтобы она круто различала деревянные кружки между собой, например. По дефолту она это не будет делать. Вы можете этогда донастроить. Вот фанинг, практика. Готовим материал для обучения в таблицах. До обучаем через Open плаatтформ. Это, короче, до обучения модели. Как мы его делаем? Это вообще не так сложно, как вы, наверное, думаете. Фантюнить можно, конечно, разные лмки разными способами. Самый простой, понятный способ - это через Open e Platform, то есть через консоль Open i. То есть вы заходите, ссылку я оставлю, наверное, ну либо сами найдёте в Гуглениing, Open i и просто тыкаете вот сюда. То есть API CAS, а есть fтюнингing. Отлично. Смотрите, что мы делаем. Для начала нам нужно подготовить наши данные как бы для фантюнинга. Короче, вот как это происходит. Вы заходите в Google таблицу куда-нибудь, пишете Message system, то есть системное сообщение, которое будет у вас прописано, оно будет всегда одинаковым, скорее всего. И прописывайте message user, то есть то, что будет спрашивать пользователь, и то, что в идеале должна на это ответить модель. Сами заполняете эти данные. Тут ставите, ну, другие вопросы, что у меня тут есть, например, такие пчёлы насекомые это такие вот. Так как я сказал, то что я фантюнинг использую для того, чтобы там жарганизмов, манеру речи, тон, а вот это вот всё подкорректировать. Ну и прописывайте здесь таким образом, как бы вы хотели услышать ваши ответы. Вот, например, как я подготовил данные для этого фантюнинга. Я зашёл в Perplexity и сказал: "Я хочу сделать фантюнинг модель Opene. Я хочу, чтобы там, короче, был пчеловод такой из деревни, которого зовут всевод". Вот как я написал. Типа, подготовь для меня данные в формате вот вопрос-ответ. Вот в таком формате. Message user, message assistant. Типа, что спрашивает пользователь и как должен на это отвечать lмка. Он мне подготовил данные, я просто скопировал вот их и добавил. И вот что получилось. Получилось, кстати, прикольно. Сейчас покажу. Понятное дело, то что когда вы это будете использовать не ради демонстрации видео, как у меня здесь, а для реального примера, вам нужно подготавливать реальные данные и сидеть, короче, их читать, заморачиваться над этим, чтобы всё корректно работало. И сколько нужно подготовить таких данных? Ну вот для нормального видимого эффекта где-то хотя бы 100 штук. Тут у меня их по факту два, а надо хотя бы штук 100. Ну тут у меня, кстати, их штук 90, по-моему. Короче, просто пишите вопрос пользователя и то, как на него должна в идеале отвечать элмка. Делайте таким образом. После того, как вы это всё сделали, вы копируете, заходите в любую ку и пишете вот вход, например, типа я хочу сделать find tuning open ai модели. Подготовь эти данные в формате JSONL, пожалуйста, таким образом, чтобы Open AI их корректно считал. Что-нибудь такое пишете. Вот. И он нам их правильно форматирует. Как видите, как у меня здесь. То есть вот так же. Всё, он сформатировал. Вопросов-то у нас немного. Он говорит: "Скачайте файл". Вы просто скачиваете его как JON и, ну, переименуть просто в JSON L. И как бы, да, говорите, используй Jon L. Всё, у вас файл готов для того, чтобы закидывать его в Open AI. Сразу скажу, короче, Open AI, у них же там есть ограничение. То есть, если вы будете писать какие-то там вещи, которые запрещены политикой пользования чата GPT, там Open, он у вас не ничего не даст вам сделать. Поэтому лучше их прочитайте и только потом занимайтесь фантюнингом. Потом, когда мы подготовили наши данные, что нам нужно сделать? Мы, а, нажимаем, заходим вот сюда вот, нажимаем create. Смотрите, что по настройкам. Метод мы берём supervised. Остальные пока не рассматриваем. Для начала нужно, ну, просто что-то зафнтюнить. Вам этого, скорее всего, будет достаточно. Superwiise - это как раз, это как раз тот формат, в котором мы подготовили наши данные. То есть это формат вопрос пользователя, ответ моделя. Берём Superwied Base model. Мы выбираем, какую модель мы хотим дообучить. Стоимость на дообучения разных моделей разная. Кстати, давайте про стоимость, да, поговорим. Это стоит вообще недорого. Вот я добучил модельку, и эта стоила у меня где-то, ну, доллара полтора, наверное. Вот если вы ниже пролистаете стоимость файтюнинга, да, я вот эту обучал 4. 1 mini 5 долларов за миллион токенов обучение. То есть это, ну, короче, вообще это недорого на самом деле. Короче, выбираем модель. Выбираем. Ну, я, естественно, хочу 41 мини обучить. Суффикс. Этот, что вы добавляете к вашей модели, допустим, там, Володя, чтобы в название это было. сит. Seт - это, если вы, допустим, поставите тут сит рандомны, там 45, и впоследствии будете заново обучать модель, и вы захотите, чтобы ваши результаты были воспроизведены в точности, вы ставите тот же сит, и тогда они будут воспроизведены. Короче, сит - это параметр, который контролирует воспроизводимость обучения. Смотрите дальше. Training data, то есть то, что мы конкретно загружаем. Jon L файл мы загружаем. Вот у наш Honey Jon L. Информация про пчёл. Захотелось мне что-то про пчёл. Потом validation data. Validation data - это такая штука, короче, которая контролирует переобущение. Переобущение LLM - это если вы, допустим, предоставите слишком много данных, тоже надо быть с этим аккуратнее. И тогда lm начнёт забывать свою основу. То есть как бы у GPT 41 Mini, у неё же есть своя основа, там те данные, на которых она обучена, а вы, допустим, давайте их слишком дофига, и она начнёт их забывать и будет плохо работать. Есть способы это контролировать, например, validation data. Потом бе size бечй - это, короче, ну, размер бечев, как бы порций. Если поставите больше, будет тратиться больше памяти. Потом Learning rate multiplier - это получается влияет на скорость обучения. Если больше поставить вот тут кастом, то обучится быстрее, но больше риск переобучения. Если меньше, то обучится медленнее, но меньше риск переобучения. При обучении уже сказал, что это. И number of - это сколько раз ваши данные будут как бы прогоняться для фантюнинга. тоже, если поставить больше, будет риск переобучения. Короче, на начальных этапах в это вообще всё вникать не стоит. Просто выберите всё то же самое. Выберите просто модель, которую вы хотите добучить. Se поставьте на условно там 45 и трейдинг дата загрузите. Всё. Остальное оставьте авто и нажимаете create. Он у нас запускается процесс. Сначала он проверяет файл, тут написана всякая информация, и тут будет отображаться, что вообще происходит, пока оно фантюнится. Оно занимает какое-то время. Вот, например, конкретно что я обучал, занимало по времени, ну вот 20829, то есть оно 21 минуту где-то у меня обучалось на том же количестве данных. Просто ждёте, можете уйти там делать, заниматься своими делами, можете вообще страницу закрыть, наверное. Я не пробовал, но скорее всего можно. Ну и ваша моделька, собственно говоря, обучится. Ну я не буду сейчас это там оставлять. Здесь будут всякие параметры вот показываться во время обучения. Вот как здесь вот история. Здесь будут показываться графики. Я её поставлю на стоп. Cancel j нажму. Смотрите, ваша модель обучилась. Когда что вы делаете дальше? Вы берёте вот это название, которое у вас получилось. Короче, вы её копируете, вот сюда нажимаете копия. Делайте там стандартного иагента. Ничего тут ему не пишите. А нет, пишите только системный промт. Пропишите ему системный промт. Тут просто ввод пользователя, а здесь пишете тот же системный промт, который вы использовали вот здесь в таблице, который вы везде прописывали каждому сообщению. Если его не вставить, то она будет работать не так, как вы ожидаете. Просто рандомную память поставил для демонстрации. И что тут важно, здесь нужно подключиться к Openi напрямую по API. То есть вы берёте, заходите на сайт OpenI Platform, пополняете в долларах, к сожалению, берёте именно вот тот API токен, который вам дали на этом сайте. По-другому работать не будет. И вот здесь вот вы выбираете немлист, вы жмёте ID и вставляете название вашей модели. И проверяем, что будет. Сейчас я покажу, что у меня в данных было. Такие вопросы типа ж, когда пчёл активнее всего, утром рано, как солнышко встанет, тогда и летят медовые труженицы. Днём в жару отдыхают, к вечеру опять за мёдом летят. Природа мудрая. Ну такой типа старичок пасечник из деревни отвечает на вопросы нам. Ну давайте вот протестируем, напишем ему: "Доброго здоровья". Спасибо. Пчеловод или пасечник? Метковый бизнес семейный. Не каждый день удаётся такой хлыстовый суперхозяйственник найти. Что? Ну, короче, как видно, обучил я его лмку так, как мне надо было. Давайте спросим про пчёл что-нибудь. Что про мёд знаешь? Натуральный медок. Целебное богатство. Природы данное. Сладкий лекарь от всех болезней. Главное настоящий пасечный медок покупать. А как понять, какой настоящий, а какой нет? Медок настоящий, тянется ниточкой, порошком не посыпается, запах цветочный, вкус сладкий, неприторный медовый, природный аромат чувствуется. Вот, кстати, запоминаем, ребята, когда будем мёд покупать. А как пасеку держать-то? Расскажи. Рамки подправляй. Улей утепляй к зиме. Метков подкармливать надо. Воровок боятся опасенное хозяйство своё оберечь как зеницу ока. Он мне этого немного напоминает из этого из князя Владимира мультика было. Этот дед с пчёлами ходил. А как звать то тебя? Ник придумай. Какой похому? А тебя звать как? Пашкой медовый пасеку ворошу. Что-то он не хочет отвечать. Как его звать? Короче, как видно, я его чутка переобучил. Он немножко теряет нить разговора, но у меня была цель как бы продемонстрировать прямо максимально наглядно, как это может повлиять на тон ответов нейронки. Как видно в системном промпте, тут ничего не написано, то есть это чисто результат фантюнинга. Вот как видно, отлично работает, но нормально так времени занимает подготовка данных. Потом ещё тестирование, как оно выйдет. Но когда вам нужно реально подкорректировать тон модели, это работает прямо хорошо. Отлично, с фантюнингом разобрались. То есть вместо того, чтобы в промте прописывать ему там в кага или в Раг писать ему типа отыграй роль пасечника, результат вашего промта, который вы ему пропишите, никогда не будет лучше, чем фантюнинг. Едем дальше. Что у нас дальше? Дальше у нас идут

Контекстуализация, Contextual Retrieval

методы улучшения к разберём несколько. По факту их, короче, ну, вообще много есть. Можете сами придумать какие-нибудь, но вот какие я знаю, да. Контекстуализация, фильтр покоore и реранкинг. Начнём с контекстуализации. Погнали. Contтексту rec - это метод, который придумала компания Anthropic, та самая, которая изобрела клод. Ну, у них и даже статья есть, где они описывают про этот метод подробности. Контекстуализация это когда мы разбиваем наш документ на чанке, который мы хотим загрузить векторную базу данных. Ну, понятно, да, как в обычном. Подаём все чанки сразу в lm и просим её для каждого из чанков написать контекст на основе полного документа. А какие проблемы решает? В обычном РК иногда теряется информативность чанков. Сейчас попозже тоже пример там будет, чтобы было понятнее. То есть мы берём документ, разбиваем его на чанке, как в обычном к. Вот у нас чанки. Подаём все чанки и полный документ, вот этот вот полный документ. И каждый чанк отдельно мы подаём в LLM и создаём контекст под каждый чанг. То есть, чтобы на основе нашего документа для каждого из наших чанков создался контекст, который мы добавляем к нашему чанку. И потом загружаем уже в этом виде векторную базу данных. Пример. Опять тот же самый пример возьмём, да? Исходный документ содержит текст: "В комнате у Володья был заполняющий свет и деревянный стол". Это вообще очень грубый пример, но будет понятно. Тем не менее, мы его закидываем в векторную базу данных. Embeded модель. Ну не embeded модель, короче, он разбивается на чанке. Bed модель преобразует его векторы. На какие чанки разбивается, да? Смотрите, первый чанк в комнате у Володи был. Второй чанк заполняющий свет и деревянный стол. И что происходит? Да, запрос пользователя. Там были какие-то предметы, какие и в чьей комнате ретри ищет подходящий чанк. Это первый. То есть в комнате у Володи был. Какие предметы в какой комнате были? То есть речь как бы про предметы в комнате. Логичнее то, что вот этот подходит больше, потому что тут речь про комнату. В комнате у Володи был. И на вход в М поступает первый чанг с запросом пользователя. Запрос пользователя - это какие были предметы, в какой комнате. И поступает первый чанк. И что ответит модель? Она ответит: "Я не знаю". Либо она сколиционирует, ответит какой-то бред. Не знает у кого в комнате, потому что у него не хватает данных. У него просто в комнате у Володи был. Какие были предметы, какие, в чьей комнате. И вот контекст в комнате у Волги был. Что было? Непонятно. Ну, конечно, в реальности ситуации немножко другие происходят, но я надеюсь, что понятно. Просто объяснил, как это работает. То есть не хватает контекста у Чанка, то есть он разбивается как-то криво. Ну вот. Ну вот, например, да, чанк, как мы делали в классическом к лимитов, усиливает проникновение комьюнити контент YouTube, гайды Redit. Короче, о чём идёт речь вообще непонятно. А у модели-то нету всего документа. Она на вход получает, ну, несколько чанков, да? Ну, допустим, вот она получила только один чанк, ну, или там четыре таких же, да, по информативности, и она не понимает вообще, о чём идёт речь. И чтобы решить эту проблему, мы закидываем весь документ как бы в отдельную LLМ и просим её написать вот тут вот контекст контекстуализация для каждого из наших чанков. А мы делаем контекстуализацию. Мы подаём весь документ, разбитый на чанке в LLM. Просим lm для каждого чанка написать контекст на основе всего документа и только потом загружаем их через модель векторную базу данных. И теперь чанки выглядят так. То есть контекст, речь идёт о комнате Володе и сам чанк, заполняющий свет и деревянный стол. Ну, тут вообще был другой чанк. Ну, я надеюсь, вы поняли пример. Языковая модель понимает за счёт контекста, о чём идёт речь, и выдаёт нормальный ответ. Ну вот, переходим к практике. Контекстре в N8N. Собираем классический рек, добавляем контекстализацию. Ну, все шаблоны из ролика в общем-то канале, да. Я напомню это ещё раз. Ещё напоминаю про приватку, тоже подписывайтесь. Вот так выглядит контекст rec. Смотрите, мы для начала достаём вот уже другой документ я сюда подключил. Я сюда загрузил документ вот этот вот пасека. Вот книжечку про пасеку, потому что, ну, тема пчёл как бы раз пошла, пусть продолжается. Давайте я для начала продемонстрирую. Нажмём здесь а ID, напишем пасека видео, потому что пасика уже есть такой. И нажмём Execute Workflow. Вот смотрите, здесь я, ну, просто вот так вот в удобном виде записываю весь текст, который нужен. Ну, не весь. Я его сократил, потому что книга прямо большая, чтобы долго просто это не обрабатывалось. Потом что мы делаем тут? Мы берём наш текст из книги и разбиваем его сразу на чанке. То есть до этого в классическом к мы разбивали начанки вот с помощью этой штуки, а здесь мы разбиваем его сразу через поле editфield. Здесь мы прописываем просто, ну, как я сделал эту команду, я написал в clд, типа, сделай мне JavaScript функцию, которая будет вот этот вот текст исходный разбивать начанке. И он это и делает. показываю. Вот схема. Вот тут выбираем массив, потому что мы в массив-то и преобразовываем. И вот у нас разбивается на чанке. Всего получилось здесь 71 чанк. Как бы все шаблоны будут в Telegram-канале, можете просто воспользоваться. Не обязательно тут прямо вникать. Можете написать с помощью клода этот же промт. Потом мы их разделяем. То есть они у нас как бы единым айтемом передаются. А нам нужно-то каждый по отдельности обработать. И мы жмём сплита. Вот просто жмём здесь текст. Вот так выкидываем текст. Не два раза. Два раза нам не зачем. No other fields, то есть плитау делаем и разделяем на 72 айтема каждый чанк, чтобы был отдельным айтемом. И теперь мы по очереди закидываем его. Угадайте, куда? В LM. А в какой LLM мы закидываем? Конечно же, в клод, используя кэширование. Ну, для начала мы ставим узел Loop over Items, то есть, чтобы у нас все 72 айтема по очереди обработались. То есть мы закидываем один, он идёт сюда, закидывается векторную базу данных, потом ждёт опять. И пока 72 вот так все не обработаются, не закинутся векторную базу данных, оно не закончится. Смотрите, что у нас возле HTP requкст. Здесь то же самое, как было в антропике. Вот здесь а мы ставим headers только вот этот, потому что здесь, а, короче, кэш на 5 минут, а не на час. Здесь на час нет смысла ставить, он дороже стоит всё-таки в два раза. Ставим просто version 2023 и используем jon. Здесь что мы прописываем? Здесь я беру 35. Опять же температура 0,2, Max Tokens уже ставлю 180. И здесь вот у нас идёт промт. Здесь как бы сразу текст и промт внутри. Короче, здесь ему подаётся внутри текст его документ, который я вот тут записал в узле Edit Fiels. Вот здесь вот, вот тут я его записал. Вот весь этот текст ему подаётся. И сразу прописан промт. то, что, короче, твоя задача вот проанализировать чанки и написать на максимум 400 символов а контекст для каждого чанга. Внизу идёт конкретный наш чанк. Вот это вот чанк закидывается один из. Закидываются они по одному, я напомню, потому что вот мы их разделили на 72 штуки, они по одному закидываются. Закидываем весь текст наш. Вот он какой большой. ставим, естественно, кэширование, потому что у нас вот это текста всё время будет одинаковый. Из каждого из запросов запрос, и мы можем жёстко на этом сэкономить, поэтому почему бы этого не сделать? То есть он берёт и каждому чанку в контексте всего текста, который у нас есть, делает контекстуализацию, то есть добавляет конкретный небольшой контекст на 400 символов к нашему чанку. И что выходит по итогу? По итогу выходит вот такой вот. То есть он даёт нам отличную контекстуализацию, то, что мы и хотели. И вот записываются у нас как бы токены, то, что вот оно прочиталось в токены, потому что я до этого уже один раз тыкнул. Смотрите, и что мы делаем здесь в квадранте. Здесь небольшие изменения. Здесь мы eding BCH size ставим один, потому что, чтобы оно обрабатывалось по одному чанку. ID я выбрал Пасика видео. Короче, новую коллекцию внутри квадранта создал, получается Пасика видео. Короче, модель я поставил тут отчата GPT вот эту large, а не лама как была изначально. Вот видно, как он векторы преобразовываются наш чанк. Что у нас тут в default data loader? То есть то, что мы загружаем, тоже ставим load specific data и пишем тут вот основной текст, а вот контекст. И основной текст мы пишем текст нашего чанка, а контекст мы пишем тот контекст, который нам вышел, выдал клод вот тут вот. Так как у нас уже всё разделено на чанке, мы ставим тут custм. Открываем ch чанктек spптеter. Тут оставляем просто пустые поля, чтобы ничего не разделял, потому что нам это не надо делать. Мы уже это всё разделили вот на этом этапе, вот тут вот. Вот тут мы это всё разделили. Ну и вытаскивать мы будем с помощью ровно этой же модели, с помощью которой мы складываем это всё в векторную базу данных. Ещё тут есть важный момент. Тут, конечно, на 5 минут, потому что я не вижу смысла это делать на час, потому что как бы здесь они хопа, закинулся, хопа, закинулся. Смотрите, когда вы закидываете большие документы, вам может, э, у меня такое было, выдать ошибку, потому что превышен лимит по токенам. Вот у Клода у 3. 5, ну, там у разных моделей разная, но конкретно тут у клода 3. 5et, по-моему, 40. 000 токенов в минуту объём рабочих токенов, я не знаю, 40. 000 в минуту. Поэтому что я сделал? Я поставил узелвей на 30 секунд. То есть у меня тут, по-моему, 20. 000 токенов используется. Давайте посмотрим. А, ну вот, 16. 000 1. 000 токенов, чтобы, короче, его не перегружать, я поставил узелвай на 30 секунд, чтобы он загрузился, подождал 30 секунд, опять загрузился. И вот как это происходит. То есть мы жём на кнопочку, создаётся контекст, создался, закинулся векторную базу данных, ждём узел weight. Вот он прождал, опять сделался контекст, опять закинулся. Вот можем сюда зайти, написано Cash read input tokens. Вот он сколько токенов прочитал, сколько мы денег сэкономили на этом количестве токенов. Я думаю, много. Короче, прямо нормально мы сэкономили на этих токенах. Здесь остаётся только ждать, пока она всё загрузится, и потом она будет выглядеть вот так вот. Основной текст и Иим занимались ещё. Ну, вряд ли тут речь про Ии. В X век пчёл разводили славяне племена родственным Ардбином. Вот контекст. Ну давайте вот переведём. В этом отрывке обсуждаются исторические истоки пчеловодства в России, описывая, как славянские племена и родственные народы практиковали пчеловодство вздоль крупных рек в X веке, чему способствовало, естественное обилие полевых цветов и лесов. Гораздо более информативнее стал этот чанк. Так бы просто вот без контекста он был бы гораздо менее информативным, а мы добавляем ему контекста. И теперь reg система работает гораздо эффективнее, потому что чанки стали более информативными. Ну, конечно, закидывать векторную базу данных - это долго, но я вот предварительно это сделал конкретно с этим примером. Вот у меня есть пасека отдельно. Была бы у меня пасека. Реально пасеки у меня нет. Я имею в виду коллекция в квадранте. Была бы у меня пасека, я был бы счастлив, кстати. Ну, хотя там работы много. Ну, такая автоматическая пасека, автономная, чтобы она сама работала. Вот. Можем, кстати, граф открыть. О, смотрите, да, как прикольно. Если вы работали в обсидиане, можете быть в курсе, что такое граф. Вот это разные чанки и как они между собой связаны. Мы можем вот это вот отследить. То есть какой из чанков к какому ближе. Тоже прикольная тема в квадранте.

Фильтр чанков по score

Теперь у нас фильтр по score. Давайте сначала прочитаем, что это. Score - это как бы значение соответствия выбранного чанка и нашего запроса. То есть они между собой соотносятся. Эти векторы сравниваются, как вы помните. Да, я помню. И мы можем поставить фильтр и пускать только те чанки с определённым значением скор, чтобы не захломлять м лишней не информаци нерелевантной информации. Вот как это работает. Примерно, да? Проверяем скор, допустим, меньше 65. Если меньше, то мы не берём чанк. Если больше, то чанк проходит фильтрацию, и мы загружаем его в lлм. Значение score будет индивидуальным для каждого отдельного проекта. Надо тестировать. Это правда. Вот. Ну, фильтры по скорбираем классический рак. Добавляем фильтр. Все шаблоны из ролика в общем ТГ-канале. И про приватку не забывайте. Не пугайтесь, если вас пугают большие шаблоны в N8N. Тут ничего на самом деле такого нет. Смотрите, здесь всё то же самое. Мы берём ту же MBED модель, которая у нас была для загрузки здесь. И смотрите, что мы тут делаем. Сейчас я продемонстрирую. Открываем чат и пишем: "Что ты знаешь про N8N? " Опа, опа. Смотрите, он нам отвечает. Ну, то же самое, как и всегда. Там активное сообщество 100. 000. звёзд, GitHub и так далее. То есть, да, работает. В чём прикол? Прикол в том то, что это гораздо более точная модель, чем обычный RG. Почему она более точная? Потому что мы достаём отсюда наши векторы, но мы достаём уже не четыре, как мы до этого делали в классическом рек, мы ставим лимит восемь. То есть мы достаём уже восемь чанков. И теперь у каждого чанка, как вы можете видеть, есть значение score. Как я говорил, скоore - это значение соответствия, то есть насколько по математически там высчитанным формулам, насколько наш запрос соответствует тому, что лежит в базе данных. Вот самые релевантные, вот они достуются. Вот этот он посчитал самым релевантным. Драйвер роста N8N, потом вот этот. И они, конечно, не всегда точные, да, про это тоже будет отдельно. Ну, чуть позже, как что можно с этим сделать. Но тем не менее это вполне себе хороший как бы ориентир. То есть вот это вот скор. И мы можем вместо того, чтобы брать четыре рандомных, мы можем поставить побольше их, но при этом отфильтровать по score. А как фильтровать? Ну вот тут ставим 0,8. Да, тут мы хотим прямо супер суперрелевантные доставить, но таких у нас нет. Как вы помните, самый релевантный у нас тут написано 0,55. Давайте я на примере, где оно сработало, покажу, потому что они тут всё равно одинаковые. Вот это то же самое, что и это. И мы ставим фильтр. Если у нас больше либо равно вот этому значению 0,47, то мы их пропускаем. Как видно, осталось четыре. Четыре они прошли, то есть они меньше, чем 0,47 по значению. Фильтруем их и закидываем в aggregate. То есть мы берём вот этот документ page content, просто его сюда перекидываем, объединяем это всё в один айтем, вот в один массив. Было четыре айтема, стало один. Теперь мы проверяем их количество. То есть если три штуки либо больше, чем три штуки, то получается true условие. Если меньше трёх штук, то получается фольse. Ну вот такое условие я поставил. Можно поставить какое хотите условие, хоть один, хоть одну штуку, хоть две штуки. Если у нас здесь больше либо равен 0,47 и при этом тех, которых оказалось больше либо равных 0,47, при этом, что было их было три или больше, чем три штуки. И тогда они проходят в true. Здесь абсолютно то же самое происходит. Просто здесь фильтр более высокие значения 0,8, например, а здесь значение 0,65. И тут тоже разные значения ставлю. Тут ставлю три, вот тут ставлю три. А тут сколько ставлю? Тоже три. Я думал разные. Ну ладно, можно поставить два, например, да. Чтобы понять, какие именно тут цифры выставлять, нужно взять конкретно ваш документ, прикинуть в реальном продакшене, какие будут задаваться вопросы, и тестировать и смотреть уже какие значения будут более подходящими. И тут выставлять. Вы можете этих фильтров поставить тут хоть ещё штук 15. Вот так вот. Вот так себе выставить, чтобы он прям всё-всё проверял на каждый случай жизни. Попробуем ещё что-нибудь написать, типа, что думаешь про N8N? Вот закинулся. То есть мы, короче, отбираем по релевантности по срши вектора. И как я говорил, значение ср, значение количества чанков, которые вы готовы пропустить, это всё нужно тестировать в зависимости от проекта, но такой метод в любом случае существует.

Реранкинг чанков от Cohere

Дальше у нас идёт реранкинг. Это уже такая прикольная тема, интересная. Хотя эти тоже интересные, но вот реранкинг, смотрите, реранкинг - это когда мы вытаскиваем из нашей векторной даты базы не три-четыре чанка, как обычно, а сразу 10 или 15. То есть тут мы восемь там вытаскивали, а тут мы вообще 10, 15 или даже 20. Потом мы их направляем в ранг модель, то есть это отдельная нейросеть специальная. Она их анализирует и перестраивает в порядке релевантности. модель анализирует каждый чанк в контексте запроса, вычисляя новый relevance score. Это не тот же скоро, что был изначально. Это, кстати, важно. То есть как это работает? Запрос пользователя достаёт чанки из векторной базы данных. Потом сразу там 10, 15-20 штук. Ранкмо модель анализирует чанки в контексте запроса пользователя. То есть она вот так вот делает и вычисляет новое значение score, новое значение как бы соответствия и выводит новый реvн с score для каждого чанка. То есть векторная дата-база, выбирая чанки, отсеивает нерелевантные, а потом среди отсеянных ран модель на основе запроса пользователя выявляет два-три самых релевантных. Ну, здесь проще показывать. Anking 8N. Собираем шаблоны все в общем Telegram-канале. Сколько раз уже это сказал. И про приватку. Приватку подписывайтесь. Вот у наш ранкинг. А как он работает? Это тот же классический, как и обычно, но вот тут мы ставим limitм rerun results. Вот его по дефолту нет, а мы вот добавляем. И у нас добавляется специальная rerun model. Короче, model у N8N только одна rerank model доступна, но их в целом не так много существует от Cher компании. Я выбираю вот ран V35. Здесь нужно доставать API ключ, то есть её никак на сервер там к себе не поставить. Она работает только по API. Заходите на их сайт. Это у меня, кстати, вообще API, за который я деньги не платил. Там какой-то есть у них тестовый API ключ. Вот я его и взял. Ну, суть в том то, что там, да, плата тоже за доллары, к сожалению. Ну, а что делать? А для начала нужно выяснить на основе какого документа опять N8N. Давайте этот поставим пасеку. Что-то он меня задолбал этот An N8N. Всё. И спрашиваем: "Мёно? " Спросим. Там же книга про пасеку. Да, мёд является очень полезным продуктом. В тексте отмечается, что мёд имел исключительно важное значение в пище человека ещё до появления промышленного производства сахара. Ну вот, чтобы они писал в тексте, отмечается. Это можно всё через пром системное настроить. Но смотрите, в чём суть. Вот он у нас сейчас показывает только три айтема. Вот. И видите, у них уже значения скор свои. А как бы тут посмотреть? Вот тут у нас показывают все чанки, по идее, которые мы достали, 20 штук. То есть вот раз там 2 3 4 Вот он все их достаёт 20 штук. А значения скор я тут не вижу, но я могу вот вам продемонстрировать. Например, мы можем отключить эту модель сейчас. То есть мы отключаем ранкинing, видим тут значение скор тут 013 012 014. Вот, например, выбираем текст. важнейшим сырьём пищевой, фармацевтической. Вот. Да, запомнили. И значение у него там что-то 013 score. Теперь мы отключаем ран модель. Можно дальше не направлять. У нас остаётся 20 айтемов. И пищевой фармацевтической был текст. Вот. Вот он. И видите, тот же самый чанк. у него значение 02 score. То есть он пересчитывает, э, по своим алгоритмам и делает новые значения ср и определяет, какой из них наиболее точный в контексте запроса пользователя. Давайте посмотрим, какой здесь определяется. Здесь определяется самое релевантное, то, что создали препараты по своему действую, выступающие прополи и вот сохранятся несколько дней. Вот первый прополис, второй сохранятся несколько дней. А теперь, если мы через ран модуль это сделаем, то же самое спрашиваем и проверяем. Вот видите, он вообще их переоранжировал. Про прополис он вообще ничего не взял, по-моему, да? То есть был чанк про прополис, он был на первом месте. Вот так вот ретривер внутри квадранта решил то, что он самый релевантный. Но а кохи уже как бы сделал переранжирование. То есть он посчитал то, что взял вот эти 20 чанков, которые мы достали, сравнил их с контекстом пользователя. Вот это всё проанализировал и решил то, что пересчитал значение скоры. Решил то, что самые релевантные как раз-таки вот эти три. То есть вот прикольная тема. То есть ранкер - это прямо крутая штука. За него, конечно, нужно дополнительные деньги платить. Наверное, самый эффективный рак пока что, который вы можете использовать. Самый эффективный раг. А давайте вот сейчас вам покажу, да, самый эффективный раг. Вот у нас переходит сюда то, что эти методы можно комбинировать, показывать шаблон. все шаблоны из ролика в общем ТГ канале, да, напоминаю, общий ТГ канал, подписывайтесь. Как мы комбинируем все

Комбинирование улучшений RAG

эти методы? Ну, мы, во-первых, записываем с контекстом, естественно, это, я, ну, считаю, это нужно делать всегда. То есть, если вы записываете что-либо векторную базу данных, делайте это с контекстом. Ну, если это там возможно. Бывает такое, что документ прямо очень большой. Да, всё равно это возможно. Ну, типа разделить его как-то там и загрузить, что-нибудь придумать. Но это очень полезная тема. Это прямо помогает. Достаём с реранкингом, фильтром и фантюнингом. На самом деле, если вы используете ранкинг, использовать вот такой же фильтр, как я показывал, это уже не так обязательно. Это там, ну, на точность прямо сильно уже не играет. Там 1% 2%, я не знаю, точности добавит, но можно добавить, если вы хотите. Я вот добавил, чтобы продемонстрировать это всё в совокупности. То есть у нас теперь идёт фильтр тоже по значениям score. Значения ср мы берём не те, которые были изначально из квадранта, как вот я только что показывал фильтрацию, а уже значение score, которые нам пересчитал ранкер. Они другие, как вы помните. Ну я и подсоединяю тюнинг модель, где у нас вот этот вот профессиональный пчелот в севолот. И получается комбо, комбо того, что мы сейчас разобрали. Здесь можно, кстати, ещё настроить то, что сначала вот тут будет принимать сообщение не сразу квадрант, а короче какая-то отдельная лмка. Вот такая же. Вот сюда её вначале поставить и попросить её определять, когда нужно искать в базе данных, когда не данных. Потому что я, например, спрошу типа: "Привет, как тебя зовут? " И он пойдёт искать в базе данных и ничего не найдёт. Вот, например, пошёл искать базу данных. Ничего не нашёл, ничего не нашёл, ничего не нашёл. Естественно, он ничего не нашёл. Вот интересно, не что-то нашёл, но это прямо очень нерелевантные значения. Видите, типа 0. 03, прямо вообще мимо. Ну и давайте спросим какой-то конкретный вопрос. Давайте, короче, вот так сделаем. Откроем, получается, вот документ про пасеку. А что-нибудь типа в возрасте 4-5 дней пчёлы начинают совершать кратковременные относительные и ознакомительные облёты. Возраст-5 дней пчёлы что начинают делать? Вот так сделаем. То есть поехали. У нас закидывается, не посчитал релевантным, посчитал релевантным и закидывается и отвечает. К четырём-пяти дням пчёлки уже облёты короткие делают навстречу вдохновлённым сборщицам с нектарами летят. Медовую переработку начинают. Ячейки для расплода готовят, трудятся, не покладая крылышков. Как видим, тут идёт речь про ознакомительные облёты, и он, скорее всего, этот фрагмент-то и нашёл. Смотрите, что произошло. Достаются у нас фрагменты из векторной базы данных. И вот тут прямо высокие уже значения, кстати, да, соответствие. Тут скор вот как раз то, что я говорил 4-5 дней там ознакомительноты достаются, но а у нас не считается нерелевантными, потому что тут у меня две штучки нужно, чтобы было две штучки больше, чем 0,8 по фильтрации, а проходит только одна. Поэтому мы переходим ко второй, и тут уже он их пропускает. Мы можем в целом и сразу эти три запыльнуть, и плохо не будет в целом, да, но мы, допустим, хотим ещё и их отфильтровать. Зачем мы их фильтруем-то, кстати? чтобы в контекст n не попадала лишняя нерелевантная информация. Вот зачем? Потому что тут самая релевантная информация. А вот это мы, допустим, уже не хотим, чтобы попадало, потому что иначе м даст ответ не такой хороший. Как я говорю, от co here можно особо не фильтровать. Он всё равно даёт как бы уже хорошую релевантную информацию. Но можно вот, да, чтобы 1% точности добавить. Можно вот отфильтровать. Здесь я поставил один, да, то, что можно один чанк пропустить. Он пропускает один чанк. как раз вот этот самый релевантный про то, что 4-5 дней начинают облёты. Короче, именно то, что я спросил, он этот момент достал, закидывают его, получается, в контекст. Типа вот это вопрос пользователя, а это а контекст. То, что вот он рассказывает, что они начинают в 4-5 дней делать. Не просто, да, контекст, основной текст, как кормят своим молочком и контекст. На английском можно, конечно, настроить, чтобы он был на русском, но на английском просто дешевле выходит по токенам. В этом разделе описывается возрастное разделение труда среди рабочих пчёл, начиная с их роли пчёл медсестёр, ухаживающих за личинками, затем переходя к обработке нектара, очистки клеток и так далее. То есть вот у нас есть контекст, который мы сделали с помощью нашего контекtal reg. У нас есть основной текст чанка. У нас есть сам чанк, отфильтрованный дважды, потому что сначала его отфильтровал co here, переранжировал, выдал своё собственное значение score, и мы его ещё дополнительно отфильтровали. И на финальная финалочка добивочная у нас есть System Message и у нас есть фантюненный GPT, который отвечает в прикольной манере. Ну вот давайте спросим ещё. А вот рабочие пчёлы это кто? Вот что-то нашёл. Короче, трудятся, суты строят ули, охраняют. То есть вот он дал текст, на основе которого он отвечает. Тречанка. А это, конечно, можно всё в промте прописать, то, что он больше отдавал предпочтение контексту, которые я ему присылаю. Надеюсь, он всё-таки как бы ответил на основе текста. Ну, так коротко. И я ещё до переобучил модель чуть-чуть, потому что, ну, я не проверял данные, которые я отправляю. Я же это делал с помощью нейронки ради демонстрации. Вот. Но это всё нужно контролировать, когда вы findнити

Подготовка документов для RAG через Llamaindex

модель. Парсинг документов для recкую проблему решает модель плохо воспринимает некоторые документы. вручную готовить документы для загрузки векторную базу данных долга. Делаем парсинг документов через ламы индекс. Автоматически готовит наш документ для загрузки в векторную базу данных. Преобразует таблицы, изображения в текст, чтобы всё корректно воспринималось тмоделью. Ну, если вы пробовали с R работать, вы, наверное, грузили документы и замечали то, что она, ну, типа плохо не загружается, там изображения, таблицы, ещё что-то, и он их тупо не считывает. А вот индекс - это специальная штука, с помощью которой можно мы туда закидываем документ, он видит, где изображение, где таблица и так далее, и преобразует это в Markдаун, в понятный формат для LLM. Просто чтобы вручную не готовить документы. Ну и она, кстати, если вы немного запросов делаете, то она бесплатная. Практика. Добавляем парсинг документов. Смотрите, здесь нам нужна лама индекс документация. Открываем индекс. Также вы в Гугле пишете типа индекс и регистрируетесь там, чтобы получить опять ключ там бесплатный даётся там на какое-то количество запросов. Потом что мы делаем? Мы заходим вот сюда. Вот здесь у нас документация индекс. Здесь вы можете почитать, то есть у них тут есть парсинг документов. Здесь вот описано, что тут можно делать, что нельзя делать. И есть вот такая вот штучка. Можно нажать CURL, нажать вот сюда вот копировать. Это штука, чтобы загружать файл. Сейчас я вот покажу Workflow, как это подробно всё происходит. Вообще проще скачать. Ну, можете прочитать документацию тоже. Curl чем прикольно? Тем, что вы можете написать HTP requквест, тот, который мы только что скопировали. Справа вот сюда нажать импорт CRL, и оно импортируется, и сразу вот тут всё расставится. Но я сразу покажу готовый work. Смотрите, здесь мы загружаем наш документ, который мы хотим нормально преобразовать. Ну, тут как обычно on submission, то есть мы просто загружаем документ. И здесь мы отправляем владекс, получается, наш запрос. Можете просто workflow скачать, если вам лень вникать. Если надо что-то добавить, какие-то опции, почитайте документацию, спросите уберплексе, у клода. Вот здесь мы ставим URL, получается лама индекс, к которым мы обращаемся. Самое главное, что вы можете менять в этом workflow, тут сенбазе будет выбрана. Вот что мы тут делаем. Здесь запускается специальный автомод, когда срабатывает триггер на изображение. То есть, если в документе есть изображение, срабатывает специальный автомод, который типа там, а, нейронки вот эти, конвертируют изображение в текст. Здесь то же самое на таблице тоже true выставлено. И здесь мы выбираем наши данные. Тут просто ставим дата, то есть то, что у нас с предыдущего узла идёт. Бинарный файл мы загружаем и adaptive long table тоже ставим true. Вот если вы хотите, можете прочитать документацию, да, тут что из этих параметров что делает. Если вы обнаружили, что что-то из этих параметров вам нужно, вы просто возвращаетесь сюда, нажимаете add параметр и добавляете. Скорее всего, form data будет. И тут пишете name, value. В документацию всё описано, всё. Больше ничего тут менять не надо будет. И вот тут ещё указан. Вот здесь вы ставите пробел и вставляете ваш опять ключ, который вы возьмёте на сайте ламы. Это всё. То есть этим узлом мы закидываем в нашу ламу файл, получается. А вот этим узлом мы проверяем статус, что произошло. Типа готов и не готов. Он же там на их серверах какое-то время обрабатывается. И мы закидываем тут, проверяем статус готов, не готов. Если не готов, мы ставим узел на 9 секунд и ждём. Проверяем. В случае, если он будет готов, этот узел, который делает следующее. Здесь мы просто, ну, когда всё готово, здесь этот узел позволяет нам достать те данные, которые появились в ходе работе ламы, то есть достать уже в виде маркдауна файл. Ну, единственное, вот тут вот в URL указывается jon, то есть ID, Job ID это называется, то есть ID конкретного файла, который вы обрабатываете. Но если вы будете этим шаблоном пользоваться, меня тут ничего не надо. Тут я для удобства поставил edit field, чтобы было просто видно. Да, вот я написал просто. И смотрите, как это работает. Жмём Execute Workflow. У нас открывается панель. Выбираем файлы. Возьмём сейчас специально какую-нибудь люто неприятную. Вот смотрите, вот тут всякие типа а что-то там вот, а таблица. Вот. Ну, понятно то, что если вы просто закинете, закинете в N8N и нажмёте extract from PDF, вам нормальные данные из этого не достанутся. А сейчас мы это сделаем через AMDКС. Всё, ждём. То есть он закидывает сейчас этот файл на сервера IndКС. Закинулся. Проверяем статус. Статус FSE, то есть он ещё статус вот он отображается. Статус он называется пендинing, то есть ещё обрабатывается. А, всё готово. Смотрите. И всё. Он вот мы забираем результат и смотрим. Вот он нам выдал этот файл. И вот неприятные таблицы теперь выглядят вот так. Вот is давайте проверим. Вот из вот изна и так далее. То есть как это вообще считать узлу вот этому обычному exstract from PDF в N8N? Да никак. А здесь специальный инструмент, который это всё считывает. И видите, он в понятном формате. Ну, вам может непонятно, но для lm это разметка Markдам, она вполне себе будет понятная. То есть он понятно это всё разделяет. И теперь вот видите, ну, вообще ужас. Вот оно. Как это преобразовать нормально? А вот так с помощью ламы индекс. И можно, давайте ещё один документик сделаем для демонстрации. Это документ с Сейчас покажу его, пока он будет обрабатываться. У нас всё загрузился. То есть большое количество каких-то картинок, что-то такого непонятного, типа, да, ой, ужас. Вот это вот, а, ужас. Это, ой, ужас, вообще ужасно. Вот обработался. И смотрим результат. Открылся. Вот тут явно что-то неприятное. Gen AI assistance. А вот они. Это же оно есть. Agents High Autonomy что-то там. Да, да. Вот оно. То есть он его нормально вполне себе обрабатывает. Во, вот, вот вообще ужас. Вот это то, что я показывал как раз. Вот, вот это оно. Вот эту таблицу, вот эту вот ужас, вот этот вот, он нормально преобразует в понятный для М вид в разметку маркдауна. Вот так вот. Короче, отличный, очень хороший инструмент, учитывая то, что там есть бесплатное количество запросов. Вообще круто. А, ну и, кстати, такой офтоп небольшой. Если вы думаете: "А как так? Понятный формат для LM - это не значит понятный формат для человека". То есть мы вот это смотрим и думаем: "Господи, какой ужас". Нам гораздо проще смотреть на таблицу. Но для М это понятный формат, потому что она на та она на таком формате все эти мки, они и обучались, они привыкли прямо к грязному тексту. То есть вы им закидываете прямо ужасный грязный неструктурированный текст, который человеческий глаз смотрит и вообще ужас. Ничего не понимает, не разделено на абзацы, ничего нету. А для ЛМ это вполне себе понятно, она привыкла с таким работать. А вот с таким работать она не привыкла. Поэтому нужно преобразовывать. Ну и потом вы, соответственно, весь этот текст копируете и закидываете в вашу векторную базу данных. И это будет отлично работать. Ну, по поводу оплаты, кстати, я не сказал, по поводу оплаты клода и Open I у многих проблемы возникают. Можно попробовать воспользоваться. One to pay у меня работает для оплаты. Я делаю, короче, просто предоплаченную карту. То есть это та карта, которая вы её не можете пополнить, у вас там фиксированный баланс, вы можете с неё только тратить деньги. Вот. И я через неё покупал API, ну, получается, закидывал насчёт API клода и насчёт API Openi. Вот я знаю то, что там большие типа комиссии, но тем не менее работает. Я не знаю других способов, если честно. Ну, только зарубежную карту себе реально сделать. И, ну, у меня есть как бы реферальная ссылка вон тупея. Я ни на что не рассчитываю, но если вы хотите там что-то оформить, закинуть деньги, можете по ней перейти. Мне копечка припадёт, буду благодарен. Хотя лучше на

Установка на сервер Qdrant, Supabase, Embedded модель, Redis, PostgreSQL

приватку подпишитесь, если честно. Дальше у нас идёт установка на сервер. А мы устанавливаем, наконец-то, всё на сервер. То есть мы покупаем сервер, естественно, какой хотите. Будем бегеет покупать. Сейчас покупаем домен и направляем домен на сервер. Устанавливаем на сервер. То есть что мы устанавливаем? Квадрант, векторную базу данных, SOPA Based, Postgress, SQL, embeded модель, LLM и ready с баз данных для кэш. Тоже прикольная тема. Все шаблоны из ролика в общем ТГ канале. Смотрите. Есть ещё закон 152 F3. Это в РФ такой закон. Не знаю, есть ли такие аналоги за границей. Короче, он гласит то, что вы должны хранить данные пользователи, если вы их собираете, допустим, переписку с пользователями. Вы должны хранить их на российском сервере. Это закон. Если вы его не соблюдаете, там штраф огромный, по-моему, поэтому лучше его соблюдать. Поэтому я буду показывать, как это всё развернуть на российском сервере. Вообще там разницы нет на каком сервере. На российском, не российском. Ну и давайте приступим. Смотрите, чтобы установить нам на сервер всё, нам нужно для начала открыть репозиторий, с помощью которого будем устанавливать. Я, кстати, списывался с автором репозитория. Он мне там отвечал на вопросы, когда мне что-то понятное не было во время установки. Вообще отличный чувак. Респект. Этот репозиторий, который позволяет сразу установить кучу программ. А тут есть разные программы, как бы, которые могут быть полезны при работе в N8N и Flowwise. Тоже такая тема для работы с лмками. Что тут есть внутри? Здесь есть N8N. Есть Supase вместе с Postgrгess, есть Квадран, есть C. То есть CD - это такая штука, чтобы вам не пришлось покупать для вашего домена, типа, чтобы защитить ваш сайт, сервер, нужно покупать SCL-сертификат на дон. Вот эта программа, которая делает это сама. То есть вам не придётся платить за деньги, за SL-сертификат. Есть там крол FI для скрапинга в интернете и так далее. Вот есть Alama, как раз-таки штука, чтобы разворачивать локально модели LM или embeded моделя. И есть ещё там всякие приложения. Я буду показывать только то, чем я пользуюсь. Ну и то, что подходит под ролик. Не зря же я это сюда включил. Что нам нужно для того, чтобы это всё установить? Для начала нам нужен сервер. Сервер вам нужен вообще любой, на самом деле. Просто вам нужна будет, ну, IP-адрес вашего сервера. Вот нажимаем, допустим, создать виртуальный сервер набите. Ну или там тыкните куда надо. Короче, сервер нужен прямо мощный, потому что вы, ну, я сейчас буду показывать, как развернуть там и свою LLM, и Квадрант, и Supace, и N8N, то есть много всего. Поэтому я какой сервер беру? Я беру вот четыре ядра, 12 ГБ RМ и, э, ну, там 70 где-то гигаб, наверное. То есть получается 63 руб. в день. Ну, короче, это что-то 1. 800 1. 2 руб. в месяц выходит. Но у вас на сервере сразу N8N будет, Superabase, Квадран и лэмки. То есть вы экономите гораздо большее количество денег, если бы вы покупали там подписку на ну в облаке, там Квадрант, если он есть вообще в облаке, я не знаю, Supase Nem, то есть это экономия денег нормальная. И листаете вниз. Не обязательно бикетите покупать, просто то же самое. Выбирать настройки сервера. Вот помощнее можно, ну, типа поменьше там. Ну, если что, можете на репозитории. про репозиторий прочитать, какие там нужны мощности, но я вот выбираю такие. И ставите убунту. Какую бунту? Самую последнюю 2404. Добавляете пароль, нажимаете создать виртуальный сервер. Смотрите, после того, как вы создали ваш сервер, вам нужно сразу зарегистрировать домен какой-нибудь. Я вот навеб купил, там что-то дёшево было, что-то рублей 200-300 на год. Вы регистрируете ваш домен, какой вы хотите, на любом э сервисе, где можно сделать себе домен. Вы сделали себе домен. Обязательно, что нужно сделать конкретно в таймбе, в таймвебе вот такая вот кнопочка, типа добавить под домен нужно, под домен, под домен. Что тут нужно вести? Здесь нужно вести вот такую звёздочку. Просто нужно ввести и всё. Вот просто вводите такую звёздочку и нажимаете добавить. После того, как вы его добавили, вы переходите в тот поддомен, который вы добавили. Вот он у меня он уже просто добавлен. Вы переходите в его настройку. То же самое будет на любом сервисе. Не обязательно, чтобы это был тайм. Может быть какой угодно сервис. Вот. И тут вы делаете следующее. Нажимаете добавить днсзапись типа А и сюда в значение вы добавляете IP вашего сервера, который вы создали. Я копирую IP, перехожу сюда и ставлю. Я это делать второй раз не буду, оно у меня уже добавлено. Потом вы ждёте какое-то время, пока оно пока ваш домен направится на сервер и поддон тоже направится на сервер. И после этого ваш сервер начнёт открываться по вашему домену. То есть это будет не сразу, это будет там, ну, там часа три, может, часов 12, там по-разному. Бывает 24 часа. Короче, всегда по-разному. Для основного домена вы сделайте то же самое. Вот нажмите настройки, настройки DNS и тоже добавьте короче, направьте ваш сервер. Это всё сразу сделайте. Пройдёт там какое-то количество часов, ваш домин направится на сервер. После того, как вы это всё сделали, я это буду показывать через специальный сервис. Сервис называется Termius. Открываете и жмёте вот здесь вот New Host. Это такая штука. Можно, короче, через консоль подключиться к серверу, но здесь удобнее просто. Просто жмёте New Host, копируете IP, закидываете сюда IP, а сюда вот закидывайте usernрнейм, у вас будет root, если вы через BG регистрируетесь. Через другие сервисы, скорее всего, тоже будет root. Ну, там прочитайте, что написано. И вводите пароль, который у вас есть от сервера, и подключаетесь. У меня уже он как бы создан. Что мне его второй раз создавать? Вот он у меня есть, и я к нему сейчас подключусь. Вот мы подключились к нашему серверу. Что нужно сделать? Переходим в репозиторий на GitHubбе и листаем до установки. Вот у нас сама установка. Просто копируем и просто её запускаем. Вот так. Копируем, ставить. Погнали. Всё, идёт процесс. Хопа, хоба-хопа. Что-то происходит. Здесь всё круто автоматизировано. То есть тут сразу и Суbase, и N8N, и Квадран. Всё ставится на сервер. Это очень удобно, очень круто. Делать ничего не надо. Вот не знаю, может, я это ускорю. Теперь он предлагает нам ввести домен. Вот он говорит primary domain example. com. Короче, берём тот домен, который вы направили на сервер, и копируете его. Вот именно этот. Копируем. Не тот, который со звёздочкой, а вот без звёздочки. Вот чистый домен. Возвращаемся и ставим. Вот спрашивает, верно ли я его указал. Ставим верно. Он говорит: "Введите адрес". Этот будет использоваться для там логина во всяких штуках. Ну давайте какой-нибудь введём. Вот я здесь вёл рандомный mail адрес, но вы можете какой-то настоящий вести. И вот смотрите, он говорит то, что в Supase и в CW for AI будет использоваться лэмка. И чтобы, короче, какая-то лмка использовалась, то есть чтобы у вас внутри Superbase был специальная стенка, которая вам может что-то подсказать, вам нужен Open e API ключ, то есть через который вам будет вызвать эту нейронку. Ну вот я сделал какой-то опять ключ, пусть будет. Вот он спрашивает, хотите ли вы загрузить теперь аэflow for N8N. Вы, короче, можете тут собран в этом ещё репозитории 300 workflow с ком communмти. Если вы хотите, можете загрузить. Я не хочу загружать, это просто время больше займёт. Видите, может 30 минут занять, пишет. Я не хочу, мне это не надо. Потом спрашивают, сколько будет количество воркеров N8N, то есть сколько человек будет работать на вашем сервере? Я буду только один, поэтому жму один. спрашивает, верно ли это. Я говорю: "Верно". Вот. И теперь открывается вот такое вот окошко. И здесь мы можем выбрать, что мы хотим устанавливать, а что не хотим. А, смотрите, вы можете почитать на репозитории, что там есть за инструменты, но я буду устанавливать конкретно, что я обещал установить. Смотрите, мы устанавливаем, чтобы установить embeded модель локально LM, мы устанавливаем аламу. Как вообще тут перемещаться? Жмёте на стрелочки. Вот, если видно, вот сейчас scroll for AI. Опа, search XNJ. Вот лето алама. То есть жмёте на стрелочки, перемещаетесь. Когда вы жмёте на пробел, вы выбираете что-то устанавливаете, жмёте ещё раз на пробел, звёздочка убирается, вы не выбираете. Как только всё выбрали, нажмёте Enter. То есть я жму аламу, мне нужна алама. Мне нужен superbase. Мне нужен квадрант мониторинг. А, ну пусть будет. Flowwise мне не нужен. И N8N не нужен. N8N мониторинг Superbase и Alama. Мониторинг можете оставить. можете убрать, это чтобы мониторить вашу систему, как она справляется с нагрузкой. Ну, как хотите, короче. Ну, я оставлю, нажимаю Enter. Здесь жмёте CPU, потому что вот когда я на бегете брал сервер, там была ЦПУ. Но если вы берёте сервер там за ГПУ, то можете, конечно, взять ГПУ, но лучше, если вы не знаете, что выбирать, выбирайте ЦПУ. Жмёте Enter. Всё, на этом этапе оно часто виснет, поэтому не переживайте, просто подождите. Готово. То есть у нас всё остановилось, и нам дают как бы доступы N8N, Supase там и так далее. Все доступы нам дают. Смотрите, скопируйте все эти доступы, выделите и скопируйте. Но даже если вы это забудьте, есть команда, чтобы их достать заново. Вот команда, чтобы их все заново достать, вот такая вот. Я её оставлю тоже в Телеграме. Погнали. Нужно подключиться к Субейсу, к квадранту. Ну давайте начнём с Субейса. Заходите на сайт Superabase по своему домену. Пишите вот так вот Superabase ваш домен и тамru. com, что у вас, я не знаю. И вот он нам даёт данные, по которым нужно подключаться. Вот тот mail, который мы ввели, и пароль, который он нам даёт. Он сгенерировал пароль специальный. Можно нажать запомнить этот пароль. Жмём вход. А, ну его тут не видно. Тут у меня написано https. У меня, то есть это CADIA, получается, делает SSL сертификат сразу для сервера, чтобы было защищённое подключение. Вот у нас открылась наша Supase, которую мы поставили на сервер. Чтобы его подключить к NV CM, мы делаем следующее. В NVO CM вы проходите стандартную как бы страницу регистрации. Потом вы активируете вот тут NVO CMN. Я рассказывал в своём гайде про то, как установить NVM на сервер, как это делать. Теперь делаем следующее. Ну, нажмём там триггер любой. Возьмём любой узел Superabase, чтобы получить к нему доступ. Вот здесь нужно нажать Create New Credential. И здесь нужно написать host. Какой мы пишем host? Здесь вы ставите тот host, который у вас, на котором у вас лежит Superbase. Вот такой же, то есть superbase. Точка ваш домен, который вы указывали при регистрации. Где взять сервис роль? Сервис роль key. Вот он указан. Supase. После того, как вы всё установили, вот вам отобразились данные. Копируем его, жмём сюда. Всё зелёненьким горит, значит, всё работает, всё хорошо. Спаabase мы подключили. Теперь мы подключаем квадрант. Чтобы подключать квадрант, мы переходим на сайт квадранта. Смотрите, чтобы перейти на сайт квадранта, надо будет ввести ваш домен. И надо будет ввести следующее. То есть надо будет ввести не просто ваш домен, то есть если вы введёте только вот так вот квадрант, сейчас покажу, что будет. У вас откроется вот такая штука, будет какая-то фигня. нужно ввести именно, а, то есть квадрант точка, потом тот домен, который вы регистрировали, и дальше вы пишете обязательно сшбор, тогда у вас всё нормально откроется. Вот теперь у вас откроется такое же окно. Здесь нужно сразу ввести API key. API ke мы опять же берём здесь. Вот у нас API key, квадрант. Копируем, ставим. Всё, квадрант заработал. Переходим в N8N, добавляем квадрант. Пишем квадрант Vector Store. Ну вот этот пусть будет. Жмём create new credential. Здесь ставим тот же API key. И квадрант URL ставим, ну, такой же получается, без дашборда, просто htps quadrant там. ru. Всё работает. Дальше что мы делаем? Давайте мы подключим постгress и redс. Давайте с постгреса, да, начнём. Зачем вообще нужен погрес? Постгрес и что такое по postстгress? Вот смотрите, у вас есть AI agent, и вы хотите, короче, допустим, складывать в вашей базе данных в Супайсе вот память. То есть здесь нету узла Subace, но есть узел Postgress. Можно его выбрать, и тогда история диалога будет складываться у вас в Superbase. Почему так? Потому что Supase - это программа над Postgress. Postgress - это база данных SQL, а Superabase - это штука, которая делает Postgress более понятным, то есть, э, делает приятный интерфейс, чтобы мы могли проще взаимодействовать с Postгress, потому что, а, если стоит голый постгрес без всего, то тогда с ним нужно взаимодействовать через код. А как бы не хочется, хочется через Base. К постгрессу нужно получить здесь доступ. Жмёте Create New Credential. И что мы тут вводим? Смотрите, здесь мы переходим в Pstg SQL. Вводим всё то же самое. хост пишем. Как там ДБ DB порт 5432, вот 5432 потом, а user postgress database postgress user postgress. Потом он нам даёт пароль. Копируем пароль, ставим пароль, жмём save. Всё готово, всё работает. Больше ничего вводить там не надо в целом. Отлично. Постгрес мы подключили. Теперь давайте подключим дис. Что такое readyс? Это, короче, ну, база данных в кэше. То есть внутри проекта в N8N вы могли заметить то, что там проблемы с передачей данных между ветками, так сказать. И с помощью диса мы записываем в кэш какие-то значения, ставим им время жизни, там какое хотим, там 5 минут, 60 минут, там 1 минуту, 2 минуты, и используем их. А потом они удаляются, чтобы не захлоплять нам память, потому что для таких задач можно как бы суй использовать, но Superbase оставляет данные как бы надолго, пока мы их не удалим, а Редис он их сразу удаляет. Вот. Вот написано про приватку Володе в своём приватном ТГ-канале подробно рассказывал о том, что такое редис и зачем он нужен. Это вообще крутая программа. Перейдите, посмотрите. Там у меня я разбирал там workкфлоow про автопостинг в Телеграме на основе новостей, где типа бот присылает каждое утро новости по определённому запросу. Вы выбираете новость, которая вам понравилась. Ну, смотрите источник, там указан источник, выбираете новость, которая вам понравилась, там краткая выжимка, даётся новости, нажимаете на кнопку, и у вас автоматически генерируется картинка, пишется пост. Потом вы это согласовываете, нажимаете согласовать, и оно закидывается сразу в ваш Telegram-канал. Вот. Вот такой мы проектом разбирали недавно. И там был рейдис, очень много рейдиса. Можете посмотреть подробнее. Очень крутая программа. Так вот, вернёмся к редису. Чтобы достать доступ кредис, мы жмём Create New Credential. Что мы тут вводим? Переходим обратно сюда же. Тут должна быть инфа проис порт 6379. Порт 6379 host пишем regisс. Смотрите, здесь даже пароль вводить не надо. Здесь просто пишете по 6379 host radi user password. Ничего вводить не надо. Жмёте, ну вот retry save. Всё готово. Остаётся теперь а embeded модель достать доступ к аламе. Смотрите, что для этого надо сделать. У Алама есть сайт, то есть вот. И тут есть models, то есть показаны модели, которые есть. Можете спросить у Perplexity, скинуть ей ссылку на сайт, как именно разворачивать модели. Ну, я сейчас покажу, конечно, как именно разворачивать. Тут есть разные модели. Вот есть псик там и прочее. Что мы будем разворачивать? Мы будем разворачивать следующее. Чтобы развернуть модель, нужно прописать следующее в консоли. То есть docker exeg it, oama alama p lama 3. Вот после слова вы можете выбрать ту модель, которую вы хотите развернуть. Я разворачиваю 3. Оно сразу развернёт lama 3 lm и там будет ещё eding модель в комплекте. Если вы хотите развернуть другую lm, например, deepsic или ещё что-то, спросите у Perplexity, скиньте ей этот документ или у любой другой нейронки, и она вам скажет, что нужно сделать. Но команду выводите такую же. Жмёте Enter. Всё готово. Success. Видите, написано, значит, всё установилось. Теперь, чтобы открыть нам оламу в N8N, что надо сделать? Открываем N8N. Здесь подключаем чат model. Вот она. Олаama. Вот у вас, скорее всего, будет сразу такой URL введён. Даже если не будет введён, ну, напишите такой же, как здесь. HTP двоеточая, два слэша, алама двоеточая 11434. Вот ретрай. Всё работает. И теперь у нас доступно вот у нас три модели доступно. То есть сама ламал МКД модель, с помощью которой я всё делал. И вот квен ещё доступен. Ну вот давайте ламу протестим, например. Вот это всё уберём. Привет. Кто ты? Запускаем чисто локальную модель на нашем сервере. А, ну и NMN бывает тоже потупливает, как только вы это всё развернули, там время пройдёт, будет работать нормально. Вот смотрите, ответил: "Привет, кто ты? Я лингвистической модель". Ну она работает дольше, чем нейронки по IPI. Но если вы хотите прямо, чтобы ваши данные там никуда не утекали, хоть их можно шифровать, конечно, хотите, чтобы работало всё в контуре вашего сервера, вполне себе вариант. Можно поставить модель побыстрее, не конкретно lла 3 latest. Вот. Но 1 модель работает быстро. Ну что, я вас поздравляю. Вы досмотрели до конца этого видео. Я вам очень сильно благодарен, то что вы дошли до этой отметки. Подписывайтесь на этот канал. Подписывайтесь на Telegram-канал Общий, подписывайтесь на приватку. Спасибо, что посмотрели это видео. Смотрите и другие ролики на моём канале, например, вот это. Пока.

Другие видео автора — Владимир Карпухин

Ctrl+V

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

Экстракты и дистилляты из лучших YouTube-каналов — сразу после публикации.

Подписаться

Дайджест Экстрактов

Лучшие методички за неделю — каждый понедельник