Усі уроки · 44
Що таке RAG
Генерація, доповнена пошуком (RAG): дайте моделі ваші дані в момент відповіді, замість того щоб сподіватися, що вона їх запам’ятала. Чому виникають галюцинації, де RAG застосовують на практиці й чим він відрізняється від fine-tuning.
Два види іспиту
Уявіть два іспити.
На закритому іспиті ви приходите лише з тим, що вивчили. Якщо спитають про те, чого ви не вчили, варіантів два: залишити відповідь порожньою або написати щось правдоподібне й понадіятися на вдачу. Мовні моделі влаштовано так, що порожніх відповідей вони не лишають, — тож пишуть щось правдоподібне. Це і є галюцинація: упевнена відповідь, що звучить бездоганно й при цьому просто вигадана.
На відкритому іспиті ви приходите з підручником. Щоб відповісти на запитання про правила повернення, досить знайти потрібну сторінку й прочитати її. Іспит не став простішим через те, що ви порозумнішали. Він став простішим, бо потрібна інформація опинилася під рукою.
RAG — генерація, доповнена пошуком (retrieval-augmented generation) — це і є відкритий іспит. Перш ніж модель відповість, ваш код дістає потрібні сторінки й кладе їх перед нею на стіл. Тепер модель відповідає, читаючи ці сторінки.
Ось і вся ідея. Решта уроку уточнює кожну з двох половин: що таке пошук і чому модель не може просто знати ваші дані.
Що таке «пошук»
Пошук — це те, чим програми займалися завжди: за запитанням знайти фрагменти, у яких, імовірно, є відповідь. Шукає він у ваших власних документах: повертає текст і нічого не «розуміє».
Він бере ваше запитання й повертає кілька фрагментів:
Запитання: «Який у нас термін повернення для річних тарифів?»
Знайдений фрагмент: «Річні тарифи можна повернути повністю протягом 14 днів від моменту купівлі. Після 14 днів ми нараховуємо на баланс залишок пропорційно невикористаному терміну».
Цей фрагмент лежить у файлі refunds.md у вікі вашої компанії. Модель його ніколи
не бачила. Пошук його знайшов, і ми вставляємо його в промпт, щоб модель прочитала
його перед відповіддю.
Три слова, на яких тримається все інше:
- Контекстне вікно — робоча пам’ять моделі на час однієї розмови. Усе, що ви вставляєте, і все, що вона пише у відповідь, має в ньому вміститися.
- Доповнена — до промпту додали знайдені фрагменти.
- Генерація — модель пише відповідь.
Отже, генерація, доповнена пошуком — це просто: знайти, вставити, потім написати.
Чому модель не може просто знати ваші дані
Тут багато хто спотикається: модель нічого не може подивитися. У неї немає ні бази даних, до якої можна звернутися, ні підключення до інтернету під час виклику, ні сховища з вашими файлами. Вона отримує один блок тексту й передбачає, що йде далі. Ось і весь механізм.
Тому все, що вона може «знати» в момент відповіді, береться рівно з двох місць:
- Її ваги — закономірності, стиснуті в ній під час навчання. Вони заморожені того дня, коли навчання закінчилося. Змінити в них один факт неможливо — довелося б навчати модель заново.
- Контекстне вікно — текст, який ви надіслали разом із цим запитом. Лише цю половину ви можете контролювати.
Ваших даних за замовчуванням немає ні там, ні там — із двох різних причин:
- Дата відсічення. Навчання закінчилося якогось дня. Про зміну цін минулого тижня, про сьогоднішній збій і про політику повернення, яку ви переписали вчора, модель нічого не чула.
- У навчальних даних їх не було взагалі. Ваші документи, звернення, договори та внутрішня вікі закриті. Ніхто в OpenAI не читав вікі вашої компанії, тож у вагах нічого пригадувати — хоч як вдало ви сформулюєте запитання.
Звідси й упевнена нісенітниця замість мовчання. Сховища фактів, у яке можна зазирнути й повернутися ні з чим, у моделі немає: вона завжди передбачає наступне слово. Якщо дати їй «Наш термін повернення для річних тарифів — ___», найімовірніше продовження — число й правдоподібна фраза, бо саме так такі фрази виглядають в інтернеті. Прогалину вона заповнює тому, що заповнювати прогалини — єдине, чим вона займається.
Раніше лишалося сподіватися: «може, вона запам’ятала достатньо». RAG замінює надію механізмом: покладіть факт у промпт — і вгадувати буде нічого.
Побачити різницю
Ось те саме запитання на закритому іспиті — модель без доступу до ваших даних — і потім з RAG. Подивіться, що відбувається, коли ми даємо їй щось прочитати:
Перша відповідь звучить упевнено й хибна — таке поєднання називається галюцинацією. Злого наміру тут немає: модель добудовує звичні шаблони за типовими інтернет-текстами, бо більше в неї нічого немає. Друга відповідь посилається на вашу політику повернення, бо вона лежала просто в промпті.
Упевнено й хибно — найгірше поєднання
Галюцинацію, написану із застереженнями, помітять під час перевірки. Упевнена й добре написана галюцинація дійде до клієнтів. RAG б’є в корінь проблеми: модель перестає гадати, бо факти лежать перед її очима.
Чому б не вставити все в промпт?
Це запитання ставить кожен новачок, і воно слушне: якщо модель розумна, чому б не віддати їй одразу всю вікі й не покінчити з цим?
Три причини — за ступенем шкоди:
- Воно не вміщається. Контекстне вікно — жорсткий бюджет. 200 тисяч токенів здаються величезною цифрою, доки не порахуєте: вікі компанії пристойного розміру — це мільйони токенів. Вставити все фізично неможливо.
- Це повільно й дорого. Кожен надісланий токен коштує грошей і додає затримку — і так на кожне запитання. Платити за перечитування 500 сторінок заради відповіді на «який термін повернення?» — невигідна угода.
- Відповіді стають гіршими. Якщо закопати єдиний потрібний абзац у 500 сторінок, модель відволікається: відповідає ухильно, плутає дві політики або впевнено бере відповідь не з того розділу. Точність зростає не від більшого контексту, а від правильного.
RAG і є цим фільтром. Крок пошуку знаходить кілька абзаців, які стосуються запитання, і в промпт потрапляють лише вони. Ви отримуєте знання мільйона документів за ціною кількох тисяч токенів.
Чому без нього виникають галюцинації
До вигадування модель підштовхують три сили:
- Немає доступу. Факту просто немає ні в навчальних даних, ні в промпті. Єдиний хід моделі — усе одно видати текст, що звучить правдоподібно.
- Вимога відповісти. «Дай відповідь на запитання» — сильна інструкція. Модель, яка завжди відповідає «не знаю», — поганий помічник, тому за сумніву вона все-таки відповідає.
- Гладкість. LLM навчено видавати гладкий текст, а гладкий текст про політику повернення виглядає однаково, справжні в ньому факти чи вигадані.
З RAG модель лишається такою самою, але ситуація змінюється: замість пригадувати, вона цитує. А читати LLM уміють добре.
Спробуйте RAG вручну просто зараз
Щоб відчути різницю, база даних не потрібна. Скопіюйте промпт нижче в ChatGPT
і вставте будь-який документ, який у вас є (договір, інструкцію, довгий лист),
туди, де написано DOCUMENT. Поставте запитання, відповідь на яке ви вже знаєте.
Потім поставте те саме запитання в новому чаті без документа й порівняйте:
Ось документ:
---
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?