RAG: что это и когда он действительно нужен

Техническая опорная страница по RAG внутри LLM-кластера: когда retrieval действительно нужен, где достаточно длинного контекста и куда идти за базами, метриками и прикладными сценариями.

Страница arXiv статьи Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

Проверено 6 мая 2026 года. Это техническая опорная страница по RAG на Toolarium. Её задача не в том, чтобы выбрать одну «лучшую» векторную базу или единственный «правильный» фреймворк, а в более полезной задаче: быстро понять, когда retrieval-augmented generation действительно решает проблему, где хватает длинного контекста или обычного поиска и какие соседние материалы читать дальше.

Если вам нужен маршрут по всему LLM-кластеру, сначала откройте полный гайд по LLM для разработчиков. Если терминология пока плавает, рядом есть базовый разбор что такое LLM и как они работают. Здесь фокус уже инженерный: документы, поисковый слой, доступы, метрики, гибридный поиск и соседние маршруты вроде LangChain vs LlamaIndex или выбора векторной базы данных.

RAG: быстрый ответ

RAG не обучает модель вашим документам. Он находит нужные фрагменты в момент запроса и подаёт их модели как внешний контекст. Поэтому RAG полезен там, где знания меняются, нужны ссылки на источник и нельзя разрешить модели отвечать только «по памяти».

Практическое правило простое: если пользователь должен видеть, откуда взялся ответ, если документы обновляются каждую неделю и если важен контроль доступа, RAG обычно сильнее, чем длинный контекст без индекса или дообучение модели.

Ситуация Нужен ли RAG Почему
База знаний, регламенты, договоры, тикеты, которые часто меняются Да Нужен внешний источник истины, который можно быстро обновлять без переобучения модели.
Небольшой набор документов для разового анализа Не всегда Иногда хватает длинного контекста, если документов мало и права доступа простые.
Нужно изменить стиль ответа, формат JSON или классификацию Скорее нет Это уже зона системных инструкций, постобработки или дообучения, а не retrieval.
Нужен смысловой поиск по внутренним данным, но без генерации ответа Не обязательно Иногда достаточно качественного retrieval-слоя без LLM поверх него.

Где проходит граница этой страницы

Для этой страницы важнее всего не разрастись обратно в общий обзор LLM-стека. RAG — это отдельный интент внутри кластера, а не место, где одновременно выбирают модель, базу и слой оркестрации.

Если вам нужно Это не здесь Куда идти вместо этого
Выбрать модель под бюджет, русский язык и задержку Это уже не retrieval-задача, а выбор LLM-слоя. Как выбрать языковую модель
Сравнить векторные базы и компромиссы хранения Эта страница не должна становиться каталогом Qdrant, Weaviate, Pinecone и pgvector. Векторные базы данных для RAG
Решить, какой SDK или фреймворк брать первым Это отдельный спор про пайплайн, а не про сам retrieval-подход. LangChain vs LlamaIndex

Карта кластера RAG

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

Если вам нужно Куда идти дальше Зачем открывать
Понять, где RAG стоит внутри общего LLM-стека Полный гайд по LLM для разработчиков Это главная опорная страница кластера: она разводит выбор модели, модели с открытым кодом, промпт-инжиниринг, RAG и типовые сбои.
Выбрать хранилище и поисковый слой Векторные базы данных для RAG Отдельный материал про Qdrant, Weaviate, Pinecone, pgvector и Chroma без смешивания с генерацией.
Собрать поиск по эмбеддингам внутри приложения Как встроить ИИ-поиск в приложение с эмбеддингами Практический маршрут для продуктовой команды, которая уже строит свой поисковый контур.
Сравнить фреймворки под RAG LangChain vs LlamaIndex Помогает не превращать эту страницу в спор про SDK и оркестрацию пайплайна.
Держать документы и инференс в своём контуре Ollama: как запустить локальную LLM Полезно, если документы нельзя отдавать во внешний API и нужен более закрытый стек.
Посмотреть внедрение в прикладном сценарии Кейс AI-ассистента для колл-центра Показывает, где retrieval, контроль источников и качество ответа начинают влиять на бизнес-метрику.

