Содержание
- 1. Что такое RAG — Retrieval-Augmented Generation
- 2. Зачем нужен RAG — три ограничения «голой» LLM
- 3. Принцип работы — RAG в три шага
- 4. Основные компоненты RAG
- 5. Что такое векторная база данных
- 6. Где применяется RAG — основные сценарии
- 7. RAG vs дообучение — что выбрать
- 8. Реализация — RAG на LangChain
- 9. Проблемы RAG и способы их решения
- 10. Обзор основных инструментов и сервисов
- FAQ
«Хочу, чтобы ChatGPT прочитал наши внутренние правила и автоматически отвечал на вопросы сотрудников», «Нужно искать по базе свежих научных статей и резюмировать их» — таких запросов становится всё больше. Но обучающие данные ChatGPT обрываются на каком-то моменте в прошлом, а отдавать конфиденциальные внутренние документы прямо в обучение модели тоже нельзя.
Эту проблему решает технология RAG (Retrieval-Augmented Generation, генерация с дополненной выборкой). С 2023 года это одно из ключевых слов корпоративного применения ИИ; функции ChatGPT «Custom GPTs» и «Projects» внутри тоже устроены как RAG.
В этой статье мы разбираем принцип RAG в три шага, рассказываем про векторные базы, реализацию на LangChain и про то, чем RAG отличается от дообучения, — так, чтобы было понятно начинающему, но при этом технически корректно.
1. Что такое RAG — Retrieval-Augmented Generation
Дословно RAG (Retrieval-Augmented Generation) — это «генерация (Generation), дополненная (Augmented) поиском (Retrieval)». На русском обычно говорят «генерация с дополненной выборкой».
В одном предложении: «прежде чем LLM (большая языковая модель) сформирует ответ, она ищет релевантную информацию во внешней базе данных и опирается на найденное при генерации».
Кулинарная аналогия
«Голая» LLM — это шеф-повар, готовящий «по памяти». Талантливый, но новый рецепт ему не приготовить, и о содержимом конкретного холодильника он ничего не знает.
RAG — это когда тому же шефу дают кулинарную книгу и список того, что лежит в холодильнике, и только потом просят готовить. Шеф, сверяясь с книгой, готовит из того, что реально есть.
Роли «Retrieval», «Augmented» и «Generation»
| Слово | Значение | Роль в RAG |
|---|---|---|
| Retrieval | поиск, извлечение | достать из базы документы, релевантные вопросу |
| Augmented | дополнение, усиление | добавить найденное в промпт и передать LLM |
| Generation | генерация | LLM формирует ответ, опираясь на найденное |
Главная идея — мы не переобучаем саму LLM, а каждый раз, когда поступает вопрос, передаём ей «нужные знания» извне. В этом и есть принципиальное отличие от дообучения, о котором речь ниже.
2. Зачем нужен RAG — три ограничения «голой» LLM
У ChatGPT, Claude и других LLM в чистом виде есть три проблемы, которые им самим не решить.
Ограничение 1. Cut-off знаний (актуальность)
LLM обучается на «данных до некоторого момента», поэтому ничего не знает о событиях после этой даты. Например, у ранней версии GPT-4 знания были по апрель 2023 года.
- «Расскажи о новом продукте, который вчера анонсировали» → ответить не сможет
- «Что в законе, который вступил в силу на прошлой неделе?» → не знает
- «Какой сегодня курс валюты?» → не ответит
С помощью RAG можно подгружать свежие новости, данные из БД и API и отвечать на их основе.
Ограничение 2. Галлюцинации (правдоподобная ложь)
Если у LLM спросить о том, чего она не знает, она склонна выдумывать ответ, который выглядит уверенно. Это и называют галлюцинацией.
Пример: «Сколько дней оплачиваемого отпуска у нас в компании?» — LLM не знает, но отвечает «обычно от 10 до 20 дней». Для бизнеса так нельзя.
В RAG модель ищет реальный текст внутреннего регламента и опирается на него — ответ становится обоснованным. Можно даже указать, «какой это документ и какой пункт».
Ограничение 3. Нет доступа к внутренним и приватным данным
Внутренние инструкции вашей компании, договоры, данные клиентов в обучающую выборку LLM не попадают. А отдать конфиденциальные данные прямо в обучение нельзя — это и риск утечки, и дорого.
RAG позволяет хранить документы во внутренней векторной БД, и при поступлении вопроса извлекать только нужный фрагмент и передавать его LLM. Так можно использовать корпоративные данные, не теряя в безопасности.
3. Принцип работы — RAG в три шага
Работа RAG делится на две фазы: «подготовка (индексация)» и «исполнение (ответ на вопрос)».
Фаза подготовки — векторизация документов
- Сбор документов: PDF, Word, HTML, Markdown — собираем то, что хотим использовать
- Чанкование: режем документы на куски подходящей длины (например, 500–1000 символов)
- Эмбеддинги: каждый чанк прогоняем через эмбеддинг-модель (например, OpenAI text-embedding-3-small) и получаем вектор (массив чисел) размерности, например, 1536
- Сохранение в векторную БД: пары «чанк — вектор» кладём в специализированную БД (Pinecone, Qdrant и т. п.)
Этот процесс запускается, когда документы добавляются или меняются.
Фаза исполнения — ответ за три шага
Когда поступает вопрос пользователя, происходит следующее.
- Шаг 1: Retrieval (поиск)
- превращаем вопрос в вектор той же эмбеддинг-моделью
- в векторной БД находим топ-K (обычно 3–10) чанков, ближайших к вектору запроса
- близость считается, например, по косинусному сходству
- Шаг 2: Augmented (расширение)
- найденные чанки встраиваются в промпт как «справочный контекст»
- примерно так: «Опираясь на следующее, ответь на вопрос: [результаты поиска] Вопрос: [вопрос пользователя]»
- Шаг 3: Generation (генерация)
- LLM (GPT-4, Claude, Gemini и т. п.) формирует ответ на основе контекста
- при необходимости указывает, «какой именно документ был использован»
Конкретный пример: внутренний регламент через ChatGPT
Сценарий «Сколько дней оплачиваемого отпуска?»:
- вопрос превращается эмбеддинг-моделью в вектор → [0.12, -0.45, 0.78, ...]
- из векторной БД достаются три чанка по темам «отпуск» и «оплачиваемый»
- например: «Статья 15. Ежегодный оплачиваемый отпуск. Сотрудникам, проработавшим 6 месяцев, предоставляется 10 дней...» и «в зависимости от стажа — до 20 дней...»
- промпт собирается так: «Контекст: ст. 15... Вопрос: сколько дней отпуска?»
- LLM отвечает: «После 6 месяцев — 10 дней; в зависимости от стажа — до 20 дней (см. ст. 15 регламента)»
4. Основные компоненты RAG
RAG состоит из пяти компонентов.
1. Эмбеддинг-модель (Embedding Model)
ИИ-модель, которая превращает текст в числовой вектор. Обучается так, чтобы «семантически близкие тексты находились близко и в пространстве векторов».
| Модель | Поставщик | Особенности |
|---|---|---|
| text-embedding-3-small | OpenAI | дешёвая и качественная, 1536 измерений |
| text-embedding-3-large | OpenAI | более точная, 3072 измерения |
| voyage-3 | Voyage AI | рекомендуется Anthropic, высокая точность |
| Cohere Embed v3 | Cohere | многоязычная, хорошо работает с русским |
| multilingual-e5-large | Microsoft (OSS) | можно запускать локально, бесплатно |
| BGE-M3 | BAAI (OSS) | 100+ языков, лучший в OSS-сегменте |
2. Векторная база данных
Специализированная БД, которая хранит большие массивы векторов и быстро ищет «ближайших». Подробнее в следующем разделе.
3. Поисковик (Retriever)
Кроме векторного поиска часто комбинируется с поиском по ключевым словам (BM25 и т. п.) — получается гибридный поиск.
4. LLM (генератор)
Большая языковая модель, которая строит итоговый ответ. GPT-4, Claude, Gemini, Llama 3 и т. д. — подойдёт и платное API, и локальная OSS-модель.
5. Шаблон промпта
Шаблон, который собирает результаты поиска и вопрос пользователя в готовый промпт для LLM. От него сильно зависит качество RAG.
Ты ассистент по внутренним правилам компании.
Отвечай на вопрос, опираясь только на приведённый ниже контекст.
Если в контексте нет ответа — напиши «информации нет».
[Контекст]
{retrieved_chunks}
[Вопрос]
{user_question}
[Ответ]
5. Что такое векторная база данных
Векторная БД, в отличие от обычной реляционной (MySQL и т. п.), специализируется на «быстром поиске ближайших соседей в многомерном векторном пространстве».
Сравнение основных векторных БД
| БД | Тип | Особенности | Цена |
|---|---|---|---|
| Pinecone | managed SaaS | отраслевой стандарт, очень простая настройка | есть free tier, далее от $70/мес. |
| Weaviate | OSS + облако | GraphQL API, гибридный поиск | OSS бесплатно, SaaS от $25 |
| Qdrant | OSS + облако | Rust, быстрый, мощная фильтрация | OSS бесплатно, есть free tier |
| Chroma | OSS | лёгкий, моментально работает из Python | бесплатно (self-host) |
| pgvector | расширение PostgreSQL | работает в существующем PostgreSQL | бесплатно (OSS) |
| Milvus | OSS + облако | для крупного масштаба, миллиарды векторов | OSS бесплатно, Zilliz Cloud |
| Elasticsearch | поисковый движок | поддержка векторов, интеграция в существующий стек | OSS бесплатно, есть managed |
| Vertex AI Vector Search | Google Cloud | интеграция в экосистему GCP | оплата по факту |
Что выбрать
- Просто попробовать: Chroma (поставил pip — заработало)
- Уже есть PostgreSQL: pgvector (всё в одной БД)
- Прод с минимальной эксплуатацией: Pinecone (почти ничего не нужно настраивать)
- Серьёзный OSS-стек: Qdrant или Weaviate
- Сотни миллионов и больше: Milvus
К слову, по выбору хостинга для самой системы будет полезна статья PaaS (Vercel и др.) vs шаред-хостинг, VPS и облако.
6. Где применяется RAG — основные сценарии
С 2023 года RAG — одна из самых востребованных технологий в корпоративном ИИ. Самые показательные сценарии:
Сценарий 1. Внутренний QA по документам (knowledge base)
Регламенты, инструкции, тех. спецификации, протоколы встреч, материалы для продаж индексируются в RAG, и сотрудники задают вопросы, как ChatGPT. Microsoft 365 Copilot для документов в SharePoint тоже использует RAG.
Сценарий 2. Автоматизация поддержки клиентов
FAQ и история обращений индексируются — чат-бот закрывает первую линию, а живые операторы занимаются только сложными случаями.
Сценарий 3. Q&A по праву и медицине
Базы судебных решений, медицинских статей, клинических рекомендаций — это идеальный материал для RAG. Юристы и врачи используют такие системы в ежедневной работе. Указание источников особенно важно для отраслей, где нужны обоснования.
Сценарий 4. Поиск и резюме научных статей
arXiv, PubMed, Google Scholar и т. п. индексируются, и можно спросить «какие сейчас тренды в этой теме?» или «есть ли похожие исследования по методу X?». Так работают Elicit и Perplexity.
Сценарий 5. Поиск товаров и FAQ для интернет-магазинов
Инструкции, отзывы, правила возврата — всё в одном RAG. Можно искать на естественном языке: «подходит ли этот пылесос для шерсти питомцев?»
Сценарий 6. Чат по документации для разработчиков
Документация библиотек индексируется в RAG — и можно спросить: «Как написать вот так на AWS Lambda? Дай пример кода». Похожий подход используют Stripe, Vercel, Supabase. Внутри GitHub Copilot Chat и Cursor, Claude Code и других ИИ-инструментов разработки тоже работают похожие методы.
Сценарий 7. Поиск и объяснение по корпоративной кодовой базе
Код из GitHub индексируется как RAG, и инструмент для разработчиков помогает с вопросами: «как использовать эту функцию?», «где ещё реализована похожая логика?».
Сценарий 8. Новые форматы оптимизации под ИИ — например llms.txt
llms.txt — это способ корректно отдавать ИИ информацию с сайта. Идея хорошо ложится на RAG: владелец сайта в структурированном виде сообщает, что именно ИИ должен прочитать.
7. RAG vs дообучение — что выбрать
Часто рядом с RAG обсуждают дообучение (Fine-tuning) как способ «дать LLM свои знания». Подходы принципиально разные.
Принципиальные различия
| Аспект | RAG | Дообучение |
|---|---|---|
| Подход | знания подаются извне на этапе исполнения | сама модель переобучается заранее |
| Обновление знаний | достаточно правки БД (мгновенно) | нужно переобучение (время и деньги) |
| Стартовая стоимость | низкая (только построение БД) | высокая (датасет и вычисления) |
| Стоимость эксплуатации | поиск + плата за LLM API | только инференс собственной модели |
| Галлюцинации | низкий уровень (есть источник) | средний (повторяет выученное) |
| Указание источника | возможно | сложно |
| Освоение стиля и тона | слабая сторона | сильная сторона |
| Динамические данные | отлично работают (даже realtime) | плохо (нужно переобучать) |
| Конфиденциальность | можно полностью on-prem | тоже можно, но тяжелее |
Когда подходит RAG
- знания часто меняются (новости, внутренние документы, информация о товарах)
- нужно показывать источники (право, медицина, финансы)
- документов очень много (учить всё нереалистично)
- нужно стартовать быстро (сократить срок разработки)
Когда подходит дообучение
- нужен особый стиль и тон (брендовый голос, характер персонажа)
- нужны специфические языковые паттерны (медицинская, юридическая лексика)
- хочется снизить стоимость инференса (промпт станет короче)
- уже есть большой объём качественной обучающей выборки
Сильнее всего — комбинация
На самом деле RAG и дообучение не противоречат друг другу и могут использоваться вместе. Стиль зашиваем дообучением, актуальные знания подаём через RAG — на проде такая связка встречается часто.
Однако новичкам всегда лучше начинать с RAG: его несравнимо проще запустить и поддерживать, чем дообучение.
8. Реализация — RAG на LangChain
Сначала пройдёмся по основным фреймворкам, потом — минимальный пример на Python.
Основные фреймворки
| Фреймворк | Язык | Особенности |
|---|---|---|
| LangChain | Python / JS | самый распространённый, много интеграций |
| LlamaIndex | Python | фокус на коннекторах данных и индексации |
| Haystack | Python | enterprise-ориентация, точная настройка |
| Semantic Kernel | C# / Python | от Microsoft, силён в .NET-стеке |
| DSPy | Python | автооптимизация промптов |
| Своя реализация | любой | простой RAG умещается в 100 строк |
Минимальный RAG на LangChain
Реализуем RAG, отвечающий на вопросы по PDF с внутренним регламентом, — примерно в 30 строках на LangChain.
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
# 1. Загрузка документа
loader = PyPDFLoader("regulations.pdf")
docs = loader.load()
# 2. Чанкование
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, chunk_overlap=50
)
chunks = splitter.split_documents(docs)
# 3. Эмбеддинги + сборка векторной БД
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)
# 4. Сборка цепочки RAG
llm = ChatOpenAI(model="gpt-4o-mini")
qa = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True,
)
# 5. Вопрос
result = qa.invoke({"query": "Сколько дней оплачиваемого отпуска?"})
print(result["result"])
print("Источники:", [d.metadata for d in result["source_documents"]])
Этот код ищет нужные фрагменты в PDF и заставляет GPT-4o-mini сформулировать ответ. Поскольку доступны и номера страниц источников, можно отвечать «согласно ст. 15» с указанием цитаты.
Что добавляется в боевой реализации
- Оптимизация чанкования (семантическое разбиение, иерархические чанки и т. п.)
- Гибридный поиск (вектор + BM25)
- Reranking (Cohere Rerank, voyage-rerank — переупорядочивают результаты)
- Переписывание запроса (HyDE, Multi-Query — повышают точность)
- Конвейер оценки (RAGAS для автоматической оценки)
9. Проблемы RAG и способы их решения
RAG — мощная технология, но в эксплуатации возникают типичные сложности.
Проблема 1. Сложность чанкования
От стратегии разбиения сильно зависит точность поиска. Слишком короткие чанки теряют контекст, слишком длинные — снижают точность поиска.
Решения:
- семантическое разбиение (по смысловым единицам)
- перекрытие (соседние чанки частично пересекаются)
- иерархическое разбиение (храним связь «родитель — ребёнок», ищем по детям, отдаём родителя)
Проблема 2. Точность Retrieval
Достаются «похожие, но не те» чанки или, наоборот, теряются важные.
Решения:
- гибридный поиск (вектор + BM25)
- reranker для пересортировки результатов
- генерация нескольких запросов (один вопрос — разные формулировки)
Проблема 3. Ограничение по длине контекста
В LLM можно передать лишь ограниченное число токенов — все чанки не пролезут.
Решения:
- сократить K (топ-3–5)
- сначала суммаризировать, потом передавать
- использовать LLM с длинным контекстом (Claude 200K, Gemini 1M и т. п.)
Проблема 4. Сложность оценки
Оценить качество ответов RAG объективно непросто. Сложно даже подготовить эталонный набор.
Решения:
- использовать RAGAS (OSS-фреймворк для оценки RAG)
- автоматически считать метрики корректности ответа, релевантности, верности контексту
- LLM-as-a-Judge (другая LLM ставит оценки)
Проблема 5. Многоязычность и мультимодальность
Документы со смесью языков, PDF с картинками, таблицы и графики — всё это сложно обрабатывать.
Решения:
- многоязычные эмбеддинги (BGE-M3, Cohere Multilingual)
- заранее конвертировать картинки и таблицы в текст (OCR + VLM)
- мультимодальные эмбеддинги (CLIP, Nomic и т. п.)
10. Обзор основных инструментов и сервисов
Сводка основных инструментов для построения RAG по категориям.
Фреймворки и библиотеки
- LangChain — самый распространённый фреймворк для RAG
- LlamaIndex — фокус на коннекторах данных
- Haystack — enterprise-уровень
- DSPy — автооптимизация промптов
Векторные БД (managed)
- Pinecone — отраслевой стандарт
- Weaviate Cloud — поддержка GraphQL
- Qdrant Cloud — высокая производительность
- Zilliz Cloud — managed-версия Milvus
Векторные БД (OSS, self-host)
- Chroma — лёгкий, сразу работает в Python
- Qdrant — Rust, быстрый
- Weaviate — OSS-версия
- Milvus — для крупного масштаба
- pgvector — расширение PostgreSQL
Эмбеддинг-модели
- OpenAI text-embedding-3 — стандартный, дешёвый
- Voyage AI — рекомендован Anthropic
- Cohere Embed v3 — многоязычная
- BGE-M3 — лучший в OSS
No-code / managed-RAG
- ChatGPT Projects / Custom GPTs — RAG от OpenAI
- Claude Projects — RAG от Anthropic
- Notion AI — поиск по документам в Notion
- Microsoft Copilot (Microsoft 365) — кросс-поиск по SharePoint и Teams
- Dify — OSS-платформа no-code AI
- Vertex AI Agent Builder — RAG в Google Cloud
- Amazon Bedrock Knowledge Bases — managed-RAG в AWS
Инструменты оценки
- RAGAS — OSS-фреймворк оценки RAG
- TruLens — оценка LLM-приложений в целом
- LangSmith — официальная трассировка и оценка от LangChain
FAQ
Q. Можно ли использовать RAG с ChatGPT?
Да. Если в ChatGPT Projects или Custom GPTs загрузить файлы, внутри это работает как RAG (у OpenAI это называется «File Search»). Если разработчику нужно использовать RAG через API, можно взять «File Search» в OpenAI Assistants API или построить свой RAG, например, на LangChain. Аналогичные возможности есть и в Claude через «Projects».
Q. Сколько стоит эксплуатация RAG?
Сильно зависит от масштаба. Личный или маленький проект (до 10 000 документов, около 1 000 запросов в месяц) на Chroma + OpenAI API укладывается в несколько десятков долларов в месяц. Средний (100 000 документов, 100 000 запросов) на Pinecone + GPT-4o — сотни — тысячи долларов. Крупный enterprise — десятки тысяч и больше. Основные статьи затрат — «эмбеддинг API», «векторная БД», «LLM API».
Q. Чем RAG отличается от простой загрузки файлов в ChatGPT?
По сути это та же «генерация с дополненной выборкой». При загрузке файлов в ChatGPT внутри тоже работает RAG. Разница: (1) ChatGPT берёт от одного до десятков файлов (в Projects — заметно больше), а собственный RAG — миллионы; (2) ChatGPT — чёрный ящик, в своём RAG алгоритм поиска под полным контролем; (3) ChatGPT — на серверах OpenAI, свой RAG можно держать on-prem. На проде в компаниях обычно делают свой.
Q. С RAG галлюцинации исчезают полностью?
Не до нуля. Даже в RAG случаются ошибки: (1) релевантный документ не нашёлся, (2) результат поиска есть, но LLM его неверно интерпретировала, (3) в результатах поиска есть противоречия. Помогают ограничения в промпте («если в контексте нет — отвечай "информации нет"»), указание источников и регулярная оценка через RAGAS. Но 100% точности всё равно не будет, поэтому в медицине, праве и подобных критических сферах обязательна проверка человеком.
Q. Как сделать RAG для русскоязычных документов?
Главное — три вещи: (1) взять многоязычную эмбеддинг-модель (OpenAI text-embedding-3, Cohere Multilingual, BGE-M3), (2) при чанковании учитывать особенности русского (морфология, пунктуация), (3) выбрать LLM, хорошо работающую с русским (GPT-4o, Claude, Gemini). text-embedding-3 от OpenAI с русским справляется уверенно, а BGE-M3 и Cohere дают ещё более высокую точность.
Q. Чем RAG отличается от ИИ-агента?
RAG — это фиксированная схема «найти и сгенерировать». Агент — это динамическая схема, которая «исходя из цели сама выбирает и запускает инструменты». Часто RAG встроен в агента как один из инструментов. Например, агент может оперировать «поиском по внутренней БД (RAG)», «веб-поиском», «вычислениями», «отправкой почты», выбирая нужное по ситуации. Появляется и так называемый Agentic RAG — это RAG, в котором стратегией поиска управляет сама LLM.
Q. Что с безопасностью? Не хочу показывать ИИ конфиденциальное
Несколько способов: (1) держать векторную БД и эмбеддинг on-prem или в VPC (Qdrant, pgvector — self-host), (2) и LLM брать локальную OSS-модель (Llama 3, Qwen и т. п.), (3) при использовании облачного API заключать договор «данные не используются для обучения» (есть у OpenAI и Azure OpenAI), (4) хранить в чанках метаданные доступа и фильтровать поиск по уровню доступа пользователя. Полностью on-prem RAG технически реален и активно используется в финансовых и медицинских организациях.
Q. Сколько времени и какие навыки нужны для построения RAG?
Прототип на Python начинающий уровень — от нескольких часов до одного дня (Chroma + OpenAI API, около 30 строк кода). Боевой уровень с настройкой чанкования, гибридного поиска, реранкера, конвейера оценки — обычно 1–3 месяца. Из навыков нужны «база Python», «работа с LLM API», «базовые операции с БД». Глубокого знания ML не требуется, поэтому область скорее для software-инженера, чем для ML-инженера.
Статья подготовлена на основе данных по состоянию на апрель 2026 года. Инструменты и модели в области RAG развиваются быстро, поэтому при реализации сверяйтесь с актуальной документацией каждого сервиса.