Большинство материалов по RAG страдают одной и той же проблемой: они объясняют как пользоваться библиотекой, но почти не объясняют почему именно так устроена система. В результате человек умеет написать десять строк на LangChain, но не понимает, почему поиск стал хуже после изменения размера чанка или почему другой embedding резко ухудшил качество ответов.
Инженерия RAG
- Полное руководство по Retrieval-Augmented Generation
- Зачем была написана эта книга
- Для кого предназначена эта книга
- Как пользоваться этой книгой
- Что означает слово «инженерия»
- 1.1. Почему появилась технология RAG
- Иллюзия всезнания
- Большая языковая модель не является поисковой системой
- Откуда вообще берутся знания модели?
- Почему знания модели неизбежно устаревают
Полное руководство по Retrieval-Augmented Generation
Авторская редакция
Предисловие
Зачем была написана эта книга
За последние несколько лет большие языковые модели (Large Language Models, LLM) изменили представление о том, каким может быть программное обеспечение. Системы, которые еще недавно казались экспериментальными, сегодня помогают писать код, анализировать документы, искать информацию, отвечать на вопросы пользователей и автоматизировать сложные бизнес-процессы. Однако очень быстро выяснилось, что даже самые современные модели имеют фундаментальное ограничение.
Они не знают того, чего не было в их обучающих данных.
Если документ был создан после завершения обучения модели, она ничего о нем не знает. Если информация хранится во внутренней корпоративной базе знаний, модель не имеет к ней доступа. Если пользователю необходимо получить ответ на основании нескольких PDF-файлов, исходного кода проекта или локальной документации, сама по себе LLM решить эту задачу не способна. Именно для преодоления этого ограничения появилась архитектура Retrieval-Augmented Generation (RAG) — генерация ответов с использованием найденного контекста. Несмотря на широкое распространение RAG, большинство существующих материалов ограничиваются демонстрацией нескольких строк кода с использованием популярных библиотек. Читателю показывают, как вызвать API, но почти не объясняют, почему система устроена именно так, какие алгоритмы скрываются за готовыми функциями и как принимать архитектурные решения при разработке собственных решений.
Эта книга преследует другую цель.
Мы не будем рассматривать RAG как набор готовых библиотек. Вместо этого мы будем изучать его как инженерную систему, состоящую из множества взаимосвязанных компонентов: представления текста, эмбеддингов, методов поиска, структур данных, алгоритмов ранжирования, механизмов формирования контекста и взаимодействия с языковой моделью. Каждый компонент будет изучен отдельно, после чего мы объединим их в единую архитектуру. К концу книги читатель сможет не только использовать существующие решения, но и понимать, как они работают, чем отличаются друг от друга и в каких случаях следует выбирать тот или иной подход.
Для кого предназначена эта книга
Книга ориентирована прежде всего на разработчиков программного обеспечения, архитекторов систем искусственного интеллекта и инженеров машинного обучения, которые хотят глубоко разобраться в принципах построения Retrieval-Augmented Generation. Предполагается, что читатель знаком с основами программирования. Большинство практических примеров будет реализовано на языке Python, однако основное внимание уделяется алгоритмам и архитектуре, а не особенностям конкретного языка или библиотеки. Материал будет полезен и тем, кто уже использует LangChain, LlamaIndex, Haystack или аналогичные инструменты. Понимание внутренних механизмов позволит осознанно выбирать технологии, оптимизировать производительность и диагностировать проблемы, которые невозможно решить простым изменением параметров библиотеки.
Как пользоваться этой книгой
Книга построена по принципу постепенного усложнения материала.
Каждая глава опирается на предыдущие. Если какой-либо термин еще не был подробно рассмотрен, это будет явно указано, а его полное объяснение появится в соответствующей главе. Практические примеры сопровождают теорию на протяжении всей книги. Мы не будем создавать множество независимых демонстрационных проектов. Вместо этого шаг за шагом будет разрабатываться одна полноценная RAG-система, которая к концу книги превратится в законченное приложение промышленного уровня.
Что означает слово «инженерия»
В названии книги используется слово инженерия не случайно. Инженер не просто применяет готовые инструменты — он понимает, как они устроены, какие ограничения имеют и какие компромиссы лежат в основе каждого решения. Именно такой подход мы будем использовать на протяжении всей книги.Мы будем задавать вопросы, которые редко встречаются в популярных статьях.
Почему векторный поиск вообще работает?
Почему похожие предложения оказываются рядом в многомерном пространстве?
Почему изменение размера чанка может ухудшить качество поиска?
Почему одна модель эмбеддингов превосходит другую на юридических документах, но уступает на исходном коде?
Почему добавление большего количества документов иногда делает ответы хуже, а не лучше?
Почему современные системы используют не один алгоритм поиска, а несколько одновременно?
Ответы на эти вопросы невозможно получить, изучая только примеры использования библиотек. Они требуют понимания алгоритмов, структур данных и принципов работы современных языковых моделей.
Именно этим мы и займемся.
Часть I. Основы
Глава 1. Что такое RAG (Retrieval-Augmented Generation)
«Чтобы понять, зачем нужна технология, сначала необходимо понять проблему, которую она решает.»
1.1. Почему появилась технология RAG
Когда человек впервые знакомится с современными большими языковыми моделями, у него нередко складывается впечатление, что перед ним находится универсальная система искусственного интеллекта, способная ответить практически на любой вопрос. Достаточно открыть диалог с моделью, написать запрос естественным языком — и через несколько секунд получить развернутый, логичный и хорошо сформулированный ответ.
На первый взгляд кажется, что модель «знает всё». Она объясняет математические формулы, пишет программы, пересказывает книги, анализирует юридические документы, переводит тексты и даже помогает проектировать сложные программные системы.
Однако это впечатление обманчиво.
Несмотря на впечатляющие возможности, любая современная языковая модель имеет принципиальные ограничения. Эти ограничения не являются недостатком конкретной реализации или отдельной модели. Они вытекают непосредственно из самой архитектуры больших языковых моделей и из способа их обучения. Понимание этих ограничений является отправной точкой для понимания всей технологии Retrieval-Augmented Generation.
Иллюзия всезнания
Представим себе ситуацию.
В компании хранится огромный архив технической документации. В нем находятся тысячи PDF-файлов, инструкции, внутренние регламенты, спецификации оборудования и отчеты за последние десять лет. Возникает естественное желание использовать современную языковую модель как интеллектуального помощника.
Например, пользователь задает вопрос:
В каком документе описан порядок обновления серверов хранения данных и какие действия необходимо выполнить перед началом обновления?
Если документы никогда не передавались модели, она не сможет ответить.
Не потому, что она недостаточно «умная».
Не потому, что вопрос слишком сложный.
А потому, что модель никогда не видела этих документов.
Это кажется очевидным, но именно здесь возникает первое фундаментальное заблуждение. Многие считают, что LLM умеет искать информацию.
Это неверно.
Большая языковая модель не является поисковой системой
Поисковая система и языковая модель решают принципиально разные задачи. Представим библиотеку. В библиотеке хранится миллион книг.
Библиотекарь получает вопрос:
Найди книгу, в которой описывается работа двигателя внутреннего сгорания.
Что делает библиотекарь? Он ищет нужную книгу.
обращается к каталогу.
Находит подходящий экземпляр.
Открывает соответствующую страницу.
После этого отвечает.
Теперь представим человека, который однажды прочитал миллион книг и запомнил огромную часть информации.
Если спросить его:
Как работает двигатель внутреннего сгорания?
Он может объяснить это по памяти.
Но если спросить:
На какой странице книги № 481 392 упоминается конкретная модель насоса?
Он, скорее всего, не сможет ответить.
Потому что он не ищет информацию.
Он воспроизводит знания, которые сформировались во время чтения.
Современная LLM работает именно так.
Она не выполняет поиск по базе документов.
Она не открывает файлы.
Она не просматривает Интернет в процессе генерации ответа (если только такая возможность специально не добавлена приложением).
Она не имеет внутреннего каталога документов.
Она отвечает исключительно на основании внутренних параметров модели и того контекста, который ей передал пользователь.
Это различие настолько важно, что его стоит сформулировать как отдельное правило.
Большая языковая модель генерирует ответ на основе статистических закономерностей, извлеченных во время обучения, а не путем поиска информации в исходных документах.
Именно это утверждение лежит в основе всей архитектуры RAG.
Откуда вообще берутся знания модели?
Здесь возникает следующий закономерный вопрос. Если модель не ищет информацию, то откуда она знает столько фактов? Ответ связан с процессом обучения. Во время обучения модели показываются огромные объемы текста.
Это могут быть:
- книги;
- статьи;
- документация;
- научные публикации;
- программный код;
- веб-сайты;
- энциклопедии;
- форумы;
- другие текстовые источники.
Важно понимать, что модель не сохраняет эти документы внутри себя в исходном виде. Нельзя открыть GPT и найти внутри файл с названием Python Tutorial.pdf. Его там нет. Во время обучения происходит совершенно другой процесс. Из миллиардов предложений постепенно формируются статистические зависимости между словами, фразами, понятиями и контекстами.
Именно эти зависимости кодируются в миллиардах параметров нейронной сети. Поэтому правильнее говорить, что модель хранит не документы, а обобщенное представление закономерностей языка и знаний, извлеченных из огромного корпуса текстов. Это похоже не на архив файлов, а на опыт человека. После прочтения сотен книг человек помнит идеи, факты и связи между понятиями, но редко способен дословно воспроизвести целые главы или назвать номер страницы, где встретил ту или иную информацию.
Почему знания модели неизбежно устаревают
Из предыдущего раздела следует важный вывод.
После завершения обучения параметры модели перестают изменяться.
Представим, что обучение завершилось 1 января 2026 года. На следующий день в мире появляются:
- новые научные статьи;
- новые версии программного обеспечения;
- изменения в законодательстве;
- новые продукты;
- новые исследования;
- новые внутренние документы компании.
Модель не знает о них. Не потому, что ей «забыли сообщить», а потому, что её знания зафиксированы в параметрах сети на момент окончания обучения. Чтобы встроить новые знания непосредственно в модель, пришлось бы заново проводить обучение или дорогостоящее дообучение. Для современных LLM это требует колоссальных вычислительных ресурсов, времени и средств. Поэтому обновлять модель при каждом изменении базы знаний практически невозможно.
Именно здесь возникает идея отделить хранилище знаний от механизма рассуждения.
Если знания постоянно меняются, логичнее не переписывать модель, а предоставить ей доступ к актуальным документам непосредственно во время ответа.
Эта идея кажется простой, но именно она стала фундаментом архитектуры Retrieval-Augmented Generation.