Учебник RAG и векторные базы данных для начинающих
Курс о том, как дать большой языковой модели доступ к вашим данным через Retrieval-Augmented Generation. От проблем LLM и эмбеддингов до векторных баз, чанкинга, извлечения с цитированием и продакшн-практик. Ядро RAG — косинусную близость, векторный поиск и чанкинг — вы напишете руками на чистом Python.
Курс «RAG и векторные базы данных» состоит из 6 разделов и 25 уроков: Зачем нужен RAG, Эмбеддинги и близость, Векторные базы данных, Подготовка данных (индексация), Извлечение и генерация и Качество, проблемы и продакшн. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Зачем нужен RAG
- Проблема LLM: знания, галлюцинации и контекст
Почему большие языковые модели не знают ваших данных: устаревшие знания, галлюцинации, лимит контекста и закрытые приватные данные.
- Идея RAG: найти, подставить, ответить
Суть Retrieval-Augmented Generation: найти релевантные фрагменты в своей базе, вставить их в промпт и заставить LLM отвечать с опорой на контекст.
- RAG против дообучения: когда что выбирать
Чем RAG отличается от fine-tuning, какие задачи решает каждый подход и почему их часто комбинируют.
- Архитектура RAG-пайплайна: обзор
Две фазы RAG — индексация (offline) и извлечение с генерацией (online): из каких компонентов состоит пайплайн и как они связаны.
- Проблема LLM: знания, галлюцинации и контекст
2 Эмбеддинги и близость
- Что такое эмбеддинг: текст как вектор смысла
Эмбеддинг превращает текст в вектор чисел, где близость в пространстве отражает близость по смыслу. Разбираем интуицию на координатах.
- Косинусная близость: считаем похожесть руками
Косинус угла между векторами — главная метрика похожести в RAG. Считаем её на чистом Python и видим, как ранжируются тексты по смыслу.
- Модели эмбеддингов и размерность
Обзор моделей эмбеддингов (OpenAI, sentence-transformers и др.), что такое размерность вектора и как выбрать модель под RAG.
- Почему близкие по смыслу тексты близки в пространстве
Дистрибутивная семантика: как обучение на контекстах заставляет синонимы и связанные понятия оказываться рядом в векторном пространстве.
- Что такое эмбеддинг: текст как вектор смысла
3 Векторные базы данных
- Зачем нужна векторная база данных
Полный перебор по миллионам векторов слишком медленный. Векторная БД хранит эмбеддинги и быстро находит ближайших соседей по смыслу.
- Приближённый поиск соседей (ANN): идея HNSW и IVF
Approximate Nearest Neighbors жертвует крошечной точностью ради огромной скорости. Разбираем интуицию графов HNSW и кластеров IVF.
- Метрики близости: косинус, L2 и скалярное произведение
Три способа измерять близость векторов в векторных БД: косинус, евклидово расстояние L2 и dot product. Когда какую выбирать.
- Наивный векторный поиск своими руками
Собираем мини-«векторную базу» на чистом Python: полный перебор по косинусной близости и выдача top-k ближайших чанков.
- Обзор решений: Pinecone, Chroma, FAISS, pgvector, Qdrant
Сравнение популярных векторных хранилищ: библиотека FAISS, локальная Chroma, расширение pgvector, облачный Pinecone и Qdrant.
- Зачем нужна векторная база данных
4 Подготовка данных (индексация)
- Загрузка и парсинг документов
Первый шаг индексации: собрать документы из разных форматов (PDF, HTML, Markdown) и вытащить из них чистый текст для дальнейшего чанкинга.
- Чанкинг: режем текст на фрагменты с перекрытием
Стратегии разбиения текста на чанки: фиксированный размер, по предложениям и абзацам, перекрытие (overlap). Запускаемый пример чанкинга руками.
- Метаданные: контекст вокруг чанка
Зачем к каждому чанку прикреплять метаданные (источник, дата, раздел) и как они включают фильтрацию выдачи и цитирование источников.
- Построение индекса: качество чанков решает всё
Финал индексации: эмбеддим чанки и кладём в векторный индекс. Почему именно качество чанкинга, а не модель, чаще всего определяет качество ответов.
- Загрузка и парсинг документов
5 Извлечение и генерация
- Запрос → эмбеддинг → top-k: мини-retrieval
Рантайм-фаза RAG: превращаем вопрос в вектор, ищем k ближайших чанков. Полностью запускаемый мини-retriever на чистом Python.
- Сборка промпта: как вставить контекст
Augment-шаг RAG: как из найденных чанков и вопроса собрать промпт, который заставит LLM отвечать по контексту, а не из памяти.
- Генерация ответа и цитирование источников
Generate-шаг: LLM пишет ответ строго по контексту и ссылается на источники. Как устроено цитирование и почему оно повышает доверие.
- Гибридный поиск и реранкинг
Как улучшить извлечение: гибрид векторного поиска и ключевых слов (BM25) плюс реранкинг — переупорядочивание кандидатов более точной моделью.
- Запрос → эмбеддинг → top-k: мини-retrieval
6 Качество, проблемы и продакшн
- Оценка RAG: извлечение и верность ответа
Как измерять качество RAG: метрики извлечения (recall@k, precision) и генерации (верность контексту, отсутствие галлюцинаций).
- Типичные проблемы и потеря в середине
Частые провалы RAG: плохой чанкинг, нерелевантный контекст и эффект «потери в середине» (lost in the middle) в длинном контексте.
- Продвинутый RAG: query rewriting, multi-query, HyDE
Приёмы улучшения извлечения через работу с запросом: переписывание запроса, мульти-запрос и HyDE (гипотетический документ).
- Продакшн: агентный RAG, стоимость, инструменты и чек-лист
Финал курса: агентный RAG, управление стоимостью и латентностью, обзор LangChain/LlamaIndex и практический чек-лист запуска RAG в прод.
- Оценка RAG: извлечение и верность ответа