Твой RAG Это Шерлок С Гибридным Поиском (Hybrid Search)
14:05

Твой RAG Это Шерлок С Гибридным Поиском (Hybrid Search)

ИИшенка | AI Automation 13.01.2026 4 045 просмотров 204 лайков обн. 18.02.2026
Поделиться Telegram VK Бот
Транскрипт Скачать .md
Анализ с AI
Описание видео
🚀 Вступить в Pro-сообщество тут (там даже есть усложнённая версия этой автоматизации, которая держит вашу векторную базу в актуальном состоянии с Obsidian): https://t.me/iishenka_pro_bot ⚒️ Узнать больше про сообщество: https://iishenka.pro/group 🤩 Узнать больше про N8N Мастер-Класс: https://iishenka.pro/n8n-masterclass ⭐️ Бесплатные материалы из моих видео тут: https://t.me/+W1SnvvkcV6A3NWMy В этом видео я расскажу, как построить RAG-Агента, который обучен Гибридному Поиску (Hybrid Search) по вашей векторной базе. Что особенного в этом видео? Мы не только посмотрим, что такое Гибридный Поиск и как он работает, но и вместе векторизуем и поищем данные с его помощью! 🔥 Независимо от того, работаете ли вы с AI-агентами или только начинаете осваивать автоматизации в n8n, этот урок поможет вам овладеть процессом настройки ИИ для любых задач. ⏱ Таймкоды 00:00 – Вступление и проблема неточного поиска в RAG-агентах 00:33 – Почему векторный поиск плохо работает с точными запросами 00:53 – Решение: гибридный поиск (vector + keyword) 01:03 – Что будем строить: агент с гибридным поиском 01:18 – Гибридный поиск в Supabase и принцип работы 01:48 – Reciprocal Rank Fusion: объединение рангов 02:14 – Подготовка: таблица и индексы в Supabase 02:36 – Создание таблицы с векторами и FTS 03:20 – Добавление метаданных 03:42 – Создание индексов для гибридного поиска 04:00 – Создание SQL-функции гибридного поиска 04:44 – Как использовать гибридный поиск 05:05 – Подключение N8N и работа через чат 05:47 – Ручная векторизация запроса через OpenAI API 07:27 – Получение эмбеддингов и объяснение магии 08:09 – SQL-запрос к Supabase из N8N 09:38 – Загрузка документов в Supabase Vector Store 10:39 – Проверка данных и FTS-индекса 11:33 – Где скачать workflow и автоматизации 12:09 – Тест гибридного поиска (поиск по слову) 12:48 – Сравнение: гибридный поиск vs чисто векторный 13:34 – Итог: зачем нужен гибридный поиск 13:44 – Завершение и полезные ссылки 💡 Не забудьте поставить лайк и подписаться, чтобы не пропустить новые уроки по n8n и AI-агентам. Давайте сделаем AI-автоматизации простыми! 🙌 Я — Илья Бовкунов, основатель и СЕО Sendforsign — это компания, занимающаяся AI-автоматизацией договоров и документооборота. В прошлом был Директором по продукту и продуктовому дизайну в международных AI-стартапах. Позвать в подкаст или предложить другое сотрудничество aiiszdes@gmail.com Не забудьте поставить лайк, подписаться и нажать на колокольчик, чтобы не пропустить новые видео об AI-агентах и автоматизациях!

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

  1. 0:00 Вступление и проблема неточного поиска в RAG-агентах 90 сл.
  2. 0:33 Почему векторный поиск плохо работает с точными запросами 59 сл.
  3. 0:53 Решение: гибридный поиск (vector + keyword) 31 сл.
  4. 1:03 Что будем строить: агент с гибридным поиском 44 сл.
  5. 1:18 Гибридный поиск в Supabase и принцип работы 91 сл.
  6. 1:48 Reciprocal Rank Fusion: объединение рангов 68 сл.
  7. 2:14 Подготовка: таблица и индексы в Supabase 55 сл.
  8. 2:36 Создание таблицы с векторами и FTS 124 сл.
  9. 3:20 Добавление метаданных 60 сл.
  10. 3:42 Создание индексов для гибридного поиска 40 сл.
  11. 4:00 Создание SQL-функции гибридного поиска 94 сл.
  12. 4:44 Как использовать гибридный поиск 58 сл.
  13. 5:05 Подключение N8N и работа через чат 130 сл.
  14. 5:47 Ручная векторизация запроса через OpenAI API 281 сл.
  15. 7:27 Получение эмбеддингов и объяснение магии 121 сл.
  16. 8:09 SQL-запрос к Supabase из N8N 249 сл.
  17. 9:38 Загрузка документов в Supabase Vector Store 185 сл.
  18. 10:39 Проверка данных и FTS-индекса 146 сл.
  19. 11:33 Где скачать workflow и автоматизации 95 сл.
  20. 12:09 Тест гибридного поиска (поиск по слову) 104 сл.
  21. 12:48 Сравнение: гибридный поиск vs чисто векторный 128 сл.
  22. 13:34 Итог: зачем нужен гибридный поиск 27 сл.
  23. 13:44 Завершение и полезные ссылки 57 сл.
