Привет, меня зовут Кирилл Колодяжный, я разработчик систем хранения данных в YADRO, ML-энтузиаст, автор книги «Hands-on Machine Learning with C++».
Хочу поделиться впечатлениями от книги Дэниса Ротмана «RAG и генеративный ИИ», которая представляет собой хорошее введение в эту быстроразвивающуюся область. Книга легко читается и последовательно знакомит с ключевыми компонентами построения RAG-систем (Retrieval-Augmented Generation). Автор на практических примерах показывает работу с векторными базами данных, инструментами для создания эмбеддингов и тонкостями построения промптов для языковых моделей.
Особенно мне понравилось описание процесса построения конвейеров обработки данных: от начального исследования датасетов до реализации различных стратегий построения RAG. Я отметил, что автор рассматривает не только текстовые, но и мультимодальные сценарии, включая методы работы с изображениями и видео. Очень ценно, что автор в каждой главе подробно описывает процесс настройки рабочего окружения, снижает порог входа для новичков. Далее хочу отменить остальные интересные с моей точки зрения моменты.
В начале книги автор удачно подбирает пример, который наглядно демонстрирует ключевую проблему наивного использования больших языковых моделей — их склонность к галлюцинациям и ограниченность знаниями на момент обучения. Это создает наглядный пример для внедрения RAG как решения. Сами примеры кода, несмотря на некоторую неполноту, описаны последовательно и понятно, а сравнение результатов разных подходов помогает уловить их практическую разницу.
Книга содержит вводную часть по эмбеддингам, что закладывает фундамент для понимания общих подходов к векторному поиску. Также читатель знакомится с полезным инструментом sentence-transformers для получения векторных представлений текста, а логичное разделение задач по построению конвейера помогает понять этапы промышленной разработки таких систем. Знакомство с инструментом LlamaIndex для индексации расширяет технический арсенал читателя.
Полезным было узнать про концепцию организации обратной связи от пользователей и привлечения экспертов для улучшения системы, что является важным аспектом в жизненном цикле ML-продукта.
Ещё мне понравилась демонстрация работы с «сырыми» и зашумленными данными — типичная, а не идеализированная задача на практике Автор достаточно много уделяет внимания этапам исследования, описания и визуализации датасетов перед использованием, что является залогом успешного проекта. Описание использования кластеризации для работы с данными клиентов — это ценный практический кейс, а обсуждение проблем масштабирования и их прямой связи с затратами в облачных сервисах — актуальная и важная для инженера информация.
В одной из глав понравился познавательный экскурс по работе с API Википедии и построению графового представления знаний, который открывает для читателя еще один мощный инструмент для структурирования информации. Приведение формул для статистических метрик ответов добавляет материалу глубины.
Восьмая глава заслуживает «плюса» за примеры локального запуска — а это приятное исключение на фоне общей ориентации на облака.
Особого внимания заслуживает интересная и перспективная идея о переносе статических данных непосредственно в параметры модели через тонкую настройку (fine-tuning), а также практические рекомендации по формированию датасета для такой задачи.
В последней главе, несмотря на спорность выбранного кейса, присутствует интересная идея по созданию описаний отдельных кадров видео с помощью LLM и использованию их эмбеддингов для семантического поиска по видеоконтенту.
В совокупности эти положительные моменты формируют прочный фундамент для первоначального знакомства с архитектурой RAG-систем и основными принципами их построения.
Вместе с тем, при всей практической ценности материала, следует учитывать определенные ограничения. Значительная часть примеров оринетируется на зарубежные облачные сервисы и API, которые сегодня недоступны для российских разработчиков. В наших реалиях применить такие решения будет практически невозможно.
Также примеры кода представлены преимущественно в Jupyter Notebooks, что больше подходит для исследовательских задач, нежели для промышленной разработки. Некоторые технические детали остаются за кадром: например, недостаточно глубоко раскрыты алгоритмы векторного поиска, принципы работы трансформеров и метрики оценки качества моделей.
Еще вызывает некоторую озабоченность то, что вопросы информационной безопасности при работе с облачными сервисами остаются практически нераскрытыми. Книга не затрагивает критически важные аспекты защиты корпоративных данных при их передаче сторонним провайдерам и сервисам, не рассматривает юридические последствия размещения конфиденциальной информации на зарубежных серверах. Кроме того, Ротман обделяет вниманием стратегии использования локальных языковых моделей, которые позволяют не только обеспечить необходимый уровень безопасности данных, но и существенно снизить операционные затраты в долгосрочной перспективе.
Несмотря на отмеченные особенности, книга успешно выполняет свою главную задачу — формирует целостное представление об архитектуре RAG-систем и основных подходах к их реализации. Она будет особенно полезна тем, кто только начинает погружаться в тему и хочет понять общую экосистему инструментов и типовых сценариев использования. Для практического применения в российских условиях описанные подходы потребуют значительной адаптации и поиска альтернативных технологических решений, но в качестве концептуального фундамента это вполне состоятельная работа.