Когда RAG нужен, а когда нет

Самая дорогая ошибка здесь не техническая, а архитектурная. Команда слишком рано добавляет RAG, хотя проблема лежит в другом месте: либо нужен обычный поиск, либо надо менять поведение модели, либо данных так мало, что индекс только добавит сложность.

Сначала стоит ответить на четыре вопроса.

  1. Документы часто меняются или нет?
  2. Пользователь должен видеть источник ответа или нет?
  3. Нужен доступ к данным по правам и ролям или нет?
  4. Сколько документов реально участвует в типовом вопросе: три, тридцать или триста тысяч?

После этого выбор обычно выглядит так.

Подход Когда выбирать Где быстро упрётся
RAG Нужны актуальные документы, цитаты, быстрые обновления знаний и контроль доступа. Если retrieval не находит нужный фрагмент, никакой промпт это не исправит.
Длинный контекст Набор документов мал, задача разовая, а отдельный индекс не окупается. Сложнее держать стоимость, задержку и предсказуемое качество на объёмных данных.
Дообучение Нужно стабильно изменить формат ответа, стиль, классификацию или специализированное поведение. Плохо подходит для свежих документов и цитируемых ответов по постоянно меняющейся базе знаний.
Поиск без генерации Пользователю важнее найти документ, чем получить сформулированный ответ. Не решает задачу синтеза ответа по нескольким источникам.

Отдельно стоит помнить о выводе из Lost in the Middle: длинный контекст сам по себе не гарантирует, что модель хорошо использует информацию из середины входа. Именно поэтому идея «просто положим всё в промпт» редко оказывается надёжной заменой поисковому слою.

Как работает RAG-система

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

1. Подготовка документов

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

Хорошая практика проста: сохранять вместе с чанком не только текст, но и метаданные. Заголовок раздела, URL, дата обновления, тип документа, продукт, команда, уровень доступа. Потом именно эти поля спасают выдачу, когда одних эмбеддингов уже мало.

2. Индексация

Каждый фрагмент превращается в embedding и попадает в индекс. Хранилище может быть отдельной векторной базой или обычной базой с векторным расширением. Если вопрос упирается в конкретный выбор движка, не держите это в одной статье с архитектурой RAG: у нас для этого есть отдельный разбор векторных баз данных для RAG.

Если вы работаете в российском или закрытом контуре, добавляется ещё один слой решения: где будут жить документы и где будет выполняться inference. Тогда RAG часто проектируют вместе с локальным стеком, и полезно заранее посмотреть материалы про локальный запуск через Ollama.

3. Retrieval и ранжирование

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

Именно поэтому продакшн-RAG часто использует гибридный retrieval: семантический поиск плюс BM25, полнотекстовый поиск, фильтры по метаданным и иногда отдельный reranking. Если retrieval нашёл нужный документ, но не поднял его в верх выдачи, проблема обычно не в генераторе ответа, а в ранжировании.

4. Сборка контекста и генерация

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

Документация LangChain с разделом Retrieval и вариантами RAG-архитектур
Документация LangChain показывает несколько маршрутов retrieval: от простой двухшаговой схемы до agentic RAG. Источник: LangChain Docs.
Слой За что отвечает Где обычно ломается
Документы Качество исходного текста, структура, версии, права доступа. PDF-хаос, дубли, устаревшие версии, отсутствие метаданных.
Retrieval Поиск релевантных фрагментов по вопросу пользователя. Нужный фрагмент не найден или не попал в верх выдачи.
Generation Сборка ответа по найденному контексту. Модель игнорирует источник, смешивает фрагменты или дорисовывает детали.
Прикладной слой Доступы, журналирование, постобработка, интерфейс и наблюдаемость. Пользователь видит чужой документ или не может проверить, откуда взялся ответ.