0:00

Вступление и проблема неточного поиска в RAG-агентах

Друзья, всем привет. Ну что, как отметили праздники? Готовы учиться новому? Вы когда-нибудь замечали, что ваш рагагент вообще не очень находит данные? Ну, то есть вы спрашиваете что-нибудь конкретное, а Чанкс с информацией, которая вам нужна, либо в выборке попадает на одно из последних мест, либо вообще не попадает. Ну, например, вы что-нибудь спросили: "Расскажи мне про ограничение ответственности в документе из пункта 12:3". Если в этом документе встречается масса мест, где сказано про ограничение ответственности, то пункт 123 может вообще остаться незамеченным либо иметь низкий приоритет. Это происходит потому
0:33

Почему векторный поиск плохо работает с точными запросами

что векторный поиск работает на основе поиска подобия. И в данном запросе ему скорее важна фраза ограничения ответственности, а не конкретный пункт. Резонный вопрос: а возможно ли построить такого Шерлока Холмса, который и точные запросы будет понимать буквально до одного слова, и общие вопросы смысловые тоже будет понимать? Ну, конечно, можно всё это построить. И всё это решается с
0:53

Решение: гибридный поиск (vector + keyword)

помощью, как вы уже, наверное, знаете, гибридного поиска. И сегодня к концу этого видео мы с вами построим агента, который работает на основе гибридного поиска и ищет ваши данные с невероятной
1:03

Что будем строить: агент с гибридным поиском

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

Гибридный поиск в Supabase и принцип работы

понадобится никаких новых технологий изучать, потому что, например, гибридный поиск есть в Superbase, а Superbase мы с вами пользуемся постоянно. И как здесь написано, мы комбинируем поиск по ключевым словам и семантический поиск или векторный поиск в одной функции. И более того, тут есть подробная инструкция. Тут, естественно, я предполагаю, что у вас уже установлен Supase. Если не установлено, то мы это делали тысячи раз. Посмотрите вот в этом видео, там полная подробная инструкция. разверните себе Super Suab Base и возвращайтесь сюда. И вся эта история строится на таком понятии, как
1:48

Reciprocal Rank Fusion: объединение рангов

Reciprocal Ranked Fusion или объединение обратных рангов. Мы не будем с вами глубоко в это копать, но в общем и целом система будет искать рейтинги подобия для вашего запроса, как по ключевым словам, так и по семантическому поиску. Итоговый ранг будет строиться на основе объединения результатов двух этих поисков, что повышает точность вашего поиска и уносит куда-то к небесам. И самое сладкое, что нам понадобится буквально несколько телодвижений.
2:14

Подготовка: таблица и индексы в Supabase

Создать табличку, создать индексы к ней, ну и саму функцию поиска. Мы это обычно и делаем, когда создаём таблицы для векторного поиска. Помните? Давайте не расусоливать. Сразу идём в Superbase. Открываю свою локальную Base. Здесь ищу SQL Editor. Возвращаюсь в документацию Subabase. И нам говорят: "Создайте новую таблицу документы". Забираю этот SQL-код. Вставляю. Давайте создадим
2:36

Создание таблицы с векторами и FTS

