← AI process automation with n8n
04 / 07 · 50 min

RAG in a box: document Q&A

Two document Q&A pipelines: ingestion with chunking and embeddings into a vector store, and retrieval through the Vector Store Tool of an AI agent.

Lesson content is currently available in Russian.

What you will learn

  • →Объяснять архитектуру RAG и роли ingestion- и retrieval-пайплайнов.
  • →Настраивать чанкинг, embeddings и metadata при загрузке документов в vector store.
  • →Собирать документный Q&A через AI Agent с Vector Store Tool и диагностировать качество ответов по слоям.

Архитектура RAG в n8n: два пайплайна

RAG (retrieval-augmented generation) — паттерн, при котором модель отвечает не «из головы», а по фрагментам ваших документов, найденным под конкретный вопрос. Это решает две проблемы LLM: незнание внутренних данных компании и галлюцинации.

В n8n RAG — это ДВА независимых workflow, и путать их не стоит.

Ingestion (наполнение): документы → разбиение на чанки → превращение чанков в embeddings (числовые векторы смысла) → запись в vector store. Запускается при появлении новых документов.

Retrieval (ответы): вопрос пользователя → поиск ближайших по смыслу чанков в store → LLM формулирует ответ, опираясь на найденное. Запускается на каждый вопрос.

Выбор vector store: Simple Vector Store живёт в памяти инстанса — данные исчезают при рестарте, только для прототипов; production-варианты — Qdrant, Pinecone, PGVector, Supabase. Embeddings-модель задаётся sub-нодой (например, Embeddings OpenAI с text-embedding-3-small).

Железное правило: в ingestion и retrieval должна использоваться ОДНА И ТА ЖЕ embeddings-модель. Векторы разных моделей несравнимы — поиск будет возвращать мусор, причём без ошибок, молча. Это самый частый и самый незаметный баг RAG-систем.

Ingestion: загрузка, чанкинг, метаданные

Ingestion-workflow начинается с любого триггера: n8n Form Trigger с полем загрузки файла, Google Drive Trigger на новые файлы в папке, Schedule Trigger для регулярной пересборки.

Дальше — нода vector store в режиме Insert Documents с двумя sub-нодами:

  • Default Data Loader — принимает бинарные данные (PDF, txt, markdown, JSON, CSV) и превращает их в документы; здесь же добавляются metadata;
  • Recursive Character Text Splitter — режет документ на чанки.

Стартовые параметры сплиттера:

{ "chunkSize": 1000, "chunkOverlap": 200 }

Интуиция: меньше чанк — точнее попадание поиска, но меньше контекста достаётся модели; больше чанк — наоборот. Перекрытие спасает мысли, разрезанные по границе чанков: конец предыдущего повторяется в начале следующего.

Metadata — недооценённая часть ingestion. Добавьте source (имя файла), section, version, updatedAt — и получите три возможности: фильтровать поиск, показывать пользователю ссылку на источник и вычищать старые версии документов при обновлении.

После первого прогона откройте execution и проверьте фактуру: сколько чанков получилось, как выглядит их текст, не разрезало ли таблицы посередине. Кривой чанкинг не чинится никаким промптом на стороне retrieval.

Retrieval: Vector Store Tool у AI-агента

Самый практичный retrieval-паттерн в n8n: Chat Trigger → AI Agent с подключённым Vector Store Tool, внутри которого — ваш vector store и ТЕ ЖЕ embeddings, что в ingestion.

Два параметра решают почти всё.

Первый — description инструмента. Агент вызывает поиск не всегда, а когда решит, что он нужен, и решает по описанию. Пишите конкретно, ЧТО лежит в базе: «База знаний продукта Vorcl: тарифы, интеграции, инструкции по настройке, FAQ». С описанием «поиск по документам» агент будет то забывать про базу, то дёргать её на «привет».

Второй — Limit (top K): сколько чанков вернуть, обычно 3-5. Меньше — риск не найти нужное; больше — шум и лишние токены в контексте.

В system message агента добавьте правило честности: «Отвечай только по фрагментам из инструмента. Если ответа в них нет — так и скажи, не выдумывай». Это главный рычаг против галлюцинаций поверх RAG.

Если не нужны ни диалог, ни инструменты — берите Question and Answer Chain: вопрос → поиск → ответ, дешевле и предсказуемее агента. Правило то же, что в уроке 2: агент — когда нужны решения, chain — когда нужен конвейер.

Качество ответов: что крутить, когда «отвечает мимо»

Когда Q&A «отвечает мимо», не крутите все параметры сразу — диагностируйте по слоям.

Слой 1: поиск не находит нужный чанк. Проверьте напрямую: выполните поиск по store с вопросом пользователя и посмотрите на top-5 результатов. Если нужного фрагмента нет — уменьшайте chunkSize, добавляйте заголовки разделов в текст чанков, проверьте, что embeddings-модель адекватна языку документов.

Слой 2: чанк найден, но ответ его игнорирует. Это промпт-проблема: ужесточайте system message («отвечай ТОЛЬКО по фрагментам»), снижайте temperature до 0-0.2.

Слой 3: ответы устарели. Пересобирайте индекс по расписанию, храните в metadata версию и дату, при обновлении документа удаляйте его старые чанки — иначе поиск будет выдавать обе версии вперемешку.

Частые антипаттерны: Simple Vector Store в production (рестарт инстанса — база пуста, а рестартует n8n регулярно); чанки на 4000+ токенов «чтобы всё влезло» — поиск теряет точность; один store для разнородных доменов без metadata-фильтров.

И главное: соберите тестовый набор из 10-20 пар «вопрос → ожидаемый источник» и прогоняйте его после каждого изменения параметров. Без него тюнинг RAG — гадание на кофейной гуще.

Practice

Q&A по вашей документации

Соберите два workflow: ingestion двух-трёх markdown или PDF документов (splitter 1000/200, metadata с источником) и чат с AI Agent + Vector Store Tool. Задайте пять вопросов, ответы на которые есть только в ваших файлах.

Deliverable

JSON обоих workflow и таблица из пяти строк «вопрос → ответ агента → чанк-источник».

Checkpoint

Продемонстрируйте, что агент отвечает по документам, а не из общих знаний модели: задайте вопрос, ответ на который есть только в ваших файлах.

  • ✓ Ingestion и retrieval используют одну и ту же embeddings-модель.
  • ✓ Ответ агента опирается на найденные чанки, источник можно назвать.
  • ✓ На вопрос вне базы агент честно отвечает, что информации нет.

Check yourself

Почему RAG в n8n — это два отдельных workflow?

01Почему RAG в n8n — это два отдельных workflow?

Что даёт chunkOverlap при разбиении документов?

02Что даёт chunkOverlap при разбиении документов?

Почему Simple Vector Store не годится для production?

03Почему Simple Vector Store не годится для production?

Что произойдёт, если в ingestion и retrieval использовать разные embeddings-модели?

04Что произойдёт, если в ingestion и retrieval использовать разные embeddings-модели?

Какова роль description у Vector Store Tool?

05Какова роль description у Vector Store Tool?

Sources

RAG in a box: document Q&A · AI process automation with n8n · VORCL