Как не перепутать embeddings, базу и фреймворк

В разговорах про RAG часто смешивают три разные вещи: модель эмбеддингов, векторный индекс и фреймворк, который склеивает пайплайн. Из-за этого команда спорит про LangChain, хотя реальная проблема в качестве эмбеддингов, или меняет базу, хотя retrieval ломается на ранжировании.

Слой стека За что отвечает Что важно проверить первым
Модель эмбеддингов Преобразует документы и запросы в векторы, по которым потом ищется похожий контекст. Русский язык, доменную лексику, длину текстов и качество на ваших вопросах, а не на абстрактном лидерборде.
Векторная база или индекс Хранит векторы, метаданные, фильтры и выдачу top-k по запросу. Схему обновления, фильтры по правам доступа, задержку и требования к развёртыванию. Детали выбора вынесены в отдельный разбор векторных баз.
Фреймворк и склейка пайплайна Подключает загрузчики, чанкинг, retriever, промпты, оценку и при необходимости агентные инструменты. Нужен ли вам вообще отдельный слой оркестрации или пока хватает нескольких прозрачных модулей. Сравнение SDK лучше держать в материале LangChain vs LlamaIndex.

Архитектуры RAG: от 2-step до agentic

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

Подход Как работает Где полезен
2-step RAG Сначала retrieval, потом один вызов модели по найденному контексту. FAQ, небольшие базы знаний, ранний прототип.
Hybrid RAG Векторный поиск сочетается с полнотекстовым поиском, BM25 и фильтрами по метаданным. Документы с кодами ошибок, артикулами, юридическими формулировками и смешанным языком.
RAG с reranking Сначала широкий retrieval, потом отдельная переоценка найденных фрагментов. Когда нужный документ находится, но выдача сверху слишком шумная.
Graph RAG Поиск учитывает связи между сущностями, документами и объектами. Расследования, сложные базы знаний, аналитика по связанным сущностям.
Agentic RAG Агент сам решает, когда и каким инструментом искать, читать и уточнять. Многошаговые задачи, где одного retrieval-запроса недостаточно.

Agentic RAG не стоит включать только потому, что слово звучит современно. Как только retrieval становится инструментом внутри агента, растут требования к журналированию, безопасности и лимитам действий. Если эта часть вам важна, держите рядом материал про ИИ-агентов, а спор про SDK выносите в отдельное сравнение LangChain vs LlamaIndex.

Минимальный пример RAG на Python

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

from langchain_community.document_loaders import DirectoryLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings, ChatOpenAI

loader = DirectoryLoader("./docs", glob="**/*.md")
documents = loader.load()

splitter = RecursiveCharacterTextSplitter(
    chunk_size=700,
    chunk_overlap=100,
)
chunks = splitter.split_documents(documents)

embeddings = OpenAIEmbeddings(model="YOUR_EMBEDDING_MODEL")
vectorstore = FAISS.from_documents(chunks, embeddings)

retriever = vectorstore.as_retriever(search_kwargs={"k": 5})

prompt = ChatPromptTemplate.from_messages([
    ("system", "Отвечай только по найденному контексту. Если ответа нет, так и скажи.\\n\\n{context}"),
    ("human", "{input}"),
])

llm = ChatOpenAI(model="YOUR_CHAT_MODEL")
combine_docs_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, combine_docs_chain)

result = rag_chain.invoke(
    {"input": "Какие ограничения есть в тарифе Enterprise?"}
)

print(result["answer"])
for doc in result["context"]:
    print(doc.metadata.get("source"))

Здесь важна не библиотека, а дисциплина. Если пользователь не видит источники, если retrieval не проверяется отдельно от генерации и если у системы нет ветки «ответа нет в документах», это ещё не корпоративный поиск. Это просто уверенная модель поверх сырого индекса.

Где RAG ломается и что мерить

