Back to .md Directory

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.

May 2, 2026
0 downloads
4 views
ai rag eval claude gemini
View source

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: Основы и принципы работы

📋 Содержание

  1. Проблема: AI слепой к вашим данным
  2. Что такое RAG
  3. История RAG
  4. Как работает RAG: 3 шага
  5. Chunking: разбиение на кусочки
  6. Embeddings: векторы смысла
  7. Векторные базы данных

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-small1536$0.02/1M⭐⭐⭐⭐
OpenAI text-embedding-3-large3072$0.13/1M⭐⭐⭐⭐⭐
Cohere embed-v31024$0.10/1M⭐⭐⭐⭐
Sentence-BERT (open)384-768Free⭐⭐⭐

💡 Семантическая близость

Запрос: "Как приготовить борщ?"
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-small with your chosen embedding model
  • Replace vector DB examples like Pinecone or Qdrant with your actual database
  • Replace the sample document Python_Guide.pdf with 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