Зміст
Коротко
Підняти локальну модель через Ollama зараз просто. Зібрати навколо неї повний контур RAG — завантаження PDF, нарізка, ембединги, пошук, чат із потоком відповіді — досі набір розрізнених шматків.
Автор допису на Dev.to виклав VaultRAG: готовий стартовий набір під Docker Compose. У стеку Ollama, FastAPI, LangChain і React. Документи не йдуть у хмарний API: усе крутиться на вашій машині або у вашій мережі.
Слово «корпоративний» тут про продажі не каже. Це чесний стартовий каркас, щоб не склеювати сервіси з нуля, коли клієнт прямо каже: PDF у OpenAI не надсилаємо.
Що сталося
Мотив знайомий: експерименти з локальними LLM ідуть легко, а «продукт, яким можуть користуватися люди без досвіду адміністрування» збирається з бекенду, фронту, векторного сховища й оркестрації. Кожен шар сам по собі задокументований. Стиків зазвичай немає.
VaultRAG закриває типовий шлях. Користувач завантажує PDF. FastAPI приймає файл і віддає його в ланцюжок LangChain. Текст ріжеться через RecursiveCharacterTextSplitter. Ембединги рахує локальна модель в Ollama (у дописі фігурує nomic-embed-text). Вектори кладуться в локальне сховище. На запитання система піднімає близькі фрагменти й віддає відповідь потоком через SSE, не чекаючи «всього тексту одразу».
Для генерації автор згадує сімейства на кшталт Llama 3.1 і Qwen, теж через Ollama, без зовнішнього ключа. Клієнт на React із Tailwind — це звичайний чат поверх цього контуру. Увесь контур піднімається через Docker Compose: один каталог, один compose up, замість ручної склейки портів і змінних середовища.
Код: репозиторій стартового набору на GitHub.
Два місця, де автор реально вперся. Спочатку мережа Docker: контейнер FastAPI має бачити Ollama за іменем сервісу, а не через localhost з хоста. Потім розмір і перекриття фрагментів: занадто дрібні шматки гублять контекст, занадто великі сповільнюють вивід моделі й роздувають індекс.
Чому це важливо
Багато пілотів RAG гинуть не на якості відповіді, а на політиці даних. Юристи, медицина, внутрішні регламенти: прохання «надішліть корпус у хмару» уже стоп. Локальний стек знімає цей стоп, але лише якщо його можна відтворити без тижневої збірки.
Готовий Compose-контур корисний як еталон стиків, а не як фінальна архітектура. Він показує, де живе завантаження, де нарізка, де ембединги і де потік відповіді. Який індекс у проді, як версіонувати документи й як міряти якість — уже інша глибина, ближче до промислової інженерії RAG.
Уявіть кухню, де не можна віддавати продукти на сторону: усі ножі й плити мають стояти в тому ж приміщенні. VaultRAG тут як зібраний кухонний кут, не ресторан: можна готувати, не купуючи кожен прилад окремо.
На практиці
Має сенс дивитися на набір, якщо ви вже знаєте, навіщо вам офлайн, і не хочете тиждень витрачати на склейку.
- Підніміть Compose і перевірте, що
FastAPIходить вOllamaза іменем сервісу з мережі Docker, а не на127.0.0.1хоста. - Завантажте один знайомий PDF і поставте запитання, відповіді на які ви знаєте напам’ять — так швидше видно, що індекс «живий».
- Покрутіть
chunk_sizeіchunk_overlapуRecursiveCharacterTextSplitter: почніть з помірних значень і дивіться, чи не рвуться абзаци посеред думки. - Змініть модель генерації (
Llama 3.1,Qwenтощо) і ембединги (nomic-embed-text) під залізо: слабкий ноутбук і сервер із GPU — різні бюджети. - Перевірте потік
SSEв інтерфейсі: обрив з’єднання й повторний запит мають поводитися передбачувано. - Не плутайте стартовий каркас із продакшеном: права доступу, версії документів, оцінка якості й спостережуваність сюди майже напевно не входять — їх додають зверху.
Підсумок
VaultRAG відповідає на питання «як швидко підняти приватний RAG без хмари»: PDF → нарізка → локальні ембединги → пошук → потік відповіді, усе в Docker Compose.
Цінність у зібраних стиках Ollama ↔ FastAPI ↔ React і в двох відомих граблях: мережа контейнерів і розмір фрагментів. Маркетингове «корпоративний» тут ні до чого.
Якщо клієнт забороняє винесення документів, такий стартовий набір економить час на склейці. Далі вже інженерія: міряти, версіонувати й не приймати демо за готову систему.



Коментарі