Что такое RAG и зачем он нужен
RAG (Retrieval-Augmented Generation, генерация с дополнением поиском) — способ дать LLM знания, которых нет в её весах: найти релевантные куски документов и подложить их в промпт. Это самый распространённый паттерн промышленных LLM-систем и обязательная тема любого собеседования AI-инженера.
Интуиция
У «голой» LLM три хронические проблемы. Во-первых, знания заморожены на дате обучения (knowledge cutoff) — про вчерашний релиз она не знает. Во-вторых, она не видела ваших приватных данных: внутренних регламентов, базы клиентов, документации продукта. В-третьих, на вопросы вне своих знаний она отвечает правдоподобной выдумкой — галлюцинирует (hallucination), причём уверенным тоном.
RAG решает всё это одной идеей: не заставляй модель помнить — дай ей прочитать. Перед генерацией система находит в базе знаний куски, релевантные вопросу, и вставляет их в промпт: «вот выдержки из документов, отвечай по ним». Это экзамен со шпаргалкой, которую тебе подбирают под конкретный билет.
Как это работает
Пайплайн состоит из двух фаз:
- Индексация (офлайн, заранее): документы → нарезка на фрагменты (чанки) → каждый чанк превращается в вектор-эмбеддинг → векторы складываются в векторную БД (vector database).
- Запрос (онлайн): вопрос пользователя → его эмбеддинг → поиск топ-k ближайших чанков → сборка промпта: [инструкция] + [найденные фрагменты] + [вопрос] → генерация ответа с опорой на контекст (grounded generation).
Близость векторов меряют косинусной близостью: похожие по смыслу тексты лежат рядом в пространстве эмбеддингов, поэтому «сколько дней отпуска» находит документ про отпуска, даже если в нём нет слова «сколько».
Важный бонус — цитирование источников: раз ответ построен по конкретным фрагментам, можно показать ссылки. Это снижает галлюцинации (модель опирается на текст перед глазами) и делает их проверяемыми (пользователь может открыть источник).
Параметр top-k — компромисс: мало фрагментов — рискуем не захватить нужный, много — тащим в промпт шум, платим за лишние токены и разбавляем внимание модели. Типичные значения — от 3 до 10, но правильный ответ всегда эмпирический: k подбирают по метрикам качества поиска на своих данных, а не берут из чужого туториала.
RAG против альтернатив
RAG vs fine-tuning — типичный вопрос собеседования. Дообучение (fine-tuning) хорошо передаёт навык и стиль: формат ответов, тон, доменный жаргон. Но как хранилище фактов оно неудобно: знания «вшиваются» в веса, обновление = новое обучение, конкретный факт нельзя ни процитировать, ни гарантированно извлечь. RAG хранит знания снаружи: обновляются переиндексацией за минуты, ответы цитируемы. Правильный ответ на собеседовании: это не конкуренты — RAG для фактов, fine-tuning для поведения, часто вместе.
RAG vs длинный контекст. «Окна выросли до миллионов токенов — зачем RAG?» Затем, что корпус в миллионы документов не влезет ни в какое окно; платить за сотни тысяч токенов контекста на каждый запрос дорого и медленно; а качество внимания на огромном контексте деградирует. Поиск дешевле: подаём модели только релевантное. Длинный контекст скорее дополняет RAG — можно позволить себе больше найденных фрагментов.
Когда RAG не нужен: вопросы на общее рассуждение и креатив («напиши стихотворение», «объясни рекурсию»), задачи, где все данные уже в запросе (суммаризация присланного текста), и стабильные общеизвестные знания, которые модель и так знает надёжно.
- «RAG или fine-tuning?» — знания vs навык: свежие/приватные факты — RAG; стиль, формат, доменное поведение — fine-tuning; часто комбинация.
- «Нарисуйте пайплайн RAG» — две фазы: индексация (документы → чанки → эмбеддинги → векторная БД) и запрос (эмбеддинг вопроса → топ-k → промпт → генерация).
- «Зачем RAG при окне в миллион токенов?» — масштаб корпуса, цена и латентность запроса, деградация внимания; поиск отбирает только нужное.
- «Как RAG влияет на галлюцинации?» — снижает и делает проверяемыми через цитаты, но не устраняет: мусор на входе — фантазия на выходе.