RAG-системы: практическое руководство по внедрению
Как устроен retrieval-augmented generation: чанкование, эмбеддинги, векторный поиск, reranking и оценка качества ответов на русскоязычных данных.
RAG (retrieval-augmented generation) — способ дать языковой модели доступ к вашим данным без дообучения. Модель не «запоминает» документы: перед каждым ответом система находит подходящие фрагменты и передаёт их в запрос как контекст. Это дешевле дообучения, обновляется мгновенно и позволяет показывать источники ответа.
Когда RAG уместен, а когда нет
- Уместен: база знаний компании, поиск по документации, поддержка первой линии, ответы по регламентам и договорам.
- Уместен: данные часто меняются — достаточно переиндексировать документы.
- Не уместен: задачи, где нужен свой стиль или формат ответа — это решается промптом или дообучением.
- Не уместен: точные расчёты и агрегаты по таблицам — там нужен SQL, а не поиск по тексту.
Архитектура: две независимые части
Индексация выполняется офлайн: документы разбиваются на фрагменты, для каждого считается эмбеддинг, векторы складываются в хранилище вместе с метаданными. Ответ на вопрос выполняется онлайн: запрос превращается в вектор, находятся ближайшие фрагменты, они переранжируются и передаются модели вместе с инструкцией отвечать только по контексту.
- Индексация: загрузка → очистка → чанкование → эмбеддинги → векторное хранилище.
- Ответ: вопрос → поиск top-k → reranking → сборка промпта → генерация → ссылки на источники.
Чанкование решает больше, чем выбор модели
Самая частая причина плохих ответов — неудачное разбиение. Слишком мелкие фрагменты теряют контекст, слишком крупные размывают смысл и забивают окно модели. На практике хорошо работают фрагменты по 500–1000 токенов с перекрытием 10–15% и обязательным сохранением заголовка раздела в тексте фрагмента.
- Разбивайте по структуре документа (разделы, пункты), а не по фиксированному числу символов.
- Храните метаданные: документ, раздел, дата, версия — они нужны и для фильтрации, и для ссылок.
- Таблицы выносите отдельно и сопровождайте текстовым описанием.
Русский язык: отдельная проверка
Не все популярные модели эмбеддингов одинаково работают с русским. Перед выбором соберите небольшой набор из 30–50 реальных вопросов с эталонными ответами и сравните модели на нём. Это занимает день и экономит недели догадок.
Гибридный поиск и reranking
Чистый векторный поиск плохо справляется с точными терминами, артикулами и номерами документов. Гибрид векторного и полнотекстового поиска решает это. Следующий шаг — reranking: модель-переранжировщик оценивает 20–50 найденных фрагментов и оставляет 3–5 действительно релевантных. На моей практике reranking даёт самый заметный прирост качества после исправления чанкования.
| Симптом | Причина | Решение |
|---|---|---|
| Ответ не по теме | Слишком мелкие фрагменты | Увеличить чанки, добавить перекрытие и заголовки |
| Не находит по артикулу | Только векторный поиск | Гибридный поиск с полнотекстовым индексом |
| Много «воды» в ответе | Передаётся 10+ фрагментов | Reranking и жёсткий лимит контекста |
| Выдумывает факты | Нет инструкции и источников | Требовать ответ только по контексту и «не знаю» по умолчанию |
Как измерять качество
Без метрик улучшение RAG превращается в спор о вкусах. Минимальный набор: доля вопросов, где нужный фрагмент попал в выдачу, доля ответов, полностью подтверждённых источниками, и доля корректных отказов на вопросы вне базы. Замеряйте их на фиксированном наборе вопросов после каждого изменения.
Хороший RAG чаще отличается от плохого не моделью, а дисциплиной: качеством данных, разбиением и честной оценкой.