Retrieval-Augmented Generation (RAG) чаще всего рассматривается в контексте вопросно-ответных систем и чат-ботов поверх базы знаний. Большинство публикаций и руководств по RAG посвящено схеме «вопрос – ответ с опорой на документы». Однако внутренняя механика RAG – семантический поиск в сочетании с генерацией ответа на основе найденного – хорошо ложится и на другую задачу, которую традиционно решают иными методами: на рекомендации.

Цель настоящей статьи – показать, что RAG представляет собой недоиспользованный, но обоснованный инструмент для рекомендательных систем, и разобрать, на каких именно ограничениях классических рекомендателей он выигрывает и где проходят его границы. В качестве сквозного примера рассматривается рекомендательная система книг по запросу в свободной форме. При этом основным предметом рассмотрения является сам подход, а не конкретная реализация.

Ограничения классических рекомендательных систем

Классическая теория рекомендательных систем выделяет три семейства подходов.

  • Коллаборативная фильтрация (collaborative filtering) формирует рекомендации на основе совпадения оценок и действий пользователей. Различают user-based и item-based схемы; последняя, предложенная в Sarwar et al., 2001, устойчивее к разреженности матрицы оценок. Дальнейшим развитием стали матричные факторизации, например SVD++ из Koren et al., 2009, ставший отраслевым стандартом после Netflix Prize.

  • Контентная фильтрация (content-based) опирается на признаки самих объектов: жанр, автор, ключевые слова, текст аннотации. В простейшем виде сходство измеряется через TF-IDF и косинусное расстояние.

  • Гибридные модели, систематизированные в Burke, 2002, комбинируют оба сигнала, частично смягчая холодный старт.

Все три подхода эффективны в своей постановке, однако обладают общими ограничениями, которые становятся критичными, как только пользователь формулирует запрос в свободной форме.

Во-первых, проблема холодного старта: коллаборативная фильтрация неприменима для нового пользователя без истории и для новой книги без оценок. Во-вторых, отсутствие объяснения: коллаборативный подход в принципе не способен обосновать рекомендацию иначе как «похожие пользователи поставили высокую оценку», тогда как для читателя отсутствие понятного обоснования снижает доверие к системе – это показано в литературе по объяснимости рекомендаций (Tintarev & Masthoff, 2015). В-третьих, и это наиболее существенно, классические модели не интерпретируют запрос на естественном языке.

В качестве иллюстрации можно рассмотреть запрос «медленный детектив в старинной английской усадьбе» или «научная фантастика о моральном выборе в духе Урсулы Ле Гуин». Такой запрос содержит одновременно жанровый, стилистический и атмосферный ориентиры, причём ни один из них не зафиксирован в каталоге в готовом виде. Признаки запроса и признаки объекта существуют в разных представлениях, и классическая модель не способна их сопоставить. Эту ситуацию далее будем называть проблемой холодного запроса: затруднение вызвано не отсутствием истории, а тем, что сам запрос выражен свободным текстом.

Свободный запрос

Холодный старт

Объяснение выбора

Коллаборативная

— (нужна история)

Контентная

частично

+ по объектам

слабо

Гибридная

частично

частично

слабо

RAG

+

+

+

Решение состоит в переходе от лексического сопоставления к семантическому, а формирование объяснения возлагается на языковую модель. Именно из этих двух компонентов и состоит RAG.

Архитектура RAG и её соответствие задаче

Термин Retrieval-Augmented Generation введён в Lewis et al., 2020. В оригинальной работе извлечённые документы подавались в seq2seq-модель с маргинализацией по ним; в современной, наиболее распространённой форме найденные документы помещаются в контекст большой языковой модели – этот вариант систематизирован в обзоре Gao et al., 2023. В обоих случаях схема одна: «поиск → формирование контекста → генерация».

  1. Поиск. По векторной базе извлекаются наиболее релевантные документы (в данном случае – карточки книг).

  2. Контекст. Найденное конкатенируется в текстовый ввод для языковой модели.

  3. Генерация. Модель формирует ответ, опираясь на этот контекст, а не только на параметры своих весов.

Ключевое свойство схемы – снижение галлюцинаций: модель отвечает с опорой на найденный материал, а не порождает его из памяти. Для рекомендаций это принципиально, поскольку языковая модель, отвечая напрямую, способна выдумать несуществующую книгу или приписать ей чужой сюжет. RAG привязывает ответ к реальным записям каталога.

