PRO.03
RAG и собственная база знаний
РЕЗУЛЬТАТ УРОКА
Спроектировать retrieval-систему с источниками и оценкой качества.Главное за 30 секунд
RAG помогает модели отвечать на основе выбранных документов, но качество зависит от данных, поиска, инструкций и оценки ответов.
Разбираемся
RAG (Retrieval-Augmented Generation) — подход, при котором модель не опирается только на свои обучающие данные, а сначала ищет релевантные фрагменты из вашей базы документов и строит ответ на их основе. Это позволяет отвечать на вопросы о ваших внутренних данных, поддерживать актуальность без переобучения модели и ссылаться на конкретные источники.
1. Индексация — заранее, при изменении документов
2. Запрос — в реальном времени
Главное: качество ответа закладывается на индексации: нарезка, права в самом запросе и актуальность важнее промпта.
Индексация идёт заранее и повторяется при изменении документов. Запрос работает в реальном времени и укладывается в сотни миллисекунд, потому что векторы уже посчитаны.
Chunks и embeddings
Документы нарезаются на фрагменты (chunks) — обычно 200–500 слов с перекрытием. Каждый фрагмент преобразуется в числовой вектор (embedding), который кодирует смысловое содержание. Похожие по смыслу фрагменты имеют близкие векторы. Качество нарезки напрямую влияет на качество поиска: слишком мелкие фрагменты теряют контекст, слишком крупные — снижают точность.
Наивная нарезка против осмысленной
| Критерий | Нарезка по счётчику | Нарезка по структуре |
|---|---|---|
| Границы | Где закончился счётчик — иногда посреди слова | По заголовкам, абзацам, пунктам списка |
| Контекст фрагмента | «...с 1 марта 2026 года ставка составляет» — про что речь, неизвестно | В каждый чанк добавлен путь: «Тарифы → Корпоративный → Изменения» |
| Таблицы | Разрываются: строки в одном чанке, заголовки в другом | Таблица целиком или строки с продублированной шапкой |
| Что видит модель | Обрывок, который выглядит осмысленным | Самодостаточный фрагмент с явным источником |
| Типичный сбой | Уверенный ответ по фрагменту не из того раздела | Ответ со ссылкой, которую можно проверить |
Как выглядит фрагмент, который работает
Практическое правило нарезки: каждый фрагмент должен быть понятен человеку, который увидел только его. Фраза «с 1 марта ставка составляет 12%» этому не соответствует — непонятно, для кого ставка и к какому разделу относится. Тот же фрагмент с приписанным сверху путём «Тарифы → Корпоративный → Изменения 2026» становится самодостаточным. Второе правило — перекрытие: соседние фрагменты захватывают часть друг друга, чтобы мысль, попавшая на границу, не потерялась. Дублирование текста здесь дешевле потерянного ответа.
Retrieval и vector search
При поступлении вопроса он тоже преобразуется в вектор, и система ищет ближайшие по смыслу фрагменты в базе. Это быстрее и семантически точнее, чем полнотекстовый поиск по ключевым словам. Результат поиска — несколько релевантных фрагментов, которые передаются модели вместе с вопросом.
Права доступа: где именно ставится фильтр
В корпоративной системе разные люди должны видеть разные документы, и здесь есть развилка, которая определяет, будет утечка или нет. Правильный вариант: права учитываются в самом поисковом запросе — система ищет только среди доступных этому человеку документов, недоступные физически не попадают в результат. Неправильный: система ищет по всей базе, а потом отбрасывает лишнее в коде приложения. Во втором случае утечка уже произошла: закрытый текст побывал в памяти процесса, мог попасть в журналы, в отладочную информацию, в сообщение об ошибке. Разница в одну строку реализации и принципиальная в последствиях.
Качество данных и freshness
RAG не исправляет плохие документы: устаревшие, противоречивые или плохо структурированные файлы дадут устаревшие и противоречивые ответы. Качество базы знаний первично. Обновление документов при их изменении должно быть частью процесса поддержки системы. Отдельная ловушка: старая версия документа осталась рядом с новой, и поиск честно возвращает обе. Модель выберет ту, что ближе по формулировке, а не ту, что актуальна.
текст инструкции для моделиОтвечай ТОЛЬКО на основе фрагментов в блоке КОНТЕКСТ.Если ответа в контексте нет - напиши: "В базе знаний нет ответа на этот вопрос".Не используй общие знания. Не додумывай. Не объединяй факты из разныхфрагментов, если они относятся к разным разделам.После каждого утверждения указывай источник.Если фрагменты противоречат друг другу - сообщи об этом и приведи оба.Это не код, а текст инструкции — его можно скопировать и адаптировать. Строка про противоречия важнее, чем кажется: без неё модель выберет один из конфликтующих фрагментов молча, и вы не узнаете, что в базе две версии правды.
Как измерить качество до запуска
Красивый ответ — не метрика. Нужен набор вопросов с заранее известными ответами: 30–50 штук достаточно, чтобы увидеть системные проблемы.
- Собрать вопросы из реальностиНе выдуманные, а из переписки поддержки, чатов, обращений. Для каждого зафиксировать правильный ответ и документ-источник.
- Проверить поиск отдельно от ответаНашлись ли нужные фрагменты вообще? Если нет — проблема в нарезке, и правка инструкции не поможет. Это две разные поломки, лечатся по-разному.
- Добавить вопросы без ответа5–10 вопросов, ответа на которые в базе заведомо нет. Система должна сказать «не знаю». Если она отвечает — она придумывает, и на реальных данных будет делать то же.
- Проверить ссылкиНе только «ответ верный», но и «источник указан правильно». Верный ответ с чужой ссылкой означает, что модель угадала.
- Прогнать от разных пользователейОдин и тот же вопрос от сотрудника и от подрядчика. Разные ответы — фильтр прав работает. Одинаковые — утечка.
- Записать результат до измененийИначе после правки инструкции невозможно сказать, стало лучше или просто по-другому.
Что спросить у исполнителя
6 пунктовШесть вопросов, которые отличают базу знаний от «чата с папкой».
- Если в ответе нет слова «заголовки» или «структура» — нарезка по счётчику символов, и уверенные ответы не из того раздела будут регулярно.
- Правильный ответ: «в поисковом запросе». Ответ «фильтруем результаты» означает, что закрытый текст уже прошёл через систему.
- Если она остаётся в базе, система будет отвечать по отменённым правилам — уверенно и со ссылкой.
- «Попробовали несколько» — не проверка. Нужен зафиксированный набор с известными ответами.
- Если она всегда что-то отвечает — она придумывает. Правильное поведение: явное «не знаю».
- Резкий рост ответов «не знаю» означает поломку. Без наблюдения за этим поломка обнаруживается по жалобам.
Наблюдение после запуска
Метрики продолжают жить: доля ответов «не знаю» (резкий рост означает поломку индексации), доля ответов без ссылки, вопросы, на которые поиск не нашёл ничего подходящего. Последние — самый ценный источник: они показывают, каких документов в базе не хватает.
ПРИМЕР
Ответ правильный, документ — прошлогодний
Ситуация. База знаний по тарифам: 400 документов, нарезка по 500 символов без сохранения заголовков. Вопрос «какая ставка для корпоративных клиентов» получает уверенный ответ «12%» со ссылкой на документ.
Результат. 12% — ставка из документа, отменённого полгода назад: старая версия осталась в индексе, а чанк без пути по документу выглядел так же убедительно, как актуальный. Два изменения закрывают проблему: путь заголовков внутри текста чанка и удаление старых версий из индекса при обновлении. Найти это можно было до запуска — набором из 20 вопросов с известными ответами.
ПРАКТИКА
Сделайте сейчас
Составьте план пилота для одной реальной задачи: набор из 10–20 документов, правило нарезки с указанием, откуда берётся контекст заголовков, ответ на вопрос «на каком этапе учитываются права», 20 тестовых вопросов с известными ответами и источниками, из них 5 — без ответа в базе. Затем пройдите мысленно по первому вопросу всю цепочку и найдите шаг, где не хватает данных или решения. Этот шаг и есть настоящий объём работы.
ОГРАНИЧЕНИЯ
Где нужен человек
- RAG не является защитой от галлюцинаций: модель может добавить информацию из своих обучающих данных.
- Без актуальных и структурированных документов RAG не даст качественных результатов.
- Фильтр прав доступа после поиска — это уже утечка: недоступный текст побывал в памяти и логах.
Смежные уроки
Материал проверен: 20 августа 2026. Инструменты и тарифы меняются — сверяйтесь с первоисточником.