RAG: как научить нейросеть отвечать по вашей базе знаний
Самый частый запрос от бизнеса звучит так: обучите модель на наших документах. На практике почти всегда нужен другой подход — не переобучение, а подстановка нужных фрагментов в запрос. Схема называется RAG, и разобраться в ней проще, чем кажется.
Почему не дообучение
Дообучение стоит дорого, требует данных и повторяется при каждом изменении регламента. Поменялся один пункт — модель об этом не узнает.
RAG решает это иначе. Документы разбиваются на фрагменты и складываются в индекс. Когда приходит вопрос, система находит подходящие куски и подкладывает их в запрос вместе с инструкцией отвечать только по ним. Правка документа отражается в ответах сразу после переиндексации.
Как устроена сборка запроса
Из картинки следует главный вывод про деньги: дороже всего обходится не вопрос пользователя, а подмешанный контекст. Отбирайте абзацы, а не файлы целиком.
Четыре решения, которые определяют качество
**Размер фрагмента.** Слишком мелкие куски теряют смысл, слишком крупные тащат лишнее. Обычно начинают с абзаца или двух и подбирают опытным путём.
**Перекрытие.** Соседние фрагменты должны немного накладываться, иначе ответ, лежащий на границе, не найдётся ни в одном.
**Количество фрагментов в запросе.** Три-пять почти всегда лучше, чем десять: лишнее сбивает модель и удорожает запрос.
**Обязательная ссылка на источник.** Ответ без указания документа и пункта проверить невозможно, а значит, доверять ему нельзя.
Что подготовить перед началом
- Документы в текстовом виде. Сканы придётся сначала распознать.
- Понятные заголовки — по ним удобно резать на фрагменты.
- Удаление устаревших версий. Две редакции одного регламента в индексе дают противоречивые ответы.
- Разграничение доступа, если часть документов видна не всем.
Когда модель всё равно ошибается
Даже с хорошим индексом остаются случаи, где ответа в документах просто нет. Здесь важна инструкция: прямо потребуйте отвечать «в документах этого нет» вместо попытки додумать. Без такого требования модель почти всегда предпочтёт сочинить правдоподобное.
Проверить систему проще всего вопросом, ответа на который заведомо не существует. Хорошая сборка честно скажет, что не нашла. Плохая уверенно выдумает пункт регламента.
Как оценивать результат
Соберите тридцать реальных вопросов с эталонными ответами и известными источниками. Проверяйте две вещи отдельно: нашёлся ли нужный фрагмент и правильно ли модель его пересказала. Это разные поломки, и лечатся они по-разному.
Если фрагмент не находится — проблема в индексе: размер кусков, формулировки заголовков, качество поиска. Если находится, но пересказ неверный — проблема в инструкции или в выборе модели.
Частые ошибки при внедрении
**Индекс собрали один раз и забыли.** Регламент поменялся, а система продолжает отвечать по старой редакции. Переиндексацию нужно вешать на событие изменения документа, а не запускать руками раз в квартал.
**В индекс сложили всё подряд.** Черновики, устаревшие версии, переписку и презентации. Модель находит противоречивые фрагменты и выбирает случайный. Лучше меньше документов, но актуальных.
**Забыли про права доступа.** Если часть документов видна не всем, фильтровать нужно на этапе поиска, а не надеяться, что модель сама не проговорится. Она проговорится.
**Оценивают всю систему целиком.** Когда ответ неверный, непонятно, что сломалось: поиск не нашёл нужный фрагмент или модель его переврала. Проверяйте два этапа отдельно — это разные поломки с разным лечением.
**Не показывают источник.** Ответ без ссылки на документ и пункт невозможно проверить, а значит, им нельзя пользоваться в спорной ситуации. Ссылка нужна не для красоты, а чтобы сотрудник мог открыть регламент и убедиться.
Сколько это стоит
Основной расход — контекст. При пяти фрагментах по двести токенов и системной инструкции в полторы сотни один вопрос обходится примерно в полторы тысячи входящих токенов плюс ответ. На тысяче вопросов в день это уже заметная сумма, поэтому кеш повторяющихся вопросов окупается почти сразу.
Индексация — разовая операция, её стоимость обычно теряется на фоне ежедневных запросов.