Руководства

Что такое RAG? Retrieval-Augmented Generation простыми словами

RAG (retrieval-augmented generation) — это способ заставить модель ИИ отвечать на вопросы, используя вашу собственную информацию. Когда кто-то задаёт вопрос, приложение сначала ищет в ваших документах самые подходящие фрагменты, а затем передаёт их модели вместе с вопросом. Модель пишет ответ на основе этого текста, а не только на том, что случайно усвоила при обучении.

Почему RAG важен при создании приложений с ИИ

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

Есть три основных способа это исправить:

ПодходЧто делаетПодходит для
Вставить всё в промптОтправлять все документы с каждым вопросомНебольшого объёма текста — нескольких страниц
RAGИскать в документах и отправлять только нужные частиБольших или меняющихся коллекций: центров помощи, руководств, заметок
Дообучение (fine-tuning)Дополнительно обучить модель на примерахТона, формата и повторяющихся задач, но не меняющихся фактов

Современные модели принимают длинные промпты, поэтому для короткого FAQ первый вариант часто подходит. RAG окупается, когда текста больше, чем хочется отправлять каждый раз, ведь каждое слово стоит денег и времени (см. как устроена оплата LLM API).

Если вы создаёте функцию «чат по нашим документам», помощника службы поддержки или внутренний инструмент знаний, почти наверняка вы строите какую-то форму RAG.

Бытовая аналогия

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

  • Студент — это языковая модель.
  • Учебник — ваши документы.
  • Поиск нужных страниц — это retrieval, извлечение.
  • Написание ответа по этим страницам — это generation, генерация.

RAG — это версия экзамена с открытой книгой. И, как на экзамене, качество ответа сильно зависит от того, нашлись ли нужные страницы.

Как работает RAG по шагам

Типичная RAG-система состоит из двух этапов.

Подготовка документов (делается заранее):

  1. Соберите исходные материалы: статьи помощи, PDF, правила, данные о продуктах.
  2. Нарежьте текст на чанки: разбейте длинные документы на небольшие куски, часто по несколько абзацев, чтобы поиск мог вернуть только нужную часть.
  3. Превратите каждый чанк в эмбеддинг: отправьте его в модель эмбеддингов, которая переводит текст в набор чисел, отражающих его смысл. Тексты о похожих вещах получают похожие наборы чисел.
  4. Сохраните чанки и их эмбеддинги в базе, которая умеет искать по сходству (её часто называют векторной базой данных или векторным индексом).

Ответ на вопрос (делается каждый раз):

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

Поиск по смыслу и делает эту схему рабочей: вопрос о «возврате денег» может найти чанк «Политика возвратов», даже если у них нет общих слов.

Пример: помощник спортклуба

Допустим, в спортклубе есть 40 статей помощи, и он хочет разместить чат-помощника на сайте. Участник спрашивает: «Могу ли я заморозить абонемент, пока уезжаю в командировку?»

Приложение превращает вопрос в эмбеддинг и находит три ближайших чанка. Один из них гласит:

Заморозка абонемента: участники с помесячными тарифами могут
заморозить абонемент до 2 месяцев в год. Оформить можно на ресепшене
или в приложении не позднее чем за 7 дней до начала заморозки.

Промпт, отправленный модели, выглядит примерно так:

Ты помощник службы поддержки Northside Gym.
Отвечай только на основе источников ниже. Если ответа в них нет,
скажи, что не знаешь, и предложи обратиться на ресепшен.
Укажи, какой источник использовал.

[Источник 1: Заморозка абонемента] Участники с помесячными тарифами могут заморозить...
[Источник 2: Отмена абонемента] ...
[Источник 3: Гостевые пропуска] ...

Вопрос: Могу ли я заморозить абонемент, пока уезжаю в командировку?

Модель отвечает: «Да: на помесячном тарифе абонемент можно заморозить до двух месяцев в год. Оформить заморозку нужно на ресепшене или в приложении не позднее чем за 7 дней до её начала (источник: Заморозка абонемента).»

Клуб ничего не переобучал. Когда он меняет правила заморозки, он обновляет статью, приложение заново создаёт эмбеддинг этого чанка, и следующий ответ уже отражает изменение.

Ключевые термины

