Усі уроки · 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?