RAG на практике: как сделать AI-чат по своим документам
Практическое руководство по RAG: архитектура, ошибки, минимальный стек. Без воды, с конкретными библиотеками и метриками.
RAG (Retrieval-Augmented Generation) — это не отдельная модель. Это паттерн: «найти релевантный фрагмент → дать его модели в контексте → получить ответ». В этой статье разберёмся, как сделать RAG, который реально работает.
Зачем RAG
Без RAG модель отвечает только из «памяти» — обучающих данных. Это значит:
- Не знает свежих событий.
- Не знает ваших внутренних документов.
- Галлюцинирует, если спросить что-то узкое.
С RAG вы подсовываете модели нужные фрагменты документов прямо в контекст, и она отвечает по ним.
Архитектура
[документы] → [chunking] → [embeddings] → [vector DB]
↓
[вопрос пользователя] → [embedding] → [search top-k]
↓
[ответ модели по фрагментам]
Главные ошибки
Ошибка 1: чанки слишком большие
500-1000 токенов — золотая середина. Меньше — теряете контекст. Больше — модель не уловит, какой именно кусок отвечает на вопрос.
Ошибка 2: одни embeddings для всего
text-embedding-3-small плохо работает с русским и специфическими доменами. Для русскоязычных документов лучше multilingual-e5-large.
Ошибка 3: не делать reranking
После top-k берёте первые N — и часто промахиваетесь. Прогоняйте топ-50 через cross-encoder — точность ответов вырастает на 15-20%.
Минимальный стек
Что ещё важно
- Метаданные. Храните рядом с чанком источник, дату, заголовок. Это сильно поможет при показе ответа.
- Гибридный поиск. Векторы + BM25 → reranking. Чисто векторный поиск часто не находит редких терминов.
- Цитаты. Всегда возвращайте пользователю ссылки на исходные документы.
Хороший RAG — это 80% инженерии и 20% модели. Не пытайтесь компенсировать слабое retrieval лучшей LLM.