Вот где ломается большинство проектов.

  • В индекс попадает мусор: плохо распознанные PDF, устаревшие версии документов, дубли, сломанные таблицы.
  • Retrieval не знает про права доступа и приносит документ, который пользователь не должен видеть.
  • В контекст отправляют слишком много фрагментов «на всякий случай», и модель цепляется за шум.
  • У системы нет честного отказа от ответа, поэтому она достраивает ответ из общих знаний модели.
  • Команда оценивает качество по трём удачным вопросам вместо тестового набора.

RAG удобно считать двухконтурной системой. Сначала измеряется retrieval. Потом уже generation. Если смешать их в одну оценку, спор быстро скатывается в «кажется, стало лучше».

Метрика Что показывает Что делать, если результат плохой
Context recall Находит ли retrieval нужный документ или нужный фрагмент. Менять чанкинг, embedding-модель, гибридный retrieval, фильтры и структуру метаданных.
Context precision Сколько лишнего попало в контекст. Ужесточать фильтры, добавлять reranking, уменьшать шумную выдачу.
Faithfulness Насколько ответ опирается на найденный контекст, а не на догадку модели. Добавлять ссылки на источник, усиливать инструкцию и снижать свободу генерации.
Response relevancy Отвечает ли текст именно на вопрос пользователя. Чинить промпт, формат ответа, post-processing и сценарий запроса.

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

Список метрик RAG в документации Ragas
Ragas выделяет отдельные метрики для retrieval и ответа: context precision, context recall, response relevancy, faithfulness и другие. Источник: Ragas Docs.

Рабочий маршрут внедрения

Если упростить путь до приземлённого инженерного маршрута, он обычно выглядит так.

  1. Соберите 50-100 реальных вопросов пользователей, а не «демо-запросы для презентации».
  2. Для каждого вопроса зафиксируйте, в каком документе лежит правильный ответ и какие права доступа к нему должны применяться.
  3. Проверьте качество извлечения текста из исходников: PDF, HTML, Markdown, таблицы, вложения, служебные поля.
  4. Выберите стартовую стратегию чанкинга и сохраните вместе с текстом метаданные: раздел, URL, дата, продукт, уровень доступа.
  5. Сравните обычный векторный поиск с гибридным retrieval на одном и том же наборе вопросов.
  6. Добавьте reranking, только если retrieval находит нужное, но не умеет правильно ранжировать выдачу.
  7. Настройте ответ с цитатами или ссылками на источник и с явным отказом, если ответа в найденных документах нет.
  8. После каждого изменения отдельно измеряйте retrieval и generation. Иначе прогресс неотличим от шума.

Если вам нужен прикладной ориентир, а не только теория, посмотрите кейс AI-ассистента для колл-центра. Там хорошо видно, как retrieval и качество источников начинают влиять не на абстрактную «умность модели», а на живой бизнес-процесс.

Что читать дальше по кластеру RAG

Удобнее всего идти по одному из четырёх маршрутов.

1. База и архитектура

2. Retrieval и хранение

3. Фреймворки и локальный стек

4. Агентные и прикладные сценарии

И ещё одно практическое напоминание. Если retrieval уже не находит нужный документ, не лечите это новой моделью. Сначала чините индекс, документы и ранжирование. В RAG это почти всегда даёт больше пользы, чем очередная смена модели в API.

Источники и дата проверки

  • Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, Patrick Lewis et al., NeurIPS 2020. Базовая работа, откуда пошёл сам термин RAG.
  • LangChain Docs: Retrieval, проверено 6 мая 2026 года. Описывает retrieval как ответ на ограниченный контекст и статичность знаний модели, а также разводит 2-step, agentic и hybrid RAG.
  • Lost in the Middle: How Language Models Use Long Contexts, Nelson F. Liu et al., 2023. Показывает, что длинный контекст не равен надёжному использованию информации из середины входа.
  • Ragas Docs: available metrics, проверено 6 мая 2026 года. Источник по context precision, context recall, response relevancy, faithfulness и связанным метрикам для RAG.
Telegram-канал @toolarium