ТерминЗначение
LLMБольшая языковая модель — ИИ, который пишет ответ. См. что такое LLM.
ЭмбеддингНабор чисел, отражающий смысл фрагмента текста.
Модель эмбеддинговМодель, которая создаёт эмбеддинги. Обычно отдельная и заметно дешевле чат-модели.
ЧанкФрагмент документа, достаточно небольшой, чтобы его можно было найти отдельно.
Векторная база данных / векторный поискХранилище, которое находит элементы с похожими эмбеддингами. Некоторые обычные базы тоже это умеют, например Postgres через расширение pgvector.
Top-kСколько чанков извлекается на один вопрос.
Гибридный поискСочетание поиска по смыслу и обычного поиска по ключевым словам, что помогает с точными совпадениями вроде артикулов товаров.
Контекстное окноМаксимальный объём текста, который модель может принять в одном запросе.
Grounding / цитатыПривязка ответа к конкретным найденным источникам и показ этих источников.

Распространённые заблуждения

  • «RAG обучает модель на моих данных». Нет. Модель не меняется: она просто читает дополнительный текст в момент вопроса.
  • «RAG означает отсутствие галлюцинаций». Он означает их меньше. Если поиск пропустил нужный чанк или ответа нет в документах, модель всё равно может угадать. Велите ей говорить «не знаю» и проверяйте систему на вопросах, ответы на которые вы знаете.
  • «Нужна особая векторная база». Часто нет. Для небольших объёмов данных может хватить векторного расширения для уже используемой базы или даже простого поиска по ключевым словам.
  • «Чем крупнее чанки, тем лучше». Слишком большие чанки означают много нерелевантного текста (больше стоимость и путаница), слишком маленькие теряют контекст, без которого фрагмент не имеет смысла. Придётся подбирать.
  • «Загрузим всё подряд». Устаревшие, дублирующиеся или противоречивые документы дают противоречивые ответы. Очистка исходных материалов часто даёт самое большое улучшение.
  • «Любой может увидеть любой документ». Только если вы так построили систему. Если некоторые документы доступны не всем, поиск сам должен фильтровать по тому, кто спрашивает, иначе помощник может показать данные одного клиента другому.

Сколько это стоит

У функции RAG обычно три постоянные статьи расходов: эмбеддинги документов (небольшие и в основном разовые), эмбеддинги каждого вопроса (совсем мелкие) и вызов языковой модели (главная статья, которая растёт с количеством отправляемых чанков). Плюс хранение в вашей базе данных. Провайдер ИИ выставляет эти расходы на ваш аккаунт, поэтому задайте лимит расходов в его панели.

Что спросить у ИИ-конструктора

  • «Прежде чем делать RAG, проверь: поместится ли наш контент просто в промпт?»
  • «Раздели статьи помощи на чанки по несколько абзацев, сохраняй заголовок и ссылку на источник каждого чанка и храни эмбеддинги в нашей базе данных.»
  • «Используй гибридный поиск — по смыслу и по ключевым словам, — чтобы артикулы товаров тоже находились.»
  • «Велите модели отвечать только по найденным источникам, говорить, когда она не знает ответа, и показывать источники под каждым ответом.»
  • «Ищи только те документы, которые может видеть вошедший пользователь.»
  • «Автоматически создавай эмбеддинг заново, когда документ редактируется.»
  • «Храни ключ провайдера ИИ на сервере в секрете, а не в браузере.»
  • «Записывай каждый вопрос, найденные чанки и ответ, чтобы я мог проверять плохие ответы.»

RAG в Mythex

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

Вопросы

Что такое RAG простыми словами?

RAG (retrieval-augmented generation) — это способ заставить модель ИИ отвечать на основе вашей собственной информации. Перед ответом приложение ищет в ваших документах фрагменты, наиболее подходящие к вопросу, и добавляет их в запрос. Так ответ опирается на этот текст, а не только на то, что модель запомнила при обучении.

Обучает ли RAG ИИ на моих данных?

Нет. RAG вообще не меняет модель. Он ищет нужный текст в момент вопроса и передаёт его модели вместе с самим вопросом. Если вы обновите документ, следующий ответ уже будет использовать новую версию.

Это то же самое, что дообучение?

Нет. Дообучение (fine-tuning) меняет поведение модели: она дополнительно учится на примерах. Это медленнее и лучше подходит для стиля или формата. RAG даёт модели факты, которые она читает в момент вопроса, — это удобнее для знаний, которые меняются или должны цитироваться точно.

Останавливает ли RAG галлюцинации ИИ?

Снижает, но полностью не устраняет. Если поиск находит неподходящие фрагменты или ответа нет в ваших документах, модель всё равно может угадать. Хорошие RAG-приложения велят модели говорить, когда она не знает ответа, и показывают источники, которые использовали.

Mythex · Pricing · Создавайте что угодно с ИИ · Шаблоны сайтов и приложений · Сравнения Mythex · Глоссарий по созданию приложений с ИИ · Бесплатные инструменты для создания приложений с ИИ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)