RAG в n8n: как сделать базу знаний, которая отвечает по источникам ¶
Обновлено: 2026-05-29
Короткий ответ ¶
RAG в n8n нужен, когда AI должен отвечать не “из головы”, а по вашим документам: базе знаний, регламентам, тарифам, инструкциям, FAQ или внутренней wiki. Качественный RAG — это не только vector store и embeddings, а полный процесс: подготовить документы, правильно нарезать chunks, добавить metadata, настроить retrieval, показывать источники, проверять ответы на тестовом наборе и регулярно обновлять индекс. Если пропустить хотя бы один слой, агент будет звучать уверенно, но ссылаться на устаревшие или нерелевантные данные.
Когда RAG действительно нужен ¶
RAG подходит, если ответ зависит от приватных или часто меняющихся знаний: внутренних регламентов, цен, инструкций, условий продукта, статей поддержки. Он не нужен для простых задач вроде классификации текста, извлечения email или генерации короткого summary — там достаточно LLM без базы знаний.
| Сценарий | Нужен RAG | Почему |
|---|---|---|
| Ответы по базе поддержки | да | модель должна ссылаться на статьи |
| Проверка статуса заказа | нет | лучше запросить CRM/API |
| Внутренний ассистент по регламентам | да | нужны актуальные документы |
| Классификация лида | обычно нет | хватает prompt + examples |
| Ответы по договорам/шаблонам | да, с review | высока цена ошибки |
Архитектура RAG workflow ¶
Типовой RAG в n8n состоит из двух разных workflow: ingestion и answering.
Ingestion workflow:
- забирает документы из Notion, Google Drive, сайта, Git, PDF или базы;
- очищает HTML/markdown от меню, footer и мусора;
- режет текст на chunks;
- добавляет metadata;
- создаёт embeddings;
- записывает chunks в vector store;
- логирует версию индекса.
Answering workflow:
- получает вопрос пользователя;
- нормализует язык, продукт, тариф, регион;
- делает retrieval по vector store;
- фильтрует источники по metadata;
- передаёт найденные chunks в AI Agent или QA chain;
- требует ответ со ссылками на source IDs;
- отправляет review, если источники слабые или конфликтуют.
Разделение важно: если ingestion и answering смешаны, вы не сможете понять, проблема в документах, embeddings, retrieval или prompt.
Подготовка документов ¶
Плохой документ для RAG — это страница, где вперемешку меню, реклама, хлебные крошки, кнопки, похожие FAQ и устаревший текст. Перед embedding нужно оставить только смысловой контент.
Минимальная очистка:
- удалить навигацию, footer, “читать дальше”, cookie banners;
- сохранить заголовки H2/H3 как часть контекста;
- добавить
source_url,title,updated_at; - пометить deprecated-страницы;
- разбить большие таблицы на осмысленные блоки;
- убрать дубли между языковыми/print-версиями.
Если база знаний изначально хаотичная, RAG не исправит её. Он только сделает хаос быстрее доступным.
Chunking: где чаще всего ошибка ¶
Слишком короткие chunks теряют смысл, слишком длинные тащат лишний шум. Начинайте с логического chunking по разделам, а не просто по 1000 символов.
| Тип документа | Подход к chunks |
|---|---|
| FAQ | один вопрос-ответ = один chunk |
| Инструкция | шаг или раздел = chunk |
| Регламент | правило + исключения = chunk |
| API docs | endpoint + параметры + ошибки = chunk |
| Длинная статья | H2-блоки с overlap |
Добавляйте overlap только там, где разделы реально зависят друг от друга. Большой overlap увеличивает стоимость и делает retrieval более шумным.
Metadata: главный способ снизить hallucination ¶
Metadata помогает не искать “во всех документах сразу”. Для Nodbot-подобного сайта полезны:
{
"source_url": "/ai/rag/",
"title": "RAG в n8n",
"section": "chunking",
"product": "n8n",
"language": "ru",
"audience": "developer",
"updated_at": "2026-05-29",
"status": "current"
}
Для customer support добавьте plan, region, product_line, version, visibility. Если клиент спрашивает про тариф в РФ, retrieval не должен подмешивать старый англоязычный документ для другого рынка.
Как проверять качество retrieval ¶
Не оценивайте RAG только по красоте финального ответа. Сначала проверьте, какие chunks возвращаются.
Тестовый набор должен включать:
- точные вопросы, где источник очевиден;
- вопросы с синонимами;
- вопросы с устаревшей информацией;
- вопросы без ответа в базе;
- конфликтующие документы;
- вопросы на другом языке;
- короткие запросы из 2–3 слов.
Для каждого вопроса храните expected source IDs. Если retrieval не достал правильный источник, prompt уже не спасёт.
Ответ должен показывать источники ¶
Production RAG должен возвращать не только текст, но и список источников.
{
"answer": "...",
"sources": [
{"source_url":"/ai/rag/", "section":"Metadata", "confidence":0.84}
],
"needs_human_review": false,
"missing_information": []
}
Если sources пустые, запрещайте уверенный ответ. Лучше честно сказать, что в базе знаний нет подтверждения, чем сгенерировать “правдоподобный” ответ.
Обновление индекса ¶
RAG устаревает тихо: документы обновили, а embeddings остались прежними. Нужен refresh-процесс.
Проверяйте:
- изменился ли
updated_atисточника; - удалены ли deprecated chunks;
- не задвоились ли chunks после re-index;
- сохраняется ли версия embedding model;
- есть ли smoke test после обновления базы;
- кто владелец документа.
Для критичных баз знаний обновление индекса лучше запускать по событию изменения документа, а не только вручную.
FAQ ¶
Можно ли собрать RAG без vector store?
Для маленькой базы можно передавать несколько документов прямо в prompt, но это быстро упирается в context window и стоимость. Vector store нужен, когда документов много и нужен поиск по смыслу.
Что важнее: embeddings или prompt?
Для RAG сначала важны документы, chunking и retrieval. Prompt не исправит ситуацию, когда в контекст попал неправильный источник.
Почему RAG даёт плохие ответы, хотя документы есть?
Чаще всего из-за плохой очистки документов, слишком крупных chunks, отсутствия metadata, устаревшего индекса или слабого тестового набора.