Оцінювання якості RAG-системи (RAGAS, precision, recall, faithfulness)

Відповіді системи на основі RAG можуть звучати впевнено, але при цьому спиратися на застарілі або нерелевантні фрагменти. Ми налаштовуємо регулярне оцінювання якості: вимірюємо точність пошуку та достовірність генерації, задаємо пороги й автоматизуємо перевірки. Це скорочує частку помилкових відповідей і прискорює випуск змін — роботи виконуємо під ключ.
Часті запитання

Чому оцінювання RAG ламається на реальних даних

На демонстраційному наборі з двадцяти питань асистент відповідає без помилок, а через тиждень роботи співробітники перестають ним користуватися.

Причина не в моделі, а в тому, що реальний трафік влаштований інакше: запити короткі та з помилками, формулювання не збігаються з текстом регламентів, частина питань потребує даних із двох документів одразу.

Перший шар, де втрачається якість, — пошук у базі знань.

Потрібний фрагмент або не потрапляє до топу видачі, або надходить разом із шумом: розбиття документа не збігається зі змістовими блоками, метадані не працюють як фільтр, а схожі формулювання з різних редакцій одного документа конкурують між собою.

Тут рахуємо повноту пошуку та точність — яку частку релевантних фрагментів система дістає і скільки зайвого тягне в контекст.

Другий шар — генерація. Навіть за правильного контексту асистент дописує «загальновідоме», склеює два фрагменти в один і підміняє числа або строки.

Відповідь звучить упевнено, але розходиться з базою знань, і на цьому ламається довіра: неперевірювана відповідь гірша за відсутність відповіді.

Звідси третій шар — вірність джерелу: яку частку тверджень у відповіді можна підтвердити процитованим фрагментом. Ми розводимо метрики за шарами — каркас беремо з відкритого RAGAS — і бачимо, де саме просідає якість відповідей асистента. Розбираємо, як це закривається на кожному шарі.

Що змінюється після впровадження регулярних перевірок

Регулярний прогін на замороженому наборі питань переводить якість відповідей з відчуттів у метрику.

Ми фіксуємо еталонні пари «питання → очікувана відповідь і джерело» і після кожної правки промпту, моделі або пошукового індексу рахуємо faithfulness, precision і recall через RAGAS — результати порівнювані між релізами, а не «цього разу начебто відповідає краще». Що змінюється за пунктами:

  • Частка відмов падає. Відповіді, у яких faithfulness нижчий за поріг або немає опори на піднятий фрагмент, відсікаються до викату: у прод іде версія, де частка недостовірних відповідей менша в рази, а не «приблизно як раніше».
  • Оновлення індексу виходять швидше. Пересборка й перевірка йдуть одним прогоном, тому правка в базі знань займає години замість днів ручного перегляду десятків діалогів.
  • Регресії видно на порозі релізу. Порівняння з попереднім прогоном показує, які групи питань просіли після зміни моделі або розбиття документів на фрагменти.
  • Спірні відповіді випливають до випуску. Список питань із низьким recall показує діри в базі знань — їх закривають контентом, а не черговою правкою промпту.
  • Розбір став предметним. Для будь-якої відповіді є трасування: які фрагменти піднято, що потрапило в контекст, на якому кроці загубився потрібний факт.

Підсумок: контроль якості відповідей перестає бути разовою прийманкою і стає частиною релізного циклу — з порогами, історією метрик і спільним для команди критерієм того, що вважати погіршенням.

Способи перевірки: від ручної розмітки до автотестів

Перевіряти якість RAG-системи можна трьома шляхами, і на практиці їх не обирають «або-або» — вони закривають різні класи помилок.

Ручна розмітка дає еталон: експерт проходить набір тестів із питань із відомими правильними фрагментами й відзначає, чи відповідь спирається на джерело і чи не втрачено потрібний абзац.

Синтетичний набір збирається з корпусу документів і масштабується до сотень кейсів, але відтворює формулювання самих документів, а не живе мовлення користувача.

Автоматичні прогони рахують метрики без людини: частку відповідей, підкріплених джерелом, потрапляння потрібного фрагмента у видачу, повноту щодо еталона.

Варіант Коли підходить Обмеження
Ручна розмітка Старт проєкту, спірні та рідкісні питання, налаштування порогу якості Дорого за часом експерта, погано масштабується, суб’єктивна між розмітниками
Синтетичний набір тестів Швидке охоплення сотень питань, перевірка повноти індексації Успадковує формулювання документів, не ловить розмовні перефразування та помилки
Автоматичні прогони метрик Регулярна перевірка на кожній зміні індексу або підказки Метрика не розуміє сенс: правильна відповідь з іншим формулюванням вважається промахом

Робоча схема — комбінована: еталон із ручної розмітки (зазвичай сто-двісті питань, включно з рідкісними сценаріями), синтетика для обсягу й автоматичний прогін на кожній зміні.

