Що таке RAG? Retrieval-Augmented Generation простими словами
RAG (retrieval-augmented generation) — це спосіб змусити модель ШІ відповідати на запитання, використовуючи вашу власну інформацію. Коли хтось ставить запитання, ваш застосунок спершу шукає у ваших документах найрелевантніші фрагменти, а потім передає ці фрагменти моделі разом із запитанням. Модель формує відповідь на основі цього тексту, а не лише на тому, чого випадково навчилася під час навчання.
Чому RAG важливий, коли ви створюєте щось за допомогою ШІ
Велика мовна модель знає багато про світ загалом, але нічого про ваш бізнес: ваші ціни, правила, посібник із продукту, минулотижневі звернення в підтримку. До того ж у неї є межа навчання, тож вона не знає нічого свіжого. Якщо ви її все одно запитаєте, вона може впевнено видати правдоподібну, але хибну відповідь.
Є три загальні способи це виправити:
| Підхід | Що робить | Для чого підходить |
|---|---|---|
| Вставити все в промпт | Надсилати всі ваші документи з кожним запитанням | Невеликий обсяг тексту — кілька сторінок |
| RAG | Шукати у документах і надсилати лише релевантні частини | Великі або змінні колекції: довідкові центри, посібники, нотатки |
| Донавчання (fine-tuning) | Додатково навчати модель на прикладах | Тон, формат і повторювані завдання — не факти, що змінюються |
Сучасні моделі приймають довгі промпти, тож для короткого FAQ перший варіант часто підходить. RAG стає доцільним, коли тексту більше, ніж ви хочете надсилати щоразу, адже кожне слово, яке ви надсилаєте, коштує грошей і часу (див. як тарифікуються LLM API).
Якщо ви будуєте функцію «чат із нашими документами», асистента підтримки або внутрішній інструмент знань, майже напевно ви будуєте якусь форму RAG.
Аналогія з повсякденного життя
Уявіть іспит з відкритою книгою. Студент, який має відповідати з пам'яті, може щось переплутати або блефувати. Студент, якому дозволено спершу відкрити потрібні сторінки, прочитати їх і лише потім відповісти, набагато надійніший — якщо знайде правильні сторінки.
- Студент — це мовна модель.
- Підручник — ваші документи.
- Відкривання потрібних сторінок — це пошук (retrieval).
- Написання відповіді за цими сторінками — це генерація.
RAG — це варіант з відкритою книгою. І, як і на іспиті, якість відповіді сильно залежить від того, чи знайдено правильні сторінки.
Як працює RAG, крок за кроком
Типова RAG-схема має дві фази.
Підготовка документів (виконується заздалегідь):
- Зберіть вихідний матеріал: статті довідки, PDF, правила, дані про товари.
- Розбийте на частини (chunking): розділіть довгі документи на менші фрагменти, часто по кілька абзаців, щоб пошук міг повернути лише релевантну частину.
- Створіть ембеддинг для кожного фрагмента: надішліть його до моделі ембеддингів, яка перетворює текст на embedding — довгий список чисел, що відображає його зміст. Тексти про схожі речі матимуть схожі числа.
- Збережіть фрагменти та їхні ембеддинги в базі даних, яка вміє шукати за подібністю (часто її називають векторною базою даних або векторним індексом).
Відповідь на запитання (виконується щоразу):
- Створіть ембеддинг запитання тією самою моделлю ембеддингів.
- Знайдіть фрагменти, чиї ембеддинги найближчі до запитання, наприклад топ-5.
- Складіть промпт: інструкції, знайдені фрагменти і запитання.
- Згенеруйте: мовна модель пише відповідь на основі цих фрагментів, бажано вказуючи, які саме вона використала.
Пошук за змістом — це те, що робить цей підхід працездатним: запитання про «повернення грошей» може знайти фрагмент із назвою «Політика повернення», хоча в них немає спільних слів.
Приклад: довідковий асистент спортзалу
Скажімо, у спортзалі є 40 статей довідки і він хоче мати чат-асистента на сайті. Член клубу питає: «Чи можу я призупинити членство, поки я у відрядженні?»
Застосунок створює ембеддинг запитання і знаходить три найближчі фрагменти. Один із них звучить так:
Заморожування членства: Члени з місячними абонементами можуть заморозити
членство до 2 місяців на рік. Подайте запит на стійці або в застосунку
щонайменше за 7 днів до початку заморозки.
Промпт, який отримує модель, виглядає приблизно так:
Ти — довідковий асистент Northside Gym.
Відповідай лише на основі наведених джерел. Якщо відповіді в них немає,
скажи, що не знаєш, і запропонуй звернутися на стійку.
Зазначай, яке джерело використав.
[Джерело 1: Заморожування членства] Члени з місячними абонементами можуть заморозити...
[Джерело 2: Скасування членства] ...
[Джерело 3: Гостьові перепустки] ...
Запитання: Чи можу я призупинити членство, поки я у відрядженні?
А модель відповідає: «Так — на місячному абонементі можна заморозити членство до двох місяців на рік. Подайте запит на стійці або в застосунку щонайменше за 7 днів до початку (джерело: Заморожування членства).»
Спортзал нічого не перенавчав. Коли він змінює правила заморожування, він оновлює статтю, застосунок перестворює ембеддинг цього фрагмента, і наступна відповідь уже це враховує.
Ключові терміни
| Термін | Значення |
|---|---|
| LLM | Велика мовна модель — ШІ, який пише відповідь. Див. що таке LLM. |
| Ембеддинг (embedding) | Список чисел, що відображає зміст фрагмента тексту. |
| Модель ембеддингів | Модель, що створює ембеддинги. Зазвичай окрема від чат-моделі і значно дешевша. |
| Фрагмент (chunk) | Частина документа, розміром, за якого її можна знайти окремо. |
| Векторна база даних / векторний пошук | Сховище, що знаходить елементи з подібними ембеддингами. Деякі звичайні бази теж це вміють — наприклад, Postgres через розширення pgvector. |
| Top-k | Скільки фрагментів знаходиться на кожне запитання. |
| Гібридний пошук | Поєднання пошуку за змістом із звичайним пошуком за ключовими словами, що допомагає з точними термінами, як-от коди товарів. |
| Вікно контексту | Максимальний обсяг тексту, який модель може прийняти в одному запиті. |
| Опора на джерела / цитування | Прив'язка відповіді до конкретних знайдених джерел і їх показ. |
Поширені хибні уявлення
- «RAG навчає модель на моїх даних». Ні. Модель не змінюється; вона лише читає додатковий текст під час запитання.
- «RAG означає, що галюцинацій більше не буде». Це означає, що їх менше. Якщо пошук пропустив потрібний фрагмент або відповіді немає у ваших документах, модель все одно може вгадувати. Наказуйте їй казати «не знаю» і тестуйте на запитаннях, відповіді на які ви знаєте.
- «Потрібна спеціальна векторна база даних». Часто ні. Для помірних обсягів даних достатньо розширення для векторів у вашій існуючій базі або навіть звичайного пошуку за ключовими словами.
- «Чим більші фрагменти, тим краще». Занадто великі — ви надсилаєте багато нерелевантного тексту (більші витрати, більше плутанини); занадто малі — фрагмент втрачає контекст, що робив його змістовним. Доведеться налаштовувати.
- «Просто завантажте все». Застарілі, дубльовані або суперечливі документи дають суперечливі відповіді. Очищення вихідного матеріалу часто є найбільшим покращенням, яке ви можете зробити.
- «Будь-хто може побачити будь-який документ». Лише якщо ви так це побудували. Якщо деякі документи приватні для певних користувачів, сам пошук має фільтрувати за тим, хто питає, інакше асистент може процитувати дані одного клієнта іншому.
Скільки це коштує
Функція RAG зазвичай має три постійні витрати: створення ембеддингів для документів (невеликі і переважно разові), створення ембеддингів для кожного запитання (мізерні) і виклик мовної моделі (головна стаття витрат, яка зростає зі збільшенням кількості надісланих фрагментів). Плюс зберігання у вашій базі даних. Ваш провайдер ШІ виставляє ці рахунки на ваш власний обліковий запис, тож встановіть там ліміт витрат.
Що питати у вашого конструктора ШІ
- «Перш ніж будувати RAG, перевір: чи достатньо наш контент малий, щоб просто включити його в промпт?»
- «Розбий статті довідки на фрагменти по кілька абзаців, зберігай заголовок і посилання на джерело для кожного фрагмента і зберігай ембеддинги в нашій базі даних.»
- «Використовуй гібридний пошук — за змістом плюс за ключовими словами — щоб коди товарів теж знаходилися.»
- «Наказуй моделі відповідати лише на основі знайдених джерел, казати, коли вона не знає, і показувати джерела під кожною відповіддю.»
- «Шукай лише документи, які дозволено бачити користувачу, що ввійшов.»
- «Автоматично перестворюй ембеддинг документа щоразу, коли його редагують.»
- «Зберігай ключ провайдера ШІ на сервері в секреті, ніколи в браузері.»
- «Логуй кожне запитання, знайдені фрагменти і відповідь, щоб я міг переглядати погані відповіді.»
RAG у Mythex
Mythex не містить готового продукту бази знань або RAG. Він пише код для такої функції всередині вашого застосунку: ви приносите свої документи і власний ключ провайдера ШІ, який зберігається як секрет проєкту, а агент будує частини пошуку і чату, використовуючи для зберігання базу даних проєкту на Postgres. Використання провайдера оплачується з вашого облікового запису провайдера, а не кредитами Mythex. Документація радить почати з однієї простої функції ШІ і додати RAG, коли вона запрацює: див. створення застосунку з ШІ, а також наші посібники як створити застосунок-чатбот на ШІ і як додати функції ШІ до застосунку.
Запитання
Що таке RAG простими словами?
RAG (retrieval-augmented generation) — це спосіб змусити модель ШІ відповідати на основі вашої власної інформації. Перш ніж модель відповість, ваш застосунок шукає у ваших документах фрагменти, найбільш релевантні запитанню, і додає їх до промпту, тож відповідь базується на цьому тексті, а не лише на тому, чого модель навчилася під час навчання.
Чи навчає RAG ШІ на моїх даних?
Ні. RAG взагалі не змінює модель. Він шукає релевантний текст у момент запитання і передає його моделі разом із запитанням. Оновіть документ — і наступна відповідь може використати нову версію одразу.
Чи це те саме, що донавчання (fine-tuning)?
Ні. Донавчання змінює поведінку моделі, додатково навчаючи її на прикладах; це повільніше і краще підходить для стилю чи формату. RAG дає моделі факти для читання під час запитання, що краще для знань, які змінюються, або мають цитуватися точно.
Чи RAG усуває галюцинації ШІ?
Він їх зменшує, але не усуває повністю. Якщо пошук знаходить не ті фрагменти або відповіді немає у ваших документах, модель все одно може вгадувати. Добрі RAG-застосунки вказують моделі казати, коли вона не знає, і показують джерела, які використали.