Сопоставление свойств RAG с ограничениями классических рекомендательных систем даёт следующую картину:

  • семантический поиск на плотных эмбеддингах интерпретирует свободный запрос, сопоставляя смысл запроса и смысл описания, а не пересечение слов;

  • контентная природа поиска (по описанию книги, а не по истории) снимает холодный старт по объектам: новая книга индексируется сразу;

  • генеративная ступень формирует объяснение, почему книга соответствует запросу;

  • привязка к источнику сдерживает галлюцинации.

Таким образом, RAG закрывает весь перечень ограничений, ради преодоления которых обычно строятся сложные гибридные модели. При этом в литературе RAG применительно к рекомендациям обсуждается заметно реже, чем RAG для вопросно-ответных задач: большинство работ и обзоров (например, обзор Gao et al., 2023) сосредоточено на знание-интенсивных и QA-сценариях. Рекомендация по свободному запросу с объяснением по своей сути является типичной RAG-задачей, обладающей рядом особенностей, которые в литературе проговариваются нечасто.

Отличия рекомендательного RAG от вопросно-ответного

При переносе вопросно-ответного RAG-пайплайна на каталог проявляются три особенности.

Целевой объект не фрагмент текста, а карточка. В вопросно-ответных задачах извлекаются фрагменты документов. В рекомендации единицей поиска выступает связка «название + автор + жанры + описание», которую необходимо векторизовать так, чтобы вектор оставался плотным, но информативным. В рассматриваемой системе в эмбеддинг-модель подаётся структурированная строка вида Title: … Author: … Genres: … Description: …, что позволяет модели использовать название, автора и жанровый ориентир параллельно с описанием, а не только текст аннотации.

Ответ должен содержать обоснование на каждую позицию. Если в вопросно-ответной задаче достаточно одного ответа, то здесь результат представляет собой ранжированный список из 3–5 книг, и к каждой требуется обоснование «почему подходит», привязанное к запросу. Это предъявляет требования к промпту и формату генерации, а не только к ступени поиска.

Многоязычность запроса и контента. Типичный сценарий: запрос на русском языке при англоязычном каталоге (например, открытый набор Goodreads). Прямое сопоставление работает, но с потерей точности, поскольку распределения векторов разных языков смещены относительно друг друга. Эта особенность, как правило, отсутствует в англоязычных вопросно-ответных сценариях.

Практическая реализация

Архитектура RAG-рекомендателя двухфазна, что характерно для RAG-приложений в целом. Офлайн-фаза однократно строит индекс; онлайн-фаза обслуживает запросы.

Двухфазная архитектура RAG-рекомендателя
Двухфазная архитектура RAG-рекомендателя

На офлайн-фазе каталог загружается, очищается, каждая книга кодируется эмбеддинг-моделью и записывается в векторный индекс. На онлайн-фазе запрос векторизуется той же моделью, индекс возвращает k ближайших соседей по косинусному сходству, после чего языковая модель формирует ответ с объяснением.

Выбор компонентов рассматривается ниже как иллюстрация типовых инженерных развилок, а не как обоснование единственно верного стека.

В качестве модели эмбеддингов выбрана multilingual-e5-base (Wang et al., 2022). Семейство E5 обучено на задаче поиска: пары (query, passage) подаются с разными префиксами, что формирует асимметричные представления для запросов и документов – подход, восходящий к Dense Passage Retrieval (Karpukhin et al., 2020). Размерность 768 представляет собой компромисс между качеством и объёмом памяти, а мультиязычность закрывает русско-английский сценарий.

В качестве индекса использован точный перебор (FAISS IndexFlatIP): на корпусе порядка 16 тысяч книг точный поиск укладывается в десятки миллисекунд, а приближённые индексы (IVF, HNSW) с их настройкой гиперпараметров здесь избыточны. Это существенный инженерный момент: приближённый поиск необходим на сотнях тысяч и миллионах записей, тогда как на корпусе академического масштаба он лишь усложняет систему без выигрыша.

Языковая модель запускается локально (gemma3:4b через Ollama), что снимает зависимость от облака и вопросы конфиденциальности – это часто критично для библиотечных и образовательных сценариев. Взаимодействие с моделью реализовано через OpenAI-совместимый интерфейс, поэтому замена локальной модели на облачную сводится к смене трёх переменных окружения, что обеспечивает технологическую нейтральность к провайдеру.

Пример выдачи

