RAG Workflows
Построение систем Retrieval-Augmented Generation в n8n
Что такое RAG?
Заголовок раздела «Что такое RAG?»RAG (Retrieval-Augmented Generation) — это паттерн, объединяющий поиск по документам с генерацией ответов через LLM.
Преимущества RAG
Заголовок раздела «Преимущества RAG»- Актуальность — LLM получает свежую информацию
- Точность — ответы основаны на реальных документах
- Источники — можно указать откуда информация
- Стоимость — меньше токенов чем fine-tuning
Архитектура RAG в n8n
Заголовок раздела «Архитектура RAG в n8n»Фаза индексирования
Заголовок раздела «Фаза индексирования»Фаза запроса
Заголовок раздела «Фаза запроса»Построение RAG Pipeline
Заголовок раздела «Построение RAG Pipeline»Шаг 1: Загрузка документов
Заголовок раздела «Шаг 1: Загрузка документов»Поддерживаемые форматы:
- DOCX
- TXT
- Markdown
Шаг 2: Разбиение на chunks
Заголовок раздела «Шаг 2: Разбиение на chunks»Text Splitter нода:
| Параметр | Рекомендация |
|---|---|
| Chunk Size | 500-1000 tokens |
| Chunk Overlap | 50-100 tokens |
| Separator | \n\n для параграфов |
Шаг 3: Создание embeddings
Заголовок раздела «Шаг 3: Создание embeddings»Embeddings нода:
| Модель | Размерность | Качество |
|---|---|---|
OpenAI text-embedding-3-small | 1536 | Высокое |
OpenAI text-embedding-3-large | 3072 | Очень высокое |
Ollama nomic-embed-text | 768 | Хорошее (бесплатно) |
Шаг 4: Сохранение в Vector Store
Заголовок раздела «Шаг 4: Сохранение в Vector Store»-- Создание таблицыcreate table documents ( id bigserial primary key, content text, embedding vector(1536), metadata jsonb);
-- Создание индексаcreate index on documents using ivfflat (embedding vector_cosine_ops);# Dockerdocker run -p 6333:6333 qdrant/qdrantВ n8n: URL http://localhost:6333
API Key: ваш ключIndex: my-indexEnvironment: us-east-1Шаг 5: Поиск
Заголовок раздела «Шаг 5: Поиск»Vector Store Retriever:
| Параметр | Описание |
|---|---|
| Top K | Количество результатов (4-10) |
| Score Threshold | Минимальный score (0.7-0.8) |
Шаг 6: Генерация ответа
Заголовок раздела «Шаг 6: Генерация ответа»Prompt для LLM:
Ты полезный ассистент. Отвечай на вопросы ТОЛЬКО на основе предоставленного контекста.
Контекст:{{ $json.context }}
Вопрос: {{ $json.question }}
Правила:- Если ответа нет в контексте, скажи "Не найдено в документации"- Указывай источник информации- Отвечай кратко и по существу
Ответ:Полный workflow
Заголовок раздела «Полный workflow»Индексирование
Заголовок раздела «Индексирование»-
Trigger: Manual или Schedule
-
Load Documents: Read Binary Files / HTTP Request
-
Extract Text: PDF, DOCX, или HTML node
-
Split: Text Splitter с overlap
-
Embed: OpenAI или Ollama Embeddings
-
Store: Vector Store Insert
-
Input: Webhook или Manual
-
Embed Query: Тот же Embeddings model
-
Search: Vector Store Retriever
-
Format Context: Code node для форматирования
-
Generate: LLM Chain с контекстом
-
Output: Response
Примеры
Заголовок раздела «Примеры»Документация Bot
Заголовок раздела «Документация Bot»Use case: Поддержка по документации продукта.
Knowledge Base
Заголовок раздела «Knowledge Base»Use case: Корпоративная база знаний.
Legal Document Analysis
Заголовок раздела «Legal Document Analysis»Use case: Анализ юридических документов.
Оптимизация
Заголовок раздела «Оптимизация»Качество поиска
Заголовок раздела «Качество поиска»| Метод | Описание |
|---|---|
| Hybrid Search | Комбинация vector + keyword |
| Re-ranking | Перераспределение результатов через LLM |
| Query Expansion | Расширение запроса синонимами |
Стоимость
Заголовок раздела «Стоимость»| Оптимизация | Эффект |
|---|---|
| Кэширование embeddings | -80% API calls |
| Локальные embeddings (Ollama) | Бесплатно |
| Batch processing | -50% стоимости |
Latency
Заголовок раздела «Latency»| Оптимизация | Эффект |
|---|---|
| ANN индексы (HNSW) | 10x быстрее поиска |
| Streaming responses | Мгновенный feedback |
| Pre-computed chunks | -2s на запрос |
Паттерны
Заголовок раздела «Паттерны»Parent-Child Chunking
Заголовок раздела «Parent-Child Chunking»Parent chunk (большой контекст) → для LLMChild chunks (маленькие) → для поиска