Все уроки · 44
Путь 3 · Дорожная карта AI-инженера·Урок 14 из 33

Что такое RAG

Генерация, дополненная поиском (RAG): дайте модели ваши данные в момент ответа, вместо того чтобы надеяться, что она их запомнила. Почему возникают галлюцинации, где RAG применяют на практике и чем он отличается от fine-tuning.

УровеньНовичокВремя~12 мин

Два вида экзамена

Представьте два экзамена.

На закрытом экзамене вы приходите только с тем, что выучили. Если спросят о том, чего вы не учили, вариантов два: оставить ответ пустым или написать что-нибудь правдоподобное и понадеяться на удачу. Языковые модели устроены так, что пустых ответов не оставляют, — поэтому они пишут что-нибудь правдоподобное. Это и есть галлюцинация: уверенный ответ, который звучит безупречно и при этом просто выдуман.

На открытом экзамене вы приходите с учебником. Чтобы ответить на вопрос о правилах возврата, достаточно найти нужную страницу и прочитать её. Экзамен не стал проще оттого, что вы поумнели. Он стал проще, потому что нужная информация оказалась под рукой.

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

Вот и вся идея. Остальная часть урока уточняет каждую из двух половин: что такое поиск и почему модель не может просто знать ваши данные.

Что такое «поиск»

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

Он берёт ваш вопрос и возвращает несколько фрагментов:

Вопрос: «Какой у нас срок возврата для годовых тарифов?»

Найденный фрагмент: «Годовые тарифы можно вернуть полностью в течение 14 дней с момента покупки. После 14 дней мы начисляем на баланс остаток пропорционально неиспользованному сроку».

Этот фрагмент лежит в файле refunds.md в вики вашей компании. Модель его никогда не видела. Поиск его нашёл, и мы вставляем его в промпт, чтобы модель прочитала его перед ответом.

Три слова, на которых строится всё остальное:

  • Окно контекста — рабочая память модели на время одного разговора. Всё, что вы вставляете, и всё, что она пишет в ответ, должно в нём уместиться.
  • Дополненная — к промпту добавили найденные фрагменты.
  • Генерация — модель пишет ответ.

Итак, генерация, дополненная поиском — это просто: найти, вставить, затем написать.

Почему модель не может просто знать ваши данные

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

Поэтому всё, что она может «знать» в момент ответа, берётся ровно из двух мест:

  1. Её веса — закономерности, сжатые в ней в ходе обучения. Они заморожены в тот день, когда обучение закончилось. Изменить в них один факт нельзя — пришлось бы обучать модель заново.
  2. Окно контекста — текст, который вы отправили вместе с этим запросом. Только эту половину вы можете контролировать.

Ваших данных по умолчанию нет ни там, ни там — по двум разным причинам:

  • Дата отсечки. Обучение закончилось в какой-то день. Об изменении цен на прошлой неделе, о сегодняшнем сбое и о политике возврата, которую вы переписали вчера, модель ничего не слышала.
  • В обучающих данных их не было вообще. Ваши документы, обращения, договоры и внутренняя вики закрыты. Никто в OpenAI не читал вики вашей компании, поэтому в весах нечего вспоминать — как бы удачно вы ни сформулировали вопрос.

Отсюда и уверенная чепуха вместо молчания. Хранилища фактов, в которое можно заглянуть и вернуться ни с чем, у модели нет: она всегда предсказывает следующее слово. Если дать ей «Наш срок возврата для годовых тарифов — ___», самое вероятное продолжение — число и правдоподобная фраза, потому что именно так такие фразы выглядят в интернете. Пропуск она заполняет потому, что заполнять пропуски — единственное, чем она занимается.

Раньше оставалось надеяться: «может быть, она запомнила достаточно». RAG заменяет надежду механизмом: положите факт в промпт — и угадывать будет нечего.

Увидеть разницу

Вот один и тот же вопрос на закрытом экзамене — модель без доступа к вашим данным — и затем с RAG. Посмотрите, что происходит, когда мы даём ей что-нибудь прочитать:

Без RAG и с RAG
press the button below to send the first message
sent to the modelnothing yet — every message is sent in full

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

Уверенно и неверно — худшее сочетание

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

Почему бы не вставить всё в промпт?

Этот вопрос задаёт каждый новичок, и он резонный: если модель умная, почему бы не отдать ей сразу всю вики и не покончить с этим?

