Вибір і налаштування embedding-моделі для RAG

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

Чому вибір embedding-моделі для RAG визначає якість відповідей

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

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

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

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

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

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

Як ми підбираємо модель під конкретний корпус і як перевіряємо результат до переходу на неї — розбираємо далі.

Що дає правильно підібрана модель: вимірювані ефекти

Першу метрику — частку релевантних фрагментів — знімаємо на своєму наборі з 100–200 реальних звернень: чи потрапляє правильний фрагмент у перші п’ять результатів пошуку.

Модель, підібрана під мову й термінологію конкретної документації, піднімає цю частку приблизно з половини запитів до 85–95%.

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

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

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

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

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

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

Заміри «до» і «після» фіксуємо у звіті разом із методикою — їх можна повторити на нових даних і переконатися, що виграш не одноразовий.

Порівняння підходів: готова embedding-модель, донавчання, гібрид

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

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

Варіант Коли підходить Обмеження
Готова модель загального призначення Корпус до десятків тисяч фрагментів, термінологія близька до загальномовної, потрібен багатомовний корпус Не розрізняє внутрішні синоніми й коди; якість упирається в стелю домену
Донавчання на доменному корпусі Стійка термінологія, багато однотипних документів, є чим розмічати пари «запит — фрагмент» Потрібен очищений корпус і розмітка; відкат до попередньої версії — окрема процедура; багатомовний корпус легко втрачає другу мову
Гібридний пошук по документах Запити з артикулами, абревіатурами, точними формулюваннями Два індекси й підбір ваги злиття видачі — зростає обсяг перевірок і час підтримки

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

Якщо термінологія стійка й однотипна, окупається донавчання; на багатомовному корпусі воно потребує окремої перевірки, інакше друга мова просідає.

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

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

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

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

  1. Аудит корпусу документів. Рахуємо обсяг, формати, частку сканів і таблиць, дублі, застарілі редакції. На виході — карта джерел і правила розбиття тексту на фрагменти.
  2. Розмітка перевірних питань для оцінки пошуку. 50–100 реальних питань співробітників з еталонною відповіддю та посиланням на документ-джерело. Набір далі не змінюється — інакше заміри непорівнянні.
  3. Порівняння моделей на своєму корпусі. Проганяємо кандидатів на одному наборі й дивимося частку потраплянь потрібного джерела в першу п’ятірку, окремо — якість на коротких і неточних запитах.
  4. Налаштування індексації. Розмір фрагмента й перекриття, метадані (версія, підрозділ, термін дії), поєднання векторного й точного пошуку, розклад переіндексації під час оновлення документів.
  5. Калібрування порогу «немає відповіді». Підбираємо, за якої близькості система відповідає, а за якої чесно повідомляє, що даних немає. Це прибирає впевнені вигадки на прогалинах у корпусі.
  6. Приймання якості пошуку. Фіксуємо цільові метрики й проганяємо контрольний набір. Розбіжність — привід повернутися до розбиття або моделі, а не переписувати питання.
  7. Передача в експлуатацію. Конфігурація, регламент переіндексації, контроль частки відмов, розмежування доступів і навчання команди замовника.

Артефакти передачі: схеми індексації, регламенти, документація

Рішення з пошуком по корпусу й генерацією відповідей живе довше за сам проєкт впровадження: корпус зростає, embedding-модель оновлюється, вимоги до доступу змінюються.

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

  • Схема індексації корпусу: джерела, правила розбиття на фрагменти, розмір вікна й перекриття, склад метаданих (джерело, дата, рівень доступу) поруч із вектором.
  • Обґрунтування вибору embedding-моделі: які варіанти порівнювали на контрольному наборі питань і за якими метриками — частка потраплянь потрібного джерела у верх видачі.
  • Регламент оновлення індексу: тригери переіндексації, інкрементальний добір проти повного перезбирання, час збирання, дії при збої.
  • Політики доступу до даних: перенесення прав з документа на фрагмент, фільтри при пошуку, що відбувається з векторами при відкликанні доступу.
  • План відкату: сумісність версій індексу й моделі, повернення попереднього збирання без втрати свіжих документів.
  • Інструкція для внутрішньої команди: де лежать конфігурації, як додати джерело, як запустити переіндексацію, які перевірки обов’язкові перед викатом.
  • Схема шляху запиту: нормалізація питання, пошук, фільтрація, переранжування, звернення до мовної моделі — із зазначенням місця кожного кроку.

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

Кейс: перевели пошук по базі знань на нову модель

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

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

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

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

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

Що змінили в контурі пошуку

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

Метрика До Після
Правильних відповідей без ручної звірки 61% 92%
Час пошуку по базі знань 4–6 с менше 1 с
Оновлення документа в індексі ~40 хв ~3 хв

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

Що робити, якщо векторний індекс уже зібрано на іншому рішенні

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

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

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

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

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

Технічні сумніви: обсяг корпусу, мови, оновлення даних

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

Чи вистачить індексу на весь корпус і як різати документи?

Обмежувач — не обсяг, а розмір фрагмента: великий розмиває сенс, дрібний втрачає контекст. Тримаємо 1-2 абзаци з перекриттям і перевіряємо запас на пілотній вибірці.

Документи кількома мовами — один індекс чи кілька?

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

Що робити з таблицями й сканами?

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

Як часто переіндексувати корпус?

Оновлюємо приростами за датою зміни, повний перерахунок — лише при зміні моделі або схеми розбиття. Сховище на pgvector оновлює частину колекції, не перебудовуючи решту.

Як переконатися, що пошук знаходить потрібне?

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

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

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

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

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

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

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

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

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

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