Я створив 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