таблицу с названием Документышесть. Ну просто потому что у меня уже много подобных таблиц. И здесь обратите внимание, размер вектора 512. Если вы используете бединги от Open AI, то здесь нужно указать 1. 536. Ну и выполнить запрос. Делаем. Получаем ошибку, что тип extensions вектора не существует. Мы просто здесь убираем слово extensions, оставляем только вектор, нажимаем ещё раз run. Всё, наша таблица создана. Сразу идём в table Editor, проверяем. Видим, что вот она наша таблица, где есть сразу четыре важных поля. Айдишка, сам контент. Теперь тут есть поле FTS с типом TSвектор и наши привычные мединги. Кажется, что пока всё идёт по плану, но сразу, чтобы два раз не вставать, давайте я нажму редактировать таблицу, потому что мы с вами же забыли добавить
3:20

Добавление метаданных

методанные, а мы чаще всего же используем метаданные. Здесь добавляем столбец, его называем метаata. И тип у него обязательно Jason B. Нажимаем save. Проверяем, что вот наш столбец появился. Отлично, нам это и нужно было. Здесь возвращаемся обратно в SQL Editor, потом в документацию и видим, что теперь нам нужно создать два индекса к этой таблице. Забираем SQL, вставляем сюда.
3:42

Создание индексов для гибридного поиска

Таблица у нас называется document 6. Здесь прокидываем, нажимаем run. Всё, success. Как мы это проверяем? Идём здесь в database, потом ищем индексы и видим вот наши индексы для таблицы document 6. Прекрасно. Идём обратно в документацию. И теперь нам
4:00

Создание SQL-функции гибридного поиска

говорят: "Создайте функцию гибридного поиска". Давайте заберём эту функцию, вернёмся к нам в Supase, опять откроем SQL Editor, вставим всё. И давайте её внимательно, внимательно отсмотрим. Во-первых, я назову её гибридный поискшесть, чтобы потом не запутаться. Размерность вектора 1. 536. Убираем слово extensions, оно нам не понадобится. И везде, где я встречаю слово documents, я меняю на доменше 6. И здесь, и здесь. Нажимаем выполнить. Отлично. И у нас создалась функция гибридного поиска, которая называется Hybrid Search 6. Возвращаемся в документацию Superbase. И дальше нам рассказано, каким образом её можно использовать. Сказано, если хотите
4:44

Как использовать гибридный поиск

просто выполняйте SQL запрос. Ну а лучше создайте себе функцию. То есть эта функция написаная на JavaScript или Typeescript. И по сути, что она будет делать? Она будет наш запрос превращать сначала в embedдинг, потом реализовывать функцию поиска и семантического, и по ключевым словам, и будет нам возвращать результаты. Но это, если честно, чуть-чуть геморно. Я предлагаю вариант
5:05

Подключение N8N и работа через чат

покруче. Сразу идём в N C. Так, вот мой NV Cмен. Я нажимаю здесь create workflow. Сразу добавлю чат, потому что я буду через чат общаться с моим гибридным поиском. И давайте ещё раз посмотрим на гибридный поиск в документации Superbase. Я прямо вижу, что здесь есть две ключевые штуки. Сначала мы можем передавать непосредственный строку поиска, по которой будет осуществляться поиск по ключевым словам. А дальше я вижу, что мы можем передать вектор, то есть это вектор нашего запроса. И вот эту вот комбинированную историю мы передаём в нашу функцию гибридного поиска. И суabase делает всё за нас. Ну, вернее, сама функция. А можем ли мы вручную всё это сделать? Да, конечно, можем. Мы почти всё можем. Идём в NVC man. Я хочу прямо запрос пользователя. Вот я тут
5:47

Ручная векторизация запроса через OpenAI API