Відкриті набори метрик на кшталт RAGAS закривають базові вимірювання, але їхні показники звіряємо з ручними — розходження одразу показує, де метрика бреше, і тоді ваги переглядаються.

Набір тестів живе разом із системою: нові звернення користувачів перетворюються на питання еталона, тому регрес ловиться до випуску, а не після скарг.

Етапи впровадження контуру контролю якості

Контур контролю якості не з’являється разом із першою версією відповідей: його збирають поетапно, залишаючи на кожному кроці артефакт, який переживе зміну моделі та переіндексацію корпусу.

Нижче — порядок робіт від інвентаризації даних до регламенту, за яким прогони запускаються вже без нашої участі.

  1. Аудит даних — перелік джерел, перевірка актуальності та дублів, розмітка тем: що корпус покриває щільно, а що збирається з кількох фрагментів.
  2. Еталонні питання — простий факт, зведення за кількома документами, питання без відповіді в корпусі. До кожного — очікувані фрагменти-джерела, а не лише правильне формулювання.
  3. Метрики та опорний замір — точність пошуку, повнота видачі, вірність відповіді опорним фрагментам. Перший прогін дає точку відліку для всіх наступних правок.
  4. Пороги приймання — окремо за кожною метрикою: що достатньо для випуску, а що блокує реліз. Плавність формулювань не повинна маскувати провал за повнотою.
  5. Регресійні прогони — на зміні моделі, схеми розбиття або правці корпусу; розходження з опорним заміром розбираємо до випуску, а не після скарг.
  6. Розбір помилок — класифікація провалів: фрагмент не знайдено, знайдено застарілий, відповідь зібрано не за джерелами. За часткою груп видно, що правити — пошук чи корпус.
  7. Передача регламенту — набір питань, пороги та порядок прогонів переходять вашій команді документом, який вона запускає сама.

Регламент описує, що проганяти після кожної правки корпусу і як тлумачити розходження, — якість перестає залежати від того, хто сьогодні чергує на релізі. У міру появи нових сценаріїв набір еталонних питань розширюється.

Що передаємо: набори тестів, пороги, регламенти

Разом із працюючою системою замовник отримує комплект, за яким якість відповідей можна вимірювати й після передачі — без нас і без нашої інфраструктури. Прогін запускається на вашій стороні, на зафіксованому індексі, і дає порівнювані результати від релізу до релізу.

  • Набір тестів — питання, зібрані з реальних звернень, розмічені за типами: пошукові, уточнювальні, багатокрокові та явно без відповіді в базі знань.
  • Еталонні відповіді — для кожного питання зафіксовано, що вважається правильним, і вказано фрагмент-джерело, яким ця відповідь підтверджується.
  • Звіт за метриками — точність і повнота пошуку, частка відповідей, підтверджених джерелом, і частка коректних відмов «даних у базі немає».
  • Зрізи за групами — метрики рахуються окремо за темами та типами запитів: середній бал за всією вибіркою приховує провал на вузькому, але важливому сегменті.
  • Правила приймання — порогові значення за кожною метрикою й умови, за яких реліз блокується, а не «доопрацьовується потім».
  • Конфігурація прогону — розмір фрагментів, схема розбиття документів, параметри пошуку й версія індексу: без цього два звіти не можна зіставити.
  • Регламент супроводу — порядок поповнення набору тестів після кожного розбору збою й правило, хто оновлює еталони при зміні бази знань.

Зміна моделі, переіндексація або розширення бази знань проганяються за лічені хвилини й одразу показують, що саме просіло — пошук чи генерація. Ви ухвалюєте рішення про викат за цифрами, а не за відчуттям від кількох ручних перевірок.

Кейс: оцінювання RAG на потоці звернень клієнтів

RAG-асистент на потоці клієнтських звернень відповідав швидко, але якість ніхто не вимірював: правки в промпт і в розбиття документів вносили за відчуттями.

Відповіді виглядали переконливо, а спиралися не на ті фрагменти — розходження помічали за скаргами операторів, і розбір одного випадку займав дні.

Що було

Перевіряли на десятку зручних питань, де система відповідала добре: реальні формулювання з помилками, змішаною термінологією та уточненнями в довгому діалозі у вибірку не потрапляли. Метрик точності не існувало — лише суб’єктивне «стало краще».

Через це правку не можна було ні прийняти обґрунтовано, ні відкотити: незрозуміло, що саме покращилося і чи не зламалося щось на сусідніх сценаріях.

Що стало

Зібрали набір із живих звернень з еталонними фрагментами й відповідями та підключили регулярні прогони на RAGAS: вірність відповіді джерелу, точність потрапляння в контекст, повнота знайдених фрагментів.

Тепер кожна зміна пошуку або промпту проходить прогін до викату, а спірні випадки інженери розбирають вручну.

Точність потрапляння в контекст зросла з 0,61 до 0,87, вірність відповіді — з 0,72 до 0,94, повнота вибірки — з 0,58 до 0,83. Частка відповідей, побудованих на нерелевантному фрагменті, знизилася приблизно втричі — пішли невірні поради та повторні звернення за тією ж темою.

Зміни перестали бути лотереєю: погіршення видно на прогоні до викату, а не у відгуках через тиждень, і розбір якості займає години замість днів.

Чим відрізняється перевірка пошуку від перевірки генерації

Збій у RAG-системі виглядає однаково: користувач отримує впевнену, але неправильну відповідь. Причина при цьому може лежати в двох різних місцях — на етапі пошуку або на етапі генерації, і метрики в цих контурів різні.

Перевірка пошуку відповідає на питання, чи потрапив потрібний фрагмент у контекст узагалі.

Тут рахують повноту контексту — частку питань, для яких релевантний шматок опинився у верхніх результатах видачі, точність видачі — яку частину цього набору займають справді корисні фрагменти, і позицію першого збігу: якщо потрібний абзац лежить сьомим, генератор до нього дотягнеться не завжди.

Перевірка генерації працює з готовою відповіддю та з тим контекстом, який їй передали. Головна метрика — вірність контексту: кожне твердження у відповіді має спиратися на передані фрагменти, а не на пам’ять моделі.

Поруч рахують повноту відповіді щодо питання й частку чесних відмов «у контексті цього немає» — таке «не знаю» краще за правдоподібну вигадку.

Окремі метрики потрібні тому, що ці контури лагодяться по-різному. Низька повнота контексту лікується розбивкою на фрагменти, пошуком за змістом і за словами, переранжуванням, фільтрами за метаданими.

Якщо контекст на місці, а відповідь із ним розходиться — правимо промпт і схему відповіді, вимагаємо посилань на джерела та перевіряємо твердження після генерації.

Загальний бал без розділення не дає інженеру нічого: падіння на десяток відсотків однаково виглядає і при зламаному індексі, і при невдалій правці промпту. Ми рахуємо обидва контури на одному наборі питань із розміченими фрагментами, тому видно, який шар просіл і що з ним робити.

Часті технічні питання та обмеження

Перед стартом фіксуємо межі заміру: метрики на кшталт faithfulness, precision і recall описують поведінку системи на підготовленому наборі питань, а не її якість загалом.

Тому до цифр завжди додаємо розбір помилок — інакше зростання faithfulness маскує відповіді, які формально спираються на контекст, але не розв’язують задачу користувача.

Як боретеся з шумом у розмітці?

Еталонний набір розмічають двоє незалежно, розходження йдуть в арбітраж третім спеціалістом. Частку незгод тримаємо нижче 10%, спірні приклади доводимо до консенсусу: без цього precision і recall коливаються сильніше, ніж ефект від змін у самій системі.

Які обмеження в самих метрик?

Жодна метрика не ловить неповну відповідь: вона може бути правильною, але пропускати важливу частину контексту. Доповнюємо автозамір набором «хворих» питань і ручною перевіркою випадкової вибірки — так деградація видна там, де усереднений бал її приховує.

Як часто проганяти оцінювання і коли оновлювати набір?

Повний прогін — на кожен реліз пошукового індексу або зміну генеративної моделі, швидкий зріз метрик — на кожну зміну формулювань запитів до моделі.

Набір тестів переглядаємо при оновленні корпусу та появі нових сценаріїв: застарілі питання завищують оцінку, бо система відповідає на них за завченим, а не за документами.

Обговоримо задачу і повернемося з планом робіт

Щоб розбір був предметним, а не загальним, надішліть ввідні щодо поточного рішення. За ними видно, де вузьке місце — у якості генерації, в пошуку чи в розмітці еталонів — і що має сенс змінювати першим.

  • сценарій: які питання задають користувачі та яка відповідь вважається правильною;
  • 20–50 реальних запитів з еталонними відповідями та посиланням на фрагмент-джерело;
  • поточна конфігурація пошуку: як документи ріжуться на чанки, яка модель ембедингів, скільки фрагментів подається в контекст;
  • корпус документів або його обезличенний зріз — перевірки проганяємо на ваших даних, а не на демонстраційному наборі;
  • метрики, якщо вже рахуєте: precision, recall, faithfulness, частка відповідей без опори на контекст;
  • помічені збої: вигадані факти, застарілі фрагменти, втрата інформації із середини документа;
  • обмеження щодо даних: де можна розгортати контур, які зовнішні сервіси допустимі.

У відповідь повернемося з планом робіт: етапи, набір метрик із пороговими значеннями, схема регресійних прогонів на зафіксованому наборі питань і порядок старту.

Окремо зафіксуємо, які регламенти оцінювання передаємо вашій команді, щоб перевірки залишалися відтворюваними й без нас.

Опишіть задачу — повернемося з оцінкою та планом.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142