Я створив RAG-додаток, а потім запитав його, яка машина мені подобається. Він не знав.

Я розробляю інструмент для чату з документами під назвою Kenning. Він використовує RAG (Retrieval-Augmented Generation), щоб дозволити користувачам ставити запитання щодо завантажених файлів.

Я побудував увесь конвеєр (pipeline) з нуля, використовуючи:

  • Java 21 та Spring Boot
  • Spring AI
  • PostgreSQL з pgvector
  • Ollama (запускає llama3.2:3b та nomic-embed-text)
  • Docker Compose

Конвеєр працює так: Завантаження файлу → Вилучення тексту → Розбиття тексту на фрагменти (chunks) → Перетворення фрагментів у вектори → Зберігання в pgvector → Пошук схожих фрагментів → Надсилання фрагментів + запитання моделі → Отримання відповіді з джерелами.

Система працювала, але я зіткнувся з двома різними збоями. Вони виглядали однаково, але причини були різними.

Збій 1: Модель була розгублена.

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

Моя теорія: модель на 3B занадто мала. Вона витягла правильні дані, але не змогла дати впевнену відповідь. Більша модель, ймовірно, вирішила б цю проблему.

Збій 2: Модель нічого не знайшла.

Я запитав: "Який бренд автомобілів мені подобається?" У документі згадувалося, що мені подобається BMW. Але система повернула нуль результатів. Показник схожості був занадто низьким, щоб подолати мій поріг.

Моя теорія: розмиття фрагментів (chunk dilution). Мій тестовий документ був коротким. Він змішував багато тем, таких як Spring AI, OAuth2 та мої вподобання щодо авто, в один фрагмент. Вектор цього фрагмента став розмитим через усі ці теми. Специфічне запитання про автомобілі втратило свою силу на фоні широкого фрагмента. Краща стратегія розбиття на фрагменти вирішила б це.

Висновки:

  • Малі моделі мають обмеження в логічному мисленні.
  • Наївне розбиття на фрагменти впливає на точність пошуку.
  • Відладка причини ("чому") важливіша, ніж просто виправлення помилки.

Архітектура тримається. Вона повільна і іноді помиляється, але цикл завершено.

Джерело: https://dev.to/mido-dev/i-built-a-rag-app-then-asked-it-what-car-i-like-it-didnt-know-583n

Додаткова спільнота для навчання: https://t.me/GyaanSetuAi