ввожу слово привет. Я хочу прямо этот привет сначала викторизовать, а потом уже подставлять в нашей СQLле запрос, который будет уходить в суй, как будто бы звучит логично. Каким образом мы что-то можем векторизовать вручную? Мы знаем, что почти у каждого провайдера нейронок есть свои нейронки для эмбедингов, для викторизации. Давайте попробуем прямо поискать Open AI. Здесь внутри посмотрим, что есть. Есть покоммуницировать с моделью, есть анализ картинок, есть генерация аудио, файлы. Но, если честно, что-то не вижу, что тут есть прямо прямой вызов моделей для имбедингов, но это нас не должно останавливать, потому что всегда есть универсальная нода, которая нас спасала с вами тысячу раз, называется HTTP запрос. Добавляю эту ноду, и мы сейчас будем слать запросы на векторизацию вообще вручную. Это будет постзапрос, конечно. Куда мы шлём? Я вот только что посмотрел, что нужно слать API openi. com embedings. Аутентификация нам нужна, поэтому воспользуемся такой магической штукой, как предопределённые корденшаалы. выбираем этот тип. Если вы уже где-то в других нодах использовали креды от любых сервисов, то вы всегда можете к ним постучаться через эту функциональность. Вот я нашёл здесь Open AI, и он говорит: "Здесь уже в твоём NV CM содержатся такие креды: "Хочешь, буду использовать. Да, я хочу". Потому что по сути он эти креды будет подставлять в хедер запроса, и мне не нужно прописывать здесь ничего вручную. Но вот я хочу послать единственное боди. Здесь выбираю Jon. И опять же, я только что посмотрел в документации, запрос на векторизацию шлётся очень просто. Мы указываем модель, нам нужна текст beding 3 small, мы постоянно ей пользуемся. А дальше сам текст, сама строка, которую мы будем векторизовать. А ведь она у нас есть здесь в чат-инпуте. Я просто взял
7:27

Получение эмбеддингов и объяснение магии

перекинул сюда чапут. И по сути нас ничего не оснавливает перед тем, чтобы векторизовать наше слово привет. Давайте выполним этот шаг. Оу, оваувау. Нам Open Ai вернул эмбединги для нашего слова привет. То есть это вектор для нашей фразы. Сейчас чувствуете, да, как магия вообще раскрывается? То, что обычно для нас N8 CNN скрывает под своим капотом внутри нот, мы сейчас прямо делаем вручную. По сути, это же самое происходит, когда вы просто добавляете ноду СUP Base Vector Store и закидываете в неё чанки. Вот происходит то же самое. Каждый чанк проходит через процесс векторизации, и мы получаем наши векторы. Теперь вернёмся в документацию Subbas BASE. И нам сказано вот так общайтесь с нашим гибридным поиском. Поэтому забираем этот SNIP. Возвращаемся
8:09

SQL-запрос к Supabase из N8N

в VMAN. И каким образом мы можем слать SQLзапросы в нашу Superabase? Ну, по факту в Postgress, который лежит в основе Superbase. Так и ищем ноду Postgress, добавляем её. И здесь есть функция выполнить SQL запрос. Нажимаем её. Здесь есть поле для SQL запроса. Вставляем его, но сейчас на него посмотрим повнимательней. Креды я поменяю на свои локальные. Так, сама функция называется в нашем случае Hybrid Search 6. Мы её сами так назвали. Дальше сам запрос. Зачем нам итальянский соус? Нам он не нужен. Но запрос-то у нас лежит изначально в нашем чат-инпуте. Поэтому я прямо беру его всё, закидываю. И дальше он говорит: "Закинь мне векторы". А векторы ведь мы только что с вами сгенерировали, поэтому убираем вот эти скобочки. Мы видим, что наши векторы в поледин лежат. Прямо закидываем сюда их. Смотрим внизу, каким образом это всё он рендерит. Смотрите, наш вектор тут лежит в поле массив. Нас это точно не устраивает, потому что а постгрес отплюнется, потому что ему нужен только вектор. Никакое слово массив ему не нужно. Поэтому используем бронебойный довод королей. Мы здесь пишем jon то stringify и забираем в скобочки всю нашу переменную. Смотрим теперь, как рендерится наш вектор. Отлично. Теперь формат топ. Ну что, давайте выполнять. Смотрим, как это будет работать. Так, ошибка та же самая. Убираем слово extensions. Ну и, конечно же, размерность 1. 536. Мы с вами забыли поменять. Теперь опять выполняем. Нету никаких данных, но это потому, что у нас в самой таблице ничего нету. Давайте туда что-нибудь загоним.
9:38

Загрузка документов в Supabase Vector Store

Ищем ноду Superabase Vectктор Store. Нажимаем тут добавить документы в Vectктор Store. Указываем здесь правильную табличку. Да, мы с вами только что создали докумен. А вот в опциях мы должны указать функцию поиска. И она у нас называется Hybrid Search 6. Эта функция используется не только для получения данных из векторного хранилища, но ещё и для правильной записи, потому что там происходит много магии внутри. Дальше модель для эмбендинков та же самая, только теперь через официальную ноду. Ну и самый большой вопрос: откуда мы документы берём? Вы берите оттуда, где они у вас лежат, а я заберу из своего обсидиана. Мы недавно с вами учились забирать файлы из обсидиана и векторизовать их с помощью N8N. Вот они у меня всей кучкой лежат, поэтому я воспользуюсь своей старой функцией, которая держит в актуальности мой обсидиан и викторизует все заметки. Кстати, топовая тема, посмотрите вот в этом видео. Как только мы что-то будем добавлять в обсидиан, все эти знания будут викторизоваться и будут доступны нашему агенту как нашему второму мозгу. Но это сейчас не тема разговора. Я просто нажимаю выполнение workflow. Он сам всё делает за меня.
10:39

Проверка данных и FTS-индекса

Поэтому мы с вами просто возвращаемся в Superbase и смотрим, что у нас в нашей таблице с документами. Обратите внимание, начало очень похожее. Здесь есть просто контент моих заметок, а дальше в поле FTS есть вот такие прекрасные значения. Они выглядят мегастранно, но в этом есть и вся соль поиска по ключевым словам. Этот процесс называется стеминг, то есть, по сути, система упрощает наш текст, разбивает его по словам и проставляет специальные ранги на основе того, насколько важно это слово в тексте. Там прикольный процесс. Система смотрит, сколько раз слово встречается в тексте, где его позиция, ближе к началу или ближе к концу, какая плотность его в этом тексте, ну и насколько он, в принципе, редкий. Дальше в таблице идут привычные намбединги, векторы, ну и метаданные, которые мы заблаговременно добавили как столбец в нашу таблицу. Кстати, друзья, если вы переживаете за эту автоматизацию, каким образом тут
11:33

Где скачать workflow и автоматизации

происходит всё, то в конце каждого видео я нажимаю кнопочку download и скачиваю JSON этой автоматизации и сохраняю в свою бесплатную Telegram-группу. Вы идёте, открываете эту группу, находите релевантное вам видео, которое вам нравится. Под этим видео ищете файл jonфайл. Нажимаете скачать его, загружаете через тот же самый принцип обратно себе в N8N и продолжаете экспериментировать. А все усложнённые автоматизации закидываю себе в прогруппу. Ссылка на неё тоже будет в описании. Там вообще куча всего про Nan, автоматизации, искусственный интеллект. Туда тоже обязательно заскакивайте, проверяйте внизу. Ну что, давайте уже тестировать. Я напишу что-нибудь очень
12:09

Тест гибридного поиска (поиск по слову)

простое, чтобы как раз мы могли проверить эффективность поиска по ключевым словам. Я напишу только одно слово, пускай это будет слово учёба. Нажимаю Enter, вижу, как сейчас викторизуется моё слово. И потом наш SQL запрос возвращает нам релевантные чанки. И смотрите, прямо по одному запросу в самом верху, на самом первом месте стоит чанк про учёбу с персональным и тютотером. И вы можете увидеть, как отрабатывает fullкt search, каким образом расставлены ранги каждого слова. И, вообще говоря, это релевантная запись, которую я держал у себя в голове, которую мы нашли прямо с первого раза по одному слову. А давайте сейчас попробуем отдельно провести векторный
12:48

Сравнение: гибридный поиск vs чисто векторный

поиск по этому же самому слову, не используя поиск по словам. Вот мой старый агент, который смотрит на мою ту же самую таблицу, но использует функцию не гибридного поиска, а векторного. Итак, я пишу слово учёба, отправляю сюда. Смотрим, как работает агент. вызывает наш векторстор и смотрите, какой чанк у нас самый релевантный по мнению векторного поиска. Мгновенный перевод речи в ухе - это конец изучению языков как необходимости. И это есть то самое базовое отличие, про которое мы говорили в самом начале. Когда я сказал слово учёба, то векторный поиск пытается организовать поиск по смыслу. И так как он нашёл чанк про изучение, то есть по смысловой нагрузке, это реально про учёбу, но сам чанк был нерелевантен для конкретно моего кейса. Именно поэтому следует внедрять гибридный поиск
13:34

Итог: зачем нужен гибридный поиск

который будет объединять результаты поиска векторного и поиска, по ключевым словам, в единую конструкцию и отдавать уже агенту вашему объединённые результаты. Ну что, друзья, мы на этом
13:44

Завершение и полезные ссылки

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

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

Ctrl+V

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

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

Подписаться