Запрос звучит одинаково у всех: «хотим бота, который отвечает по нашим документам». Дальше почти всегда следует предложение «обучить нейросеть на наших регламентах». Обучение здесь ни при чём, и понимание почему экономит месяц и пару миллионов.
Почему модель не «обучают» на документах
Дообучение меняет веса модели. Это дорого, требует тысяч примеров и решает другую задачу — научить модель стилю или формату ответа. Знание фактов оно закрепляет плохо: модель начинает уверенно путать похожие документы.
И главное: регламент меняется в понедельник, а переобучение занимает дни. База знаний, которую нельзя обновить за минуту, бесполезна.
Как это работает вместо обучения
RAG расшифровывается как retrieval-augmented generation — генерация с поиском. Схема из четырёх шагов:
- Документы режутся на куски по 200–800 слов. Кусок должен быть самодостаточным: абзац, вырванный из середины таблицы, отвечать ни на что не поможет.
- Каждый кусок превращается в вектор — набор чисел, который отражает смысл текста. Близкие по смыслу куски получают близкие векторы.
- Вопрос пользователя тоже превращается в вектор, и система находит пять-семь ближайших кусков.
- Модель получает вопрос вместе с найденными кусками и пишет ответ, опираясь только на них.
Модель ничего не запоминает. Она каждый раз получает нужный фрагмент прямо в запросе. Поменяли регламент — переиндексировали документ, следующий ответ уже новый.
Что даёт этот подход
Источник под ответом. Система знает, из какого документа взят фрагмент, и может показать ссылку. Сотрудник проверяет за две секунды.
Разграничение доступа. Поиск можно ограничить документами, к которым у пользователя есть право. Модель физически не увидит того, чего не должна.
Обновление за минуту. Загрузили новую версию — переиндексировали.
Где такие системы ломаются
Нарезка. Самая недооценённая часть. Таблицу, разрезанную пополам, не починит никакая модель. Документы со сложной структурой — договоры, прайс-листы, инструкции с вложенными пунктами — требуют своей логики нарезки. Это часы работы; настройкой по умолчанию тут не обойтись.
Поиск по синонимам вашей отрасли. Векторный поиск понимает общий язык. Внутренний жаргон компании он не знает: «форма 4-ФСС» и «отчёт в соцстрах» для него разные вещи. Лечится гибридным поиском — векторный плюс обычный полнотекстовый по ключевым словам.
Вопросы про количество. «Сколько у нас поставщиков в Сибири» — поиск принесёт пять кусков из справочника, модель посчитает по ним и уверенно ошибётся. Такие вопросы надо отправлять запросом в базу данных, минуя поиск по тексту.
Устаревшие версии рядом с актуальными. Если в базе лежат регламент 2023 года и его новая редакция, поиск принесёт оба, и модель выберет тот, что текстуально ближе к вопросу. Версионирование документов — обязательная часть системы.
Отсутствие ответа. Когда в базе ничего нет, модель по умолчанию сочиняет правдоподобное. Нужна прямая инструкция отвечать «в документах этого нет» и проверка, что найденные куски вообще релевантны вопросу.
Что нужно от вас перед стартом
Документы в машиночитаемом виде. Сканы договоров без распознавания — отдельный проект. PDF, экспортированный из Word, читается хорошо; PDF, собранный из фотографий, требует OCR и вычитки.
Понимание, кто что имеет право видеть. Права доступа проектируются до индексации.
Двадцать-тридцать реальных вопросов от будущих пользователей. Без них невозможно проверить, работает система или просто отвечает связным текстом.
Как понять, что система работает
Соберите набор из пятидесяти вопросов с эталонными ответами и прогоняйте его после каждого изменения. Смотрите две вещи: нашёлся ли правильный документ и верен ли ответ по нему.
Разделять их обязательно. Если документ не нашёлся — проблема в нарезке или поиске. Если нашёлся, а ответ неверный — проблема в инструкции модели. Метрика «процент довольных пользователей» не показывает ни того, ни другого.
Сколько это стоит
Пилот на одной базе знаний — от 300 тысяч. Основные часы уходят на нарезку, настройку поиска и тестовый набор. Подключение модели занимает день.
Эксплуатация — от 5 до 50 тысяч в месяц при тысяче обращений, в зависимости от того, сколько текста уходит в модель на каждый ответ.