Три причины — по степени вреда:

  1. Оно не помещается. Окно контекста — жёсткий бюджет. 200 тысяч токенов кажутся огромной цифрой, пока не посчитаете: вики компании приличного размера — это миллионы токенов. Вставить всё физически невозможно.
  2. Это медленно и дорого. Каждый отправленный токен стоит денег и добавляет задержку — и так на каждый вопрос. Платить за перечитывание 500 страниц ради ответа на «какой срок возврата?» — невыгодная сделка.
  3. Ответы становятся хуже. Если зарыть единственный нужный абзац в 500 страниц, модель отвлекается: уходит в оговорки, путает две политики или уверенно берёт ответ не из того раздела. Точность растёт не от большего контекста, а от правильного.

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

Почему без него возникают галлюцинации

К выдумыванию модель толкают три силы:

  • Нет доступа. Факта просто нет ни в обучающих данных, ни в промпте. Единственный ход модели — всё равно выдать правдоподобно звучащий текст.
  • Требование ответить. «Ответь на вопрос» — сильная инструкция. Модель, которая всегда отвечает «не знаю», — плохой помощник, поэтому при сомнении она всё же отвечает.
  • Гладкость. LLM обучены выдавать гладкий текст, а гладкий текст о политике возврата выглядит одинаково, настоящие в нём факты или выдуманные.

С RAG модель остаётся прежней, но ситуация меняется: вместо того чтобы вспоминать, она цитирует. А читать LLM умеют хорошо.

Попробуйте RAG вручную прямо сейчас

Чтобы почувствовать разницу, база данных не нужна. Скопируйте промпт ниже в ChatGPT и вставьте любой документ, который у вас есть (договор, инструкцию, длинное письмо), туда, где написано DOCUMENT. Задайте вопрос, ответ на который вы уже знаете. Затем задайте тот же вопрос в новом чате без документа и сравните:

Скопируйте этот промпт в ChatGPT
Вот документ:
---
DOCUMENT
---

Ответь на мой вопрос, используя ТОЛЬКО документ выше.
Правила:
- Если ответа в документе нет, скажи «Не знаю» и объясни, чего не хватает.
- Процитируй точное предложение, на котором основан ответ.
- Не используй ничего из того, что тебе известно вне документа.

Вопрос: ...

Это RAG в чистом виде — поиск вы сделали вручную. Всё остальное в этом курсе — об автоматизации того, что вы только что проделали копированием и вставкой.

Где применяют RAG

Стоит увидеть схему — найти, затем сгенерировать, — и вы начнёте замечать её повсюду:

  • Боты поддержки, которые отвечают по вашему справочному центру и не выдумывают правила.
  • Внутренние ассистенты по знаниям поверх вики, заявок и архивов Slack.
  • Ассистенты для кода, опирающиеся на вашу кодовую базу вместо типовых руководств.
  • Юридические и финансовые инструменты, которым нужно приводить точные пункты договоров.
  • Чат с вашими документами — классическая демонстрация, прославившая RAG.

Если продукту нужно быть точным в конкретной информации, которая со временем меняется, почти наверняка он устроен как RAG.

RAG и fine-tuning

Классический повод для путаницы. Fine-tuning (дообучение) — это продолжение обучения модели на ваших собственных примерах, благодаря чему новое поведение становится частью весов модели. Оба подхода вносят знания, но делают это на разных уровнях:

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

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

Fine-tuning выигрывает в трёх случаях:

  • Тон, формат и привычки. Всегда отвечать JSON именно той формы, которая нужна вам, писать как ваша служба поддержки, отказывать вашими словами. Это поведение, и научить ему RAG не может.
  • Задержка и стоимость в большом масштабе. Поведение, «зашитое» в модель, позволяет писать более короткие промпты и тратить меньше токенов на вызов. На миллионах вызовов набегает ощутимая сумма.
  • Небольшие модели. Крошечная модель с правильным fine-tuning способна обойти большую модель с длинным промптом на узкой повторяющейся задаче.

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

Они не соперники. Серьёзные продукты часто используют оба подхода: fine-tuning для тона и формата, RAG для фактов.

Сначала — RAG

Когда кто-то говорит: «нам нужно дообучить модель на наших документах», правильный первый шаг почти всегда — вместо этого собрать небольшой RAG-пайплайн. Это работа на выходные, он обновляется и показывает свои источники. Попробуйте его, прежде чем хвататься за GPU.

Проверьте себя

В аналогии с экзаменом: чему соответствует RAG?

В момент ответа модель может опираться на…

В чём главная идея RAG?

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

Ваша компания вчера обновила политику возврата. Что делать?

Для чего на самом деле стоит делать fine-tuning?