Розробка RAG з OpenSearch: векторний пошук і гібрид

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

RAG OpenSearch: чому пошук у базі знань видає не те

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

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

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

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

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

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

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

Що дає керований шар пошуку над базою знань

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

Тому точність видачі стає вимірюваною величиною, якою можна керувати, а не удачею від формулювання питання.

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

На контрольній вибірці реальних питань частка релевантних відповідей піднімається з 55–60% до 85–90%.

Окремо закриваємо стійкість до формулювань: синоніми, одруки, інший порядок слів і питання «своїми словами» більше не вибивають пошук із колії.

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

Час відгуку пошуку тримаємо в межах часток секунди на етапі відбору кандидатів; основну затримку дає генерація відповіді, її обмежуємо окремо.

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

Режими пошуку в RAG OpenSearch: що вибрати

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

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

Режим Коли підходить Обмеження
Лексичний пошук Артикули, коди, абревіатури, точні терміни в запиті Не знаходить синонімів і перефразувань, повнота падає на розмовних питаннях
Векторний індекс Питання своїми словами, розмовні формулювання, різномовний корпус Слабо розрізняє числа й рідкісні позначення, переіндексація при зміні моделі ембедингів
Гібридний пошук Змішані запити, де є і сенс, і точний термін Потрібна підібрана вага при злитті: при перекосі втрачається одна з сильних сторін
Гібрид і переранжування результатів Високі вимоги до точності перших трьох-п'яти фрагментів, корпус обмежений Додає час на кожен запит, потребує окремої моделі та ресурсів під неї

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

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

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

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

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

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

Як закривається кожен етап

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

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

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

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

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

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

Кейс: база знань підтримки, метрики до і після

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

Метрики знімали на одній і тій самій вибірці: 200 реальних звернень з еталонними статтями. Перевірка на контрольних питаннях дала базу: потрібний документ у перших трьох результатах — 41%, ескалація на другу лінію — 38%, середній час до відповіді — близько 9 хвилин.

Що змінили

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

Що стало

Той самий набір контрольних питань прогнали повторно: потрапляння в перші три — 87%, ескалації — 14%, час до відповіді — 2,5 хвилини.

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

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

Чим гібридний пошук відрізняється від чистого векторного

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

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

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

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

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

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

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

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

Часті технічні сумніви перед стартом

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

Наскільки гібридний пошук збільшить затримку відповіді?

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

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

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

Як відсікти дублі документів і повторювані фрагменти?

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

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

Чи потрібна повна переіндексація при кожному оновленні корпусу?

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

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

Чи можна замінити модель, не переробляючи пошук?

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

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

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

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

  • Корпус документів або вивантаження: формати (PDF, DOCX, таблиці, база знань), обсяг, мови, частка сканів — від цього залежить розбиття на фрагменти й розпізнавання.
  • 50–100 справжніх запитів користувачів у живому формулюванні та очікувані відповіді хоча б на частину — на них вимірюємо якість до початку робіт.
  • Розмітка релевантності, якщо велася: які документи вважаються правильним потраплянням. Без неї зберемо метрики на узгодженій вибірці.
  • Правила доступу: хто які документи має право бачити, чи є поділ за відділами. Права вбудовуємо в сам запит, інакше з'явиться витік у видачі.
  • Як пошук влаштований зараз і на що скаржаться користувачі: запити без відповіді, нерелевантна видача, загублені документи.
  • Контур і обмеження: де розгортаємо сервіс, чи допустима передача даних у зовнішні моделі, чи потрібна робота всередині периметра.
  • Навантаження й оновлення: скільки запитів на добу, пікові періоди, прийнятний час відповіді, як часто змінюється корпус.

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

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

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

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