Почему RAG — это “вторая память” для LLM 🧩
У тебя есть: документация на 300 страниц, ТЗ на 40 страниц и файлик final_final_v7.pdf. Ты задаёшь вопрос нейросети, а она… начинает импровизировать, как стендапер на корпоративе.
RAG (Retrieval-Augmented Generation) решает это просто: сначала ищет нужные куски в твоих документах, потом формирует ответ на основе найденного. То есть нейросеть перестаёт “угадывать” и начинает “цитировать смысл”.
Коротко: RAG = поиск по твоим файлам + генерация ответа на основе найденного контекста. И всё это можно запустить локально, без облаков и утечек.
Как RAG работает под капотом ⚙️
Загружаем PDF/документы
Делаем chunking — режем текст на куски
Каждый кусок превращаем в вектор (эмбеддинг)
Храним вектора в векторной базе
На вопрос ищем похожие куски и отдаём их в LLM
Ты → Вопрос
RAG → Находит релевантные фрагменты в файлах
LLM → Формирует ответ на основе найденногоВажный момент: LLM “умная”, но не экстрасенс. Без поиска по документам она будет додумывать. RAG снижает галлюцинации, потому что подкладывает нейросети факты.
Что нужно для локального RAG?
Минимальный набор, чтобы всё реально завелось:
LLM локально: Ollama (или другой рантайм)
Embeddings-модель: например
nomic-embed-textVector DB: Chroma (простая), FAISS (быстрая), Qdrant (прод)
Загрузчики документов: PDF/DOCX/MD
Быстрый старт: RAG на Ollama + Chroma 🏃♂️💨
1) Скачиваем модели через Ollama
ollama pull llama3
ollama pull nomic-embed-text2) Ставим зависимости
pip install langchain chromadb pypdf ollama3) Грузим PDF и строим индекс
from langchain.document_loaders import PyPDFLoader
from langchain.vectorstores import Chroma
from langchain.embeddings import OllamaEmbeddings
loader = PyPDFLoader("file.pdf")
documents = loader.load()
embeddings = OllamaEmbeddings(model="nomic-embed-text")
db = Chroma.from_documents(documents, embeddings)4) Ищем релевантные фрагменты (retrieval)
query = "О чем этот документ?"
docs = db.similarity_search(query, k=4)
for i, d in enumerate(docs, 1):
print(f"\n--- chunk {i} ---\n")
print(d.page_content[:800])Дальше ты передаёшь найденные chunks в LLM в виде контекста — и получаешь ответ “по файлам”. Если хочешь, можешь оформить это как чат (CLI/Telegram/веб).
Полезность №1: как правильно резать текст (chunking) ✂️
70% качества RAG — это не “какая модель”, а как ты нарезал документ. Если нарезать плохо, нейросеть будет получать мусорный контекст.
Параметр | Рекомендация | Почему |
|---|---|---|
Размер chunk | 500–1200 символов (или 200–400 токенов) | Слишком мелко — теряется смысл, слишком крупно — падает точность |
Overlap | 10–20% | Чтобы важная мысль не порезалась на две половины |
Сохранение метаданных | страница, заголовок, раздел | Можно показывать источники и быстрее дебажить качество |
Лайфхак: если документ “документация”, режь по заголовкам/разделам (semantic chunking), а не просто по фиксированному размеру.
Полезность №2: как понять, что RAG работает хорошо (и где он врёт) 🧪
RAG можно “починить”, если ты умеешь его проверять. Мини-набор проверок:
Показывай источники: выводи страницу/раздел, откуда взят ответ
Логи retrieval: смотри топ-куски (
k=4,k=8) — они реально релевантны?Тесты вопросов: составь 20–30 вопросов и прогоняй после изменений
Отдельно проверяй “нет ответа в документах”: нейросеть должна уметь сказать “не найдено”
Анти-галлюцинация: добавь правило в промпт LLM: “Если в контексте нет ответа — скажи, что не нашёл”. Это иногда спасает сильнее, чем замена модели.

Типичные ошибки 💀
Пихают весь PDF одним куском → поиск ничего не находит нормально
Не делают overlap → важные куски “рвутся”
Не сохраняют метаданные → невозможно понять, откуда ответ
Слишком маленькая LLM → контекст есть, но “мозгов” собрать ответ нет
Думают, что embeddings = магия → нет, это просто представление смысла векторами.
Пока ты строишь RAG, легко упереться в “я понимаю идею, но руками пока не делал”. Вот тут помогает практика.
В приложении Кодик можно изучать программирование через задания и регулярную практику — без тонны воды. А в нашем Telegram-сообществе выходят полезные посты для разработчиков: мини-разборы, советы, короткие шпаргалки. Удобно повторять темы “по пути”, не открывая IDE.
RAG — это способ дать нейросети память. Причём память именно про твои файлы: PDF, документацию, заметки, ТЗ. И всё это можно поднять локально, чтобы данные не уходили в облако.