Качество retrieval-ступени удобно показать на конкретных запросах. На запрос «медленный детектив в старинной английской усадьбе» (после перевода – «slow-paced detective novel set in an old English mansion») в верхние позиции попадают классические британские детективы: романы Агаты Кристи, Дороти Сэйерс, Сирила Хэйра. На запрос «научная фантастика о моральном выборе» система возвращает «Левую руку Тьмы» Урсулы Ле Гуин, произведения Лоис Макмастер Буджолд и «Стальные пещеры» Айзека Азимова. На англоязычный запрос «a coming-of-age story about loss and resilience» – «A Tree Grows in Brooklyn», «The Perks of Being a Wallflower», «The Outsiders». Отбор согласуется с интуитивным ожиданием, что подтверждает: мультиязычная модель E5 формирует представления, согласующиеся с человеческим восприятием сходства книг.

Поток онлайн-запроса и устойчивость

Поток обработки запроса с откатом при сбое LLM
Поток обработки запроса с откатом при сбое LLM

Отдельного внимания заслуживает graceful degradation – постепенное снижение функциональности без полного отказа. Языковая модель является наиболее медленным и наименее надёжным компонентом. При сбое генерации (модель недоступна, истёк таймаут) система не возвращает ошибку, а отдаёт найденный список книг без обоснования – с названиями, авторами, жанрами и рейтингом, то есть с полной информацией для самостоятельного выбора. Поиск работает всегда, объяснение – по возможности. Для производственного использования это свойство существенно.

Источники качества в рекомендательном RAG

Наибольшее влияние на итоговое качество оказывает retrieval-ступень: именно от неё зависит, попадут ли в контекст языковой модели корректные книги, и никакая генерация не компенсирует ошибочный поиск. Ниже рассмотрены три рычага, существенно влияющих на качество.

Переписывание запроса: translate и HyDE

Короткий запрос на русском языке и развёрнутое английское описание книги плохо стыкуются в векторном пространстве. Выравнивание выполняется одним из двух способов:

  • translate – буквальный перевод запроса на язык корпуса средствами языковой модели. Простой, быстрый и предсказуемый способ.

  • HyDE (Hypothetical Document Embeddings, Gao et al., 2023) – вместо короткого запроса в индекс подаётся гипотетическое описание книги, сгенерированное языковой моделью по запросу. Эмбеддинг такого псевдоописания ближе к распределению реальных аннотаций, чем эмбеддинг короткой фразы.

Небольшое сравнение на десяти контрольных запросах выявило следующую закономерность. На бытовых запросах (жанровый ориентир и лаконичное описание настроения) разница между режимами невелика. На развёрнутых запросах с несколькими признаками одновременно (жанр, автор, тематика, эпоха) HyDE начинает превосходить translate: гипотетическое описание содержит вспомогательные ключевые слова, повышающие вероятность совпадения с реальным описанием. Платой выступают дополнительный вызов языковой модели и меньшая предсказуемость, поэтому по умолчанию используется режим translate как разумный компромисс. Средняя длина переписанного запроса составляет 8–14 слов для translate и 60–90 слов для HyDE.

Плотный поиск, гибридный поиск и реранкинг

Плотные эмбеддинги хорошо улавливают смысл, но проигрывают на редких именах собственных и узкой терминологии – там, где важно точное совпадение токенов. Классическим решением является гибридный поиск: объединение плотного поиска с лексическим BM25 (Robertson & Zaragoza, 2009) с последующим повторным ранжированием верхних результатов более тяжёлой cross-encoder-моделью, кодирующей пару «запрос – документ» совместно (Nogueira & Cho, 2019).

Плотный поиск против гибридного с реранкингом
Плотный поиск против гибридного с реранкингом

Это та же логика, что и в вопросно-ответном RAG, однако для каталога она особенно уместна: названия книг и имена авторов представляют собой именно тот случай, когда лексическое совпадение незаменимо, а смысловая близость сама по себе недостаточна. В рассматриваемой системе оба механизма – лексический поиск BM25 и cross-encoder-реранкинг – реализованы отдельными модулями и подключаются опционально.

Количественные результаты

Качество извлечения измерено на наборе из 64 эталонных запросов трёх типов: семантические (описание сюжета), точные (по автору или названию) и русскоязычные. Релевантность определялась по совпадению названия или автора найденной книги с ожидаемым – то есть оценивался именно поиск, без участия языковой модели. Сравнивались две конфигурации: плотный поиск (только E5 + FAISS) и полный конвейер ранжирования (плотный поиск + лексический BM25 со слиянием рангов + cross-encoder-реранкинг).

Качество извлечения: плотный поиск против полного конвейера
Качество извлечения: плотный поиск против полного конвейера

Конфигурация

Hit@1

Hit@5

MRR

nDCG@10

Плотный поиск

0,52

0,69

0,589

0,624

Полный конвейер ранжирования

0,58

0,86

0,689

0,735

Добавление лексического поиска и реранкинга поднимает nDCG@10 с 0,624 до 0,735 (+0,111) и Hit@5 с 0,69 до 0,86: релевантная книга заметно чаще попадает в первую пятёрку и располагается выше в выдаче. Это согласуется с известными по литературе оценками – cross-encoder-реранкинг обычно добавляет порядка +4…7 пунктов nDCG@10 (Nogueira & Cho, 2019), а гибридизация с BM25 особенно помогает на точных запросах по автору и названию (Robertson & Zaragoza, 2009). Для систематической оценки уже генеративной ступени применим протокол вроде RAGAS.

Помимо качества извлечения, в прототипе измерялись временные характеристики (процессор Intel Core i5 12-го поколения, локальная модель gemma3:4b на CPU):

Время операций в прототипе
Время операций в прототипе

Сборка индекса для 15 851 книги занимает около 17 минут (разовая офлайн-операция), повторная загрузка готового индекса – порядка секунды. Ответ на запрос через API формируется за 2–4 секунды с использованием языковой модели и за 0,5–1 секунду в режиме без неё. Таким образом, вычислительно затратной является только генерация, тогда как сам семантический поиск практически бесплатен. Из этого следует, что узкое место рекомендательного RAG приходится на ступень языковой модели, и оптимизировать в первую очередь следует именно её.

Подготовка данных

Отдельного внимания заслуживает этап, который в руководствах по RAG обычно опускается, – подготовка данных. В открытом наборе Goodreads описания книг содержали дублирующийся префикс (обрезанная копия описания перед полным текстом – в 84% непустых записей), а поле жанров всегда начиналось с 58 шаблонных рубрик, и лишь затем следовали реальные жанры. Без очистки этот шум попадает в индекс и напрямую ухудшает качество поиска. После предобработки (удаление дубля, отбрасывание шаблонных рубрик, фильтрация слишком коротких описаний) из 20 068 исходных записей осталось 15 851 – отброшено около 21%. В рекомендательном RAG качество векторизации карточки определяет результат не меньше, чем выбор модели.

Границы применимости

RAG не является заменой коллаборативной фильтрации в тех сценариях, где последняя сильна. Границы применимости подхода целесообразно очертить явно.

  • При наличии богатой истории взаимодействий и задаче предсказания следующего действия (например, формирование главной страницы) классическая коллаборативная фильтрация и матричные факторизации дают лучший результат при меньших затратах. Сильная сторона RAG проявляется именно в сценарии «свободный запрос с объяснением».

  • Генерация требует ресурсов. Ступень языковой модели – это секунды и/или оплата по числу токенов на каждый запрос, что существенно для высоконагруженных лент.

  • Масштаб корпуса меняет инженерные решения: точный индекс пригоден на десятках тысяч записей, тогда как на миллионах необходим приближённый поиск (IVF, HNSW) и пересмотр всей экономики системы.

  • RAG не обеспечивает персонализацию по истории сам по себе – для этого его необходимо комбинировать с коллаборативным сигналом.

Наиболее сильным представляется гибридный сценарий: коллаборативный сигнал отвечает за то, что обычно нравится данной категории пользователей, а RAG – за то, что соответствует конкретному запросу и сопровождается объяснением.

Заключение

RAG прочно ассоциируется с вопросно-ответными системами, однако его внутренняя механика – семантический поиск в сочетании с генерацией на основе источника – адресно устраняет слабые места классических рекомендательных систем: неспособность интерпретировать свободный запрос, холодный старт по объектам и отсутствие объяснимости. При этом рекомендательный RAG не сводится к вопросно-ответному: он обладает собственной спецификой в представлении объекта-карточки, в требовании обоснования на каждую позицию и в многоязычности.

На примере рекомендательной системы книг видно, что подход обеспечивает работоспособное и объяснимое решение, а основные рычаги качества – переписывание запроса, гибридный поиск и реранкинг – переносятся из вопросно-ответного RAG напрямую. Данное направление пока недоиспользовано и потому представляет интерес для дальнейшей проработки.