RAG: RETRIEVAL AUGMENTED GENERATION
Explains the RAG pattern (Retrieval Augmented Generation) with diagrams, analogies, and a step-by-step breakdown of chunking, embeddings, and vector databases.
What this file does
Explains the RAG pattern (Retrieval Augmented Generation) with diagrams, analogies, and a step-by-step breakdown of chunking, embeddings, and vector databases.
When to use it
- Learning what RAG is and why it beats fine-tuning or prompt stuffing
- Understanding the three-step pipeline: retrieval, augmentation, generation
- Choosing a chunking strategy and vector database for a new project
- Explaining RAG to a team or in a presentation
RAG: RETRIEVAL AUGMENTED GENERATION
Часть 1: Основы и принципы работы
📋 Содержание
- Проблема: AI слепой к вашим данным
- Что такое RAG
- История RAG
- Как работает RAG: 3 шага
- Chunking: разбиение на кусочки
- Embeddings: векторы смысла
- Векторные базы данных
1. Проблема: AI слепой к вашим данным
🤔 Современные AI умеют многое
ChatGPT, Claude, Gemini в 2026:
✅ Гуглят актуальную информацию
✅ Анализируют документы
✅ Пишут код
✅ Говорят "я не знаю" вместо выдумывания
НО есть огромная проблема:
📊 Статистика
┌────────────────────────────────────────┐
│ РАБОЧЕЕ ВРЕМЯ РАЗРАБОТЧИКА │
├────────────────────────────────────────┤
│ │
│ 80% → Поиск информации во внутренних │
│ системах компании │
│ • API документация │
│ • Внутренние wiki │
│ • Confluence │
│ • Slack история │
│ │
│ 20% → Написание кода │
│ │
└────────────────────────────────────────┘
💬 Эксперимент
Попробуй прямо сейчас:
Спроси у ChatGPT:
"Какая у нас политика отпусков в компании?"
Ответ:
"У меня нет доступа к внутренним документам
вашей компании."
───────────────────────────────────────────
Спроси:
"Какая процедура одобрения бюджета?"
Ответ:
"Я не могу предоставить информацию о
конкретных внутренних процессах вашей
компании."
Проблема: Информация СУЩЕСТВУЕТ, но AI к ней НЕТ ДОСТУПА!
🎧 Аналогия: Оператор-новичок в поддержке
Ситуация: первый день на линии поддержки
┌─────────────────────────────────────────┐
│ НОВИЧОК В СЛУЖБЕ ПОДДЕРЖКИ │
├─────────────────────────────────────────┤
│ │
│ Контекст: │
│ • Первый рабочий день │
│ • Ничего не знает про процессы фирмы │
│ • Клиенты уже пишут в чат │
│ │
│ Риск без RAG: │
│ • Ошибочные ответы │
│ • Выдуманные правила │
│ • Потеря времени на ручной поиск │
│ │
└─────────────────────────────────────────┘
Решение:
┌─────────────────────────────────────────┐
│ ОПЕРАТОР-НОВИЧОК И БАЗА ЗНАНИЙ (FAQ) │
├─────────────────────────────────────────┤
│ │
│ Что есть: │
│ 1. Оператор-новичок в чате │
│ 2. База знаний (FAQ, инструкции) │
│ 3. Поиск по вопросу клиента │
│ │
│ Как работало: │
│ ──────────── │
│ │
│ Клиент пишет: │
│ • "Как вернуть товар?" │
│ │
│ Оператор-новичок: │
│ • Не знает внутренних правил │
│ • Не отвечает "из головы" │
│ • Запрашивает ответ у базы FAQ │
│ • Отправляет клиенту точную инструкцию │
│ │
│ База FAQ: │
│ • Находит статью "Возврат товара" │
│ • Достаёт нужные шаги и сроки │
│ │
│ Результат: даже новичок даёт │
│ точный ответ без выдумок ✅ │
│ │
└─────────────────────────────────────────┘
Это и есть RAG в чистом виде!
🔄 Схема RAG на примере поддержки
┌──────────────┐
│ Клиент │
│(пользователь)│
└──────┬───────┘
│
│ "Как вернуть товар?"
↓
┌───────────────┐
│Оператор-новичок│ ← Ничего не знает
│ (LLM) │ про правила фирмы
└──────┬────────┘
│
│ Ищет во внешней базе знаний
↓
┌──────────────┐
│ FAQ база │ ← Внешний источник
│ (vector DB) │
│ │
│ Находит: │
│ "Возврат: │
│ 14 дней..." │
└──────┬───────┘
│
│ Передаёт найденный контекст
↓
┌───────────────┐
│Оператор-новичок│ ← Получил контекст
│ (LLM) │ Формирует ответ
└──────┬────────┘
│
│ "Оформите возврат в личном
│ кабинете, срок 14 дней..."
↓
┌──────────────┐
│ Клиент │
│ (доволен) │
└──────────────┘
Важно: После диалога оператор-новичок не "запоминает" правила навсегда. Так же и LLM не хранит этот контекст между сессиями.
2. Что такое RAG
📖 Расшифровка
R - Retrieval = Поиск
A - Augmented = Усиленная, дополненная
G - Generation = Генерация
RAG = Поиск + Дополнение + Генерация
🎯 Простое определение
RAG = AI-библиотекарь
1. Retrieval → Ищет нужные книги
2. Augmented → Читает найденное
3. Generation → Отвечает на основе прочитанного
🏗️ Высокоуровневая схема
┌────────────────────────────────┐
│ ПОЛЬЗОВАТЕЛЬ │
│ "Как приготовить борщ?" │
└───────────┬────────────────────┘
│
↓
┌───────────────────────────────────────┐
│ RAG СИСТЕМА │
│ │
│ ШАГ 1: RETRIEVAL (Поиск) │
│ ┌─────────────────────────┐ │
│ │ Векторная база данных │ │
│ │ • Рецепты супов │ │
│ │ • Статьи о борще │ │
│ │ • Кулинарные книги │ │
│ └──────────┬──────────────┘ │
│ │ находит релевантное │
│ ↓ │
│ ШАГ 2: AUGMENTED (Дополнение) │
│ ┌─────────────────────────┐ │
│ │ Вопрос + Найденная инфа │ │
│ │ = Расширенный промпт │ │
│ └──────────┬──────────────┘ │
│ │ │
│ ↓ │
│ ШАГ 3: GENERATION (Генерация) │
│ ┌─────────────────────────┐ │
│ │ LLM генерирует ответ │ │
│ │ на основе контекста │ │
│ └─────────────────────────┘ │
└───────────┬───────────────────────────┘
│
↓
┌────────────────────────────────┐
│ ОТВЕТ ПОЛЬЗОВАТЕЛЮ │
│ "Для борща нужна свекла... │
│ (Источник: recipes.pdf)" │
└────────────────────────────────┘
🆚 RAG vs Обычный LLM
БЕЗ RAG:
────────
Вопрос: "Какая политика отпусков в компании?"
↓
[LLM]
↓
Ответ: "У меня нет информации..."
ИЛИ
"Обычно политика отпусков..." [выдумывает]
❌ Не знает ваших данных
❌ Может галлюцинировать
❌ Неспецифичный ответ
С RAG:
──────
Вопрос: "Какая политика отпусков в компании?"
↓
[RAG система]
1. Ищет в HR_Policy_2026.pdf
2. Находит раздел про отпуска
3. Добавляет в контекст
↓
[LLM]
↓
Ответ: "Согласно HR_Policy_2026.pdf:
• 28 календарных дней
• Заявка за 14 дней
• Одобрение руководителя"
✅ Знает ваши данные
✅ Не выдумывает
✅ Даёт ссылку на источник
3. История RAG
📅 Timeline
2017-2019: Предшественники
───────────────────────────
🔬 Google, Facebook экспериментируют
Проблема: медленно, дорого, не масштабируется
2020: Рождение RAG
──────────────────
🎉 Facebook AI Research (Meta)
Статья: "Retrieval-Augmented Generation for
Knowledge-Intensive NLP Tasks"
Авторы: Patrick Lewis et al.
Ключевая идея:
Объединить параметрическую память (LLM)
с непараметрической памятью (БД)
2021-2022: Первые шаги
──────────────────────
📚 Векторные БД появляются:
Pinecone, Weaviate, Milvus
🧪 Первые production внедрения
2023: Взрыв популярности
────────────────────────
🚀 ChatGPT Plugins → RAG в массы
📈 LangChain, LlamaIndex
💼 Enterprise adoption
2024: Зрелость
──────────────
🏗️ Продвинутые техники:
• Hybrid search
• Reranking
• GraphRAG
📊 Evaluation frameworks: Ragas
2025-2026: Мейнстрим
─────────────────────
💼 60%+ production AI используют RAG
🤖 Agentic RAG
📈 Рынок: $1.2B → $11B к 2030
📊 Почему RAG победил?
Альтернативы и их проблемы:
Fine-tuning
───────────
Переобучить модель на своих данных
❌ Дорого: $10K - $100K+
❌ Долго: недели
❌ Данные устаревают быстро
❌ Нужны GPU и ML expertise
Prompt Stuffing
───────────────
Вставить все доки в промпт
❌ Ограничение контекстного окна
❌ Очень дорого (токены)
❌ Модель "теряется" в тексте
❌ Не масштабируется
Web Search
──────────
Использовать Google/Bing
❌ Только публичные данные
❌ Не работает с внутренними docs
❌ Каждый запрос = деньги
❌ Нет контроля над источниками
Почему RAG выиграл:
✅ Дешевле fine-tuning в 10-100 раз
✅ Быстрее внедрить (дни vs месяцы)
✅ Легко обновлять данные
✅ Работает с приватными данными
✅ Прозрачность (ссылки на источники)
✅ Масштабируется (миллионы документов)
4. Как работает RAG: 3 шага
Давай детально разберём каждый шаг.
🔄 Полная схема
╔═══════════════════════════════════════════════╗
║ ПОЛНЫЙ ЦИКЛ RAG ║
╠═══════════════════════════════════════════════╣
║ ║
║ ПОДГОТОВКА (делается один раз): ║
║ ═════════════════════════════════ ║
║ ║
║ 1. Берём документы ║
║ ↓ ║
║ 2. Разбиваем на chunks (кусочки) ║
║ ↓ ║
║ 3. Создаём embeddings (векторы) ║
║ ↓ ║
║ 4. Сохраняем в векторную БД ║
║ ║
║ ─────────────────────────────────────── ║
║ ║
║ ЗАПРОС (каждый раз): ║
║ ════════════════════ ║
║ ║
║ Пользователь: "Вопрос?" ║
║ ↓ ║
║ 5. Превращаем вопрос в embedding ║
║ ↓ ║
║ 6. Ищем похожие chunks в БД ║
║ ↓ ║
║ 7. Берём топ-5 релевантных chunks ║
║ ↓ ║
║ 8. Добавляем в промпт к LLM ║
║ ↓ ║
║ 9. LLM генерирует ответ ║
║ ↓ ║
║ 10. Отдаём пользователю с источниками ║
║ ║
╚═══════════════════════════════════════════════╝
ШАГ 1: Подготовка данных
Входные данные:
• PDF файлы
• Word документы
• Markdown файлы
• Веб-страницы
• База данных
• Confluence/Notion страницы
Процесс:
Документ: "Python Guide" (500 страниц)
↓
Chunking (разбиение)
↓
Chunk 1: "Python was created by..."
Chunk 2: "Variables in Python..."
Chunk 3: "Functions are defined..."
...
Chunk N: "Best practices include..."
↓
Embedding Model
↓
Vector 1: [0.12, 0.54, -0.33, ...]
Vector 2: [0.87, -0.21, 0.45, ...]
Vector 3: [-0.15, 0.92, 0.18, ...]
...
Vector N: [0.43, -0.67, 0.29, ...]
↓
Векторная БД
ШАГ 2: Поиск (Retrieval)
Когда пользователь задаёт вопрос:
Вопрос: "Как создать функцию в Python?"
↓
Превращаем в embedding
↓
Query Vector: [0.34, -0.18, 0.91, ...]
↓
Векторная БД ищет похожие векторы
↓
Топ-5 chunks:
1. "Functions are defined using def..." (0.95 similarity)
2. "Python functions can take arguments..." (0.88)
3. "Function syntax: def name(params)..." (0.85)
4. "Return values from functions..." (0.82)
5. "Lambda functions in Python..." (0.79)
Магия: Нашлись chunks про функции, даже если слово "создать" там нет!
ШАГ 3: Генерация (Generation)
Создаём расширенный промпт:
Системный промпт:
─────────────────
"Ты AI-ассистент. Отвечай на основе
предоставленного контекста."
Контекст (найденные chunks):
─────────────────────────────
Chunk 1: "Functions are defined using def..."
Chunk 2: "Python functions can take..."
Chunk 3: "Function syntax: def name..."
Вопрос пользователя:
────────────────────
"Как создать функцию в Python?"
↓ всё это идёт в LLM ↓
LLM генерирует:
───────────────
"В Python функции создаются с помощью
ключевого слова `def`:
def my_function(param1, param2):
# код функции
return result
Источник: Python_Guide.pdf, стр. 42"
5. Chunking: разбиение на кусочки
🍕 Аналогия
Документ = Большая пицца
Chunks = Кусочки пиццы
Почему нельзя скормить целую пиццу?
• LLM не может "проглотить" сразу 500 страниц
• Поиск будет неточным
• Слишком дорого (токены)
📏 Стратегии Chunking
1️⃣ Fixed-Size (Фиксированный размер)
Документ: "AAAABBBBCCCCDDDDEEEE..."
└─────┘└─────┘└─────┘
500 500 500 символов
Chunk 1: [0...500]
Chunk 2: [450...950] ← overlap 50
Chunk 3: [900...1400]
Плюсы:
✅ Просто реализовать
✅ Предсказуемый размер
Минусы:
❌ Может разрезать предложения
❌ Теряется контекст
2️⃣ Sentence-Based (По предложениям)
Текст: "Python is great. It's easy.
Many use it."
Chunks:
• "Python is great. It's easy."
• "It's easy. Many use it."
Плюсы:
✅ Не разрывает предложения
✅ Сохраняет смысл
Минусы:
❌ Неравномерный размер
3️⃣ Semantic (Семантическое)
AI анализирует смысл и разбивает по темам
Документ:
─────────
[500 слов про историю Python]
[300 слов про синтаксис]
[400 слов про библиотеки]
Chunks:
───────
Chunk 1: ВСЁ про историю (одна тема)
Chunk 2: ВСЁ про синтаксис (другая тема)
Chunk 3: ВСЁ про библиотеки (третья тема)
Плюсы:
✅ Сохраняет логику
✅ Chunks = законченные мысли
✅ Лучшее качество
Минусы:
❌ Сложнее
❌ Требует LLM
❌ Медленнее
Рекомендация: Для начала — Fixed-Size с overlap. Для production — Semantic.
6. Embeddings: векторы смысла
🧬 Что такое Embedding?
Embedding = координаты смысла в пространстве
Слово "кот" → [0.2, 0.8, 0.1, 0.5, -0.3, ...]
└─────────────────────────┘
384-1536 чисел
🗺️ Визуализация (упрощённо в 2D)
животные
↑
│
кот • │ • собака
│
────────┼──────── → программирование
│
│ python •
│ • javascript
│
еда │
борщ •
пицца •
Магия: Похожие слова = близкие точки!
🔬 Как создаются?
Текст: "Python is a programming language"
↓
Embedding Model
(например, OpenAI text-embedding-3-small)
↓
Vector: [0.123, -0.456, 0.789, ..., 0.234]
└────────────────────────────────┘
1536 чисел
📊 Популярные модели (2026)
| Модель | Размер | Цена | Качество |
|---|---|---|---|
| OpenAI text-embedding-3-small | 1536 | $0.02/1M | ⭐⭐⭐⭐ |
| OpenAI text-embedding-3-large | 3072 | $0.13/1M | ⭐⭐⭐⭐⭐ |
| Cohere embed-v3 | 1024 | $0.10/1M | ⭐⭐⭐⭐ |
| Sentence-BERT (open) | 384-768 | Free | ⭐⭐⭐ |
💡 Семантическая близость
Запрос: "Как приготовить борщ?"
Embedding: [0.1, 0.5, 0.9, ...]
Документы:
──────────
Doc 1: "Рецепт украинского супа"
[0.12, 0.48, 0.88, ...] ← БЛИЗКО! (0.95)
Doc 2: "Инструкция по PHP"
[-0.8, 0.2, -0.5, ...] ← ДАЛЕКО (0.12)
Doc 3: "Приготовление свекольного блюда"
[0.09, 0.52, 0.91, ...] ← БЛИЗКО! (0.93)
Найдёт: Doc 1 и Doc 3
"борщ" ≈ "украинский суп" ≈ "свекольное блюдо"
7. Векторные базы данных
🗄️ Обычная БД vs Векторная
ОБЫЧНАЯ БД (PostgreSQL):
────────────────────────
Поиск: WHERE name = 'iPhone'
Находит: только "iPhone"
НЕ находит: "айфон", "Apple phone"
ВЕКТОРНАЯ БД (Pinecone):
─────────────────────────
Поиск: similarity("смартфон от Apple")
Находит:
• "iPhone 17 Pro" (0.95)
• "Apple smartphone" (0.92)
• "новый айфон" (0.88)
🏗️ Архитектура векторной БД
┌────────────────────────────────┐
│ ВЕКТОРНАЯ БАЗА ДАННЫХ │
├────────────────────────────────┤
│ │
│ INDEX (быстрый поиск) │
│ • HNSW │
│ • IVF │
│ • Product Quantization │
│ ↓ │
│ VECTORS (хранилище) │
│ Doc 1: [0.1, 0.5, ...] │
│ Doc 2: [0.2, 0.3, ...] │
│ ... │
│ ↓ │
│ METADATA (метаданные) │
│ Doc 1: {source: "wiki.pdf", │
│ page: 5} │
│ │
└────────────────────────────────┘
🚀 Популярные векторные БД
1. PostgreSQL + pgvector
• Расширение к обычному Postgres
• Один стек: SQL + векторный поиск
• Удобно, если Postgres уже в проекте
• Подходит для MVP и production
2. Pinecone
• Managed cloud
• Быстрый старт без администрирования
• Сфокусирован на vector search/RAG
3. Qdrant
• Open source (Rust)
• Быстрый и стабильный в production
• Удобный API и фильтрация по метаданным
4. Weaviate
• Open source + Cloud
• Hybrid search (BM25 + vectors)
• Гибкая схема и зрелая экосистема
Рекомендация:
- Прототип (если уже есть Postgres): PostgreSQL + pgvector
- Production (managed): Pinecone
- Production (self-hosted): Qdrant / Weaviate
Итоги Части 1
✅ Что мы узнали
1. ПРОБЛЕМА
• AI не знает ваших данных
• 80% времени = поиск информации
2. РЕШЕНИЕ = RAG
• Retrieval (поиск)
• Augmented (дополнение)
• Generation (генерация)
3. КАК РАБОТАЕТ
• Chunking: разбиение на кусочки
• Embeddings: векторы смысла
• Векторная БД: хранение и поиск
4. ИСТОРИЯ
• 2020: рождение (Facebook AI)
• 2023: взрыв популярности
• 2026: 60%+ production AI
What's inside
7 sections covering problem, definition, history, 3-step workflow, chunking strategies, embeddings, and vector DB options
Change this for your project
- Replace model names like
text-embedding-3-smallwith your chosen embedding model - Replace vector DB examples like
PineconeorQdrantwith your actual database - Replace the sample document
Python_Guide.pdfwith your own document names
Where it goes
Reference documentation for a retrieval pipeline. Keep with the ingestion or retrieval code it describes.
Worth borrowing
- Using the operator-newbie analogy to explain RAG to non-technical stakeholders
- Comparing RAG vs fine-tuning vs prompt stuffing in a decision table
- Visualising embeddings as 2D semantic space with coordinates and distances
Related Documents
SUMMARY
Proposes three on-prem AI architectures, modular, hybrid, and fully local RAG, with hardware specs and vendor lists.
Retrieval & Prompts
Explains how CharMemory's extraction prompt and Vector Storage settings determine memory retrieval quality in SillyTavern.
Advanced RAG Techniques
Surveys advanced RAG architectures, Agentic, Corrective, Self-RAG, Graph RAG, RAPTOR, Multimodal, Temporal, with design trade-offs and decision guidance.
RFC-BLite: High-Performance Embedded Document Database for .NET
Specifies an embedded document database for.NET with zero-allocation I/O, C-BSON format, and ACID transactions.