Retrieval-Augmented Generation (RAG) - это следующий практический шаг после семантического поиска и индексации. В этом курсе вы создадите полноценный локальный RAG-конвейер, который обрабатывает PDF-файлы, разбивает тексты на фрагменты, сохраняет векторы в Elasticsearch, извлекает релевантный контекст и генерирует обоснованные ответы с помощью модели Mistral, запущенной локально через Ollama.
Мы пройдём путь от начала до конца на конкретном сценарии: поиск по резюме студентов, чтобы отвечать на вопросы вроде «Кто работал в Ирландии?» или «У кого есть опыт с Apache Spark?». Вы настроите контейнеризированную инфраструктуру на Docker Compose (FastAPI, Elasticsearch, Kibana, Streamlit, Ollama) и свяжете всё это с LlamaIndex, чтобы сосредоточиться на логике, а не на шаблонном коде. По ходу изучения вы узнаете, где RAG действительно эффективен, а где возникают сложности - например, с точностью, полнотой и "галлюцинациями" модели - и как проектировать решения для продакшена.
К концу курса у вас будет полноценное приложение, которое можно развернуть локально:
загрузка PDF - извлечение текста - преобразование в JSON - разбиение и векторизация - индексирование в Elasticsearch - интерактивный поиск через Streamlit - генерация ответов с помощью Mistral.
Что вы изучите
От поиска к RAG
Вы расширите знания о семантическом поиске и научитесь применять его для RAG: начнете с получения релевантных частей, затем будете генерировать на их основе обоснованные ответы. Узнаете, как LlamaIndex интегрирует ваши данные с LLM, и почему важны размер и перекрытие «чанков» для точности.
Создание конвейера
С помощью FastAPI вы реализуете загрузку и обработку PDF: извлечение текста, формирование JSON, разбиение, создание эмбеддингов и индексирование в Elasticsearch, с минимальным количеством шаблонного кода благодаря LlamaIndex.
Работа с Elasticsearch
Создадите индекс для резюме с векторов и метаданных. Научитесь отличать векторный поиск от поиска по ключевым словам, разберетесь, как хранятся векторные поля и как исследовать документы и результаты через Kibana.
Интерфейс на Streamlit
Создадите простой чат-интерфейс на Streamlit для взаимодействия на естественном языке. Включите режим отладки, чтобы видеть, какие фрагменты были использованы для ответа, и примените метаданные (например, фильтрацию по имени) для повышения точности.
Обработка и формирование JSON
Извлечете текст из PDF с помощью PyMuPDF, затем создадите аккуратный JSON через Ollama (Mistral), сохраняя структуру и символы. Освоите обработку ошибок форматирования и методы надежного промптирования.
Улучшение качества ответов
Изучите практические приемы для повышения точности:
- настройка размеров и перекрытий чанков, топ-K выборка;
- добавление метаданных (роль, навыки, местоположение) для гибридных фильтров;
- эксперименты с моделями эмбеддингов и промптами;
- использование структурированных ответов (например, JSON-списки).
Docker-среда
Соберете весь стек в Docker Compose: FastAPI, Elasticsearch, Kibana, Streamlit и Ollama (Mistral), чтобы развернуть систему локально с предсказуемой конфигурацией.
Бонус: Паттерны для продакшена
Вы узнаете, как масштабировать прототип до производственного уровня:
- сохранять загрузки в data lake (например, S3) и обрабатывать их через очереди (Kafka/SQS);
- автоматически масштабировать воркеры для чанкинга и эмбеддингов;
- переключать LLM-бэкенды (например, Bedrock или OpenAI) через единый API;
- сохранять историю чатов в MongoDB/Postgres и заменить Streamlit на интерфейс React/Next.js.