Перейти к содержанию
Innovialabs

Как сделать RAG-чат-бота по документам компании

Практика3 мин

Коротко

RAG-бот находит в ваших документах фрагменты, релевантные вопросу, и передаёт их LLM, которая отвечает только по ним и указывает источник. Ключ к качеству — чистые данные, хорошее разбиение и контроль доступа на этапе поиска.

Как это работает в двух словах

RAG (Retrieval-Augmented Generation) — это схема, в которой языковая модель отвечает не «из головы», а по найденным фрагментам ваших документов. Бот не обучается на ваших данных: документы лежат в отдельном индексе, и при каждом вопросе система достаёт из него несколько самых подходящих кусков.

Конвейер состоит из двух частей:

  • Индексация (один раз и при обновлениях): загрузка документов → извлечение текста → разбиение на чанки → эмбеддинги → запись в векторное хранилище.
  • Ответ (на каждый вопрос): эмбеддинг вопроса → поиск похожих чанков → промпт с найденным контекстом → ответ LLM со ссылками.

Минимальный стек

Для первой рабочей версии не нужен сложный фреймворк:

СлойВариант
Извлечение текстапарсер PDF/DOCX, для сканов — OCR
ЭмбеддингиAPI-модель или открытая мультиязычная модель
ХранилищеPostgreSQL + pgvector или Qdrant
LLMлюбая модель с хорошим следованием инструкциям
Интерфейсвеб-виджет или Telegram-бот

Шаг 1. Загрузка и очистка документов

Качество ответов ограничено качеством исходников. Перед индексацией:

  • уберите дубли и устаревшие версии регламентов;
  • извлекайте текст с сохранением заголовков и таблиц;
  • для каждого документа сохраните метаданные: название, раздел, дата, ссылка, отдел или группа доступа.

Метаданные понадобятся для ссылок в ответе и для фильтрации.

Шаг 2. Разбиение на чанки

Документ режется на фрагменты, которые по отдельности понятны. Хорошая отправная точка — резать по структуре (заголовки, пункты), а длинные разделы делить рекурсивно с небольшим перекрытием. К каждому чанку полезно добавить заголовок раздела: «Отпуск → Порядок оформления» ищется лучше, чем голый абзац.

Шаг 3. Эмбеддинги и индекс

Каждый чанк превращается в вектор моделью эмбеддингов. Важно:

  • вопросы и документы кодируются одной и той же моделью;
  • если сотрудники пишут на русском и узбекском, проверьте модель на обоих языках;
  • при смене модели индекс придётся пересчитать.

Шаг 4. Поиск

Базовый вариант — найти top-k ближайших чанков. Что заметно улучшает результат:

  • гибридный поиск: векторный + полнотекстовый, чтобы находились артикулы, номера приказов и точные термины;
  • реранкер: отдельная модель пересортировывает кандидатов по релевантности;
  • фильтр по метаданным: отдел, тип документа, актуальность.

Шаг 5. Промпт с цитированием

Модели нужно явно запретить выдумывать. Пример структуры:

Отвечай только на основе фрагментов ниже.
Если ответа во фрагментах нет — скажи, что не нашёл информации.
После каждого утверждения укажи номер источника в квадратных скобках.

[1] Положение об отпусках, п. 3.2: ...
[2] Приказ о графике работы: ...

Вопрос: ...

В интерфейсе номера превращаются в ссылки на документы — так пользователь может проверить ответ.

Шаг 6. Контроль доступа

Самая частая ошибка — общий индекс, из которого бот отвечает всем обо всём. Права нужно проверять на этапе поиска, а не в промпте:

  • у каждого чанка есть поле с группами доступа;
  • при запросе в фильтр подставляются группы текущего пользователя;
  • чанки, недоступные пользователю, вообще не попадают в контекст модели.

Просьба в промпте «не раскрывай конфиденциальное» защитой не является.

Частые ошибки

  • Индексировать всё подряд, включая черновики и устаревшие версии.
  • Слишком крупные чанки: в контекст попадает много лишнего.
  • Нет набора тестовых вопросов, поэтому улучшения оцениваются «на глаз».
  • Нет процесса обновления индекса при изменении документов.

Как проверить качество

Соберите 30–50 реальных вопросов сотрудников с правильными ответами и источниками. Проверяйте две вещи отдельно: нашёл ли поиск нужный фрагмент и правильно ли модель по нему ответила. Так вы поймёте, что чинить — поиск или промпт.

Частые вопросы

Для ответов по документам обычно нет. RAG проще обновлять: изменили документ — переиндексировали его, без повторного обучения.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.