Недавно мы выпустили статью «Всё про Qdrant. Обзор векторной базы данных», в которой подробно познакомились с данным сервисом. Сегодня мы рассмотрим векторную БД с практической стороны. В статье будет описана инструкция по разработке no-code RAG-приложения на основе n8n с использованием Qdrant.

Qdrant — это открытая векторная база данных для поиска документов по схожести, написанная на Rust. Qdrant предназначен для эффективного хранения и поиска эмбеддингов — векторов, представляющих картинки, текст и другие неструктурированные данные в высокоразмерном пространстве.

Работу Qdrant мы рассмотрим в статье на основе no-code RAG-приложения в n8n с использованием OpenAI.

RAG (Retrieval‑Augmented Generation) — это подход, при котором большая языковая модель (LLM) при генерации ответа обращается к внешним данным из базы знаний, предоставленной пользователем (из обработанных документов), а не полагается исключительно на информацию из своей предобученной модели.

Обычные LLM генерируют ответы «из головы» — на основе статичных данных, на которых они были обучены. У таких моделей есть knowledge cutoff — дата, после которой модель не знает новых фактов.

Но с RAG всё иначе:

  1. Документы превращаются в эмбеддинги и сохраняются в векторной БД (например, Qdrant).

  2. При запросе LLM:

    1. Генерирует эмбеддинг вопроса;

    2. Выполняет семантический поиск в БД;

    3. Извлекает релевантные куски текста;

    4. Вставляет их в prompt модели.

  3. LLM создаёт ответ уже с учётом этого контекста.

Настройка n8n

Для начала работы нам требуется запущенный n8n.

Запуск n8n мы произведем «одной кнопкой» в Amvera Cloud, где он есть как преднастроенный сервис. Это нам даст возможность развернуть и обновлять n8n одним действием из интерфейса, бесплатный домен с SSL, встроенное проксирование до OpenAI и возможность оплаты рублями моделей LLaMA (если нет иностранной карты для OpenAI).

  1. Переходим в личный кабинет Amvera Cloud.

  2. В панели снизу выбираем n8n

  3. Вводим название и выбираем тариф.

  4. Ожидаем запуска сервиса около 1 минуты. Готово.

Теперь, когда мы имеем рабочий сервис n8n, можем приступить к работе.

Переходим к проекту, открываем раздел «Домены».

Бесплатный домен с SSL
Бесплатный домен с SSL

Кликаем по доступному домену и переходим в интерфейс n8n.

Вы должны попасть на страницу входа. Вписываем данные и идём далее.

Мы попадём в главное меню n8n.

Меню n8n
Меню n8n

Разработка RAG Pipline

RAG pipeline (Retrieval-Augmented Generation pipeline) — это архитектурная схема работы ИИ‑системы, которая сочетает поиск релевантной информации (retrieval) и генерацию ответа (generation).

Именно pipeline называют весь этот процесс от запроса до ответа.

Наш функционал: пользователь отправляет документ, который далее векторизуется и сохраняется в Qdrant. Далее, при запросе пользователя LLM будет генерировать ответ с учётом информации из файла.

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

Приступим к разработке проекта.

Создаем Workflow. Для этого нажимаем на «+».

Мы попадём в область работы.

Итак, мы начнём с построения процесса ввода документа.

Добавляем первый node: n8n Form

Настраиваем следующим образом:

Нажимаем «Back to canvas», и также делаем с другими nodes.

На этом этапе мы создаём лишь форму для дальнейшей загрузки файла.

Нам требуется добавлять документы в наше векторное хранилище, поэтому присоединяем и ищем Qdrant Vector Store — Add documents to vector store.

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

На этом этапе нам требуется добавить Credential (личные данные). Поэтому мы возвращаемся в Amvera Cloud за Qdrant.

Запуск Qdrant и получение URL

Аналогично с n8n, Qdrant является преднастроенным сервисом в Amvera Cloud, что позволяет быстро развернуть сервис и приступить к работе с ним.

В панели преднастроенных сервисов выберите Qdrant Vector Store, и также впишите название проекта и выберите тариф.

Далее, в проекте (в разделе «Инфо») скопируйте доменное имя и используйте его как URL следующим образом:

http://доменное_имя:6333

Создание Credential

В n8n под Credential понимается набор данных для подключения к внешнему сервису или API — логин, пароль, токен, ключ, URL и прочие параметры.

Мы уже выбрали Qdrant Vector Store и находимся в окне настройки.

В поле Credential to connect with выбираем Create new credential.

В строке Qdrant URL появившегося окна вписываем URL, как мы показали ранее.

Нажимаем кнопку Save. При успешном подключении высветится зелёное уведомление.

Альтернативный метод создания Credential.

Нажимаем «+», выбираем Credential.

В появившемся окне ищем желаемый сервис (в нашем случае Qdrant Vector Store) и также его настраиваем.

Настройка Qdrant Vector Store в n8n

Мы уже настроили Credential, поэтому выбираем его и идём далее.

В Qdrant Collection мы должны вписать название коллекции из векторной базы данных Qdrant.

В Qdrant все данные группируются в коллекции — это изолированные пространства хранения, в которых находятся векторы, точки и связанные с ними данные (payload). Если провести аналогию с реляционными БД, то коллекция — это как таблица, только для векторных и семантических данных.

Выбираем тип «By ID» и вписываем произвольное название коллекции.

Теперь, когда мы добавили Qdrant Vector Store, нам требуется добавить ещё несколько элементов:

Добавление модели embeddings

Для представления PDF-файла в виде эмбеддингов (Числовых представлений объекта, полученное с помощью нейросети) нам требуется модель, которая будет превращать текст в эмбеддинги.

Мы будем использовать OpenAI.

Подготовка

Сперва мы должны получить API ключ. Его можно сгенерировать по ссылке. Далее —создать Credential по аналогии, представленной ранее. Вписываем лишь API Key.

Нажимаем на «+» c надписью Embeddings и выбираем в списке Embeddings OpenAI.

Возвращаемся на холст

  • Document Loaders

Нажимаем на +, выбираем Default Data Loader. Изменяем Type of Data на Binary

  • Text splitter

Здесь мы собираемся настроить, как разбить документ. В нашем проекте мы выберем Recursive Character Text Splitter, который рекомендуется в большинстве случаев использования.

Нам требуется определить размер чанков.

Чанки (chunks) — это небольшие фрагменты текста, на которые разбивается документ перед созданием эмбеддингов.

Иначе говоря:

Чанк — это кусок текста фиксированного размера (например, 300–500 слов), который можно подать модели для получения эмбеддинга.

Если у вас семантически простой документ, ставьте значение Chunk Size малым, если нет — напротив, большое. Мы же поставим усреднённое значение на 400. Chunk overlap рекомендуется ставить на ¼ от Chunk Size

Сейчас проект выглядит так:

Разработка RAG Chatbot

Сперва отдельно от всех создадим новый node: Chat Trigger. Нам требуется, чтобы срабатывал триггер на RAG после того, как сообщение появляется в чате.

Далее нам требуется присоединить AI Agent.

В данном случае мы настраиваем сам AI, который будет отвечать на вопрос пользователя с учётом информации из ранее подготовленного документа.

Без лишних настроек присоединяем его к Chat Trigger.

Настройка AI Agent

Первоначально нам требуется выбрать модель LLM. Мы и сейчас будем использовать OpenAI Chat Model. Для этого нам требуется нажать на +, и в списке моделей выбрать OpenAI Chat Model. Так как мы ранее настраивали Credential для OpenAI, то и сейчас за нас выбрана учётная запись. Далее вы можете выбрать любую удобную для вас модель GPT. Мы будем использовать gpt-4o-mini.

В Memory мы выбираем Simple Memory, здесь без изменений.

В Tool выбираем Qdrant Vector Store, здесь мы вписываем желаемое название и описание. Важно: имя Qdrant Collection должно соответствовать названию коллекции, выбранной ранее.

Limit — это количество фрагментов, которые можно извлечь из семантической базы данных. Вы можете установить это значение выше или ниже, в зависимости от того, сколько фрагментов вы хотите получить из БД.

Также вы можете для повышения эффективности создать системное сообщение, которое будет помогать LLM войти в курс дела.

Для этого в настройках AI Agent, разделе Options нажмите Add Option — System message. Системное сообщение должно описывать LLM его задачу, роль и деятельность. Пропишите его по желанию.

Теперь мы также должны настроить модель для эмбеддингов. Это такая же модель, как и та, которую мы добавили ранее. Поэтому достаточно лишь соединить эти два nodes.

Схема готового проекта

Тестирование и работа проекта

Для работы проекта требуется добавить документ с информацией, которая поможет LLM генерировать более точные ответы. Например, вы можете загрузить документацию какого-либо сервиса.

Для начала работы:

  • Запустите проект нажатием на Execute Workflow

  • В сплывающем окне загрузите документ формата .pdf

  • Ожидаем прогрузки и векторизации документа.

  • Задаём вопрос в чате.

  • Получаем ответ с учетом информации из документа.

Итоги

Мы реализовали локальную RAG‑систему на базе n8n c использованием векторной базы данных Qdrant которая позволяет:

  • Добавлять документы в векторное хранилище Qdrant.

  • Разбивать их на чанки и создавать эмбеддинги.

  • Выполнять поиск по смыслу среди загруженных данных.

  • Передавать найденные фрагменты в LLM‑модель через OpenAI для генерации ответа.

  • Управлять всем процессом через визуальные workflow в n8n.

Использование готовых нод и связок в n8n позволяет быстро настраивать pipeline без программирования.

Запуск мы произвели в Amvera Cloud, что позволило запустить n8n и Qdrant одной кнопкой из интерфейса, получить бесплатный домен c SSL и встроенное проксирование до OpenAI, а также подключить вывод LLM LLaMA без иностранной карты.

Комментарии (0)