RAG-помощник для тьюторов онлайн-школы
Как онлайн-школа сократила время ответа на студенческий вопрос с 20 минут до ~2 секунд и сэкономила ~277 тыс ₽/мес на облачном API.
- Среднее время ответа
- 1.8 с
- Стоимость запроса
- 0.21 ₽ vs 1.74 ₽
- Экономия
- ~277 тыс. ₽/мес
warm cache; новые запросы ~3 с
self-hosted Llama 3.1 8B vs GPT-4o при ~180k/мес
верификация через /tools/tco/
Онлайн-школа с 700 активными студентами, полным курсом и тремя дополнительными модулями накопила 12 методичек в Google Drive. Тьюторы тратили до 20 минут на поиск правильного ответа перед каждым ответом студенту — в пиковые дни на каждого приходилось до 80 тикетов. Нагрузка росла быстрее команды.
Ситуация
До внедрения процесс выглядел так: студент задаёт вопрос в Telegram — тьютор переключается в Google Drive, ищет нужную методичку, находит раздел, формулирует ответ, отправляет. В среднем это занимало 15–20 минут на типовой вопрос. Доля типовых вопросов (по расписанию, сдаче заданий, доступу к материалам, формату проверки) составляла ~73% от общего потока.
Облачный GPT-4o как вариант решения рассматривался, но при нагрузке 5 000 запросов в день и среднем объёме запроса ~3 000 токенов (контекст методички + вопрос + ответ) стоимость выходила в ~314 000 ₽/мес — неподъёмно для школы с командой 8 человек.
Задача
Автоматизировать первичный ответ на типовые вопросы: RAG-бот отвечает за секунды, тьюторы получают только нестандартные кейсы — эмоциональную поддержку, разбор сложных ошибок, индивидуальную обратную связь. Требование к точности: каждый ответ должен ссылаться на конкретный раздел методички, чтобы студент мог проверить источник.
Решение
Развернули стек на Mac Studio M3 Ultra (48 GB unified memory) в офисе школы:
- vLLM + Llama 3.1 8B — генерация ответов (~50–80 токенов/с на реальных запросах с 3 000-токенным контекстом)
- bge-m3 + Qdrant — векторный поиск по 12 методичкам; чанки 400 токенов с 80-токенным перекрытием
- Telegram Bot API — интерфейс для студентов, существующий канал коммуникации
- Веб-виджет — на платформе школы для вопросов через LMS
Пайплайн: вопрос → bge-m3 (encode) → Qdrant (top-5 retrieve) → Llama 3.1 8B (generate с ссылками на источники) → ответ студенту. Тьютор видит очередь только нетипового: «флагнуть тьютору» — отдельная кнопка в боте.
Результат
За первый месяц эксплуатации:
- 73% вопросов уходят в бот без участия тьютора
- Среднее время ответа — 1.8 с (warm cache на повторяющихся вопросах), ~3 с для новых
- Стоимость запроса — 0.21 ₽ против 1.74 ₽ при облачном GPT-4o (при 180 000 запросов/мес): самохостинг обходится в ~37 000 ₽/мес (амортизация Mac Studio 16 667 ₽ + электроэнергия ~432 ₽ + доля инженера ~20 000 ₽) против ~314 000 ₽ в облаке
- Экономия ~277 000 ₽/мес — посчитать для своего сценария можно на калькуляторе TCO
Тьюторы переключились с «отвечать на одни и те же вопросы» на «обучать», что снизило выгорание и повысило NPS курса на 11 пунктов по опросу через 2 месяца.
Стек
Итоговый стек — без облачных API, без VPN, без внешних зависимостей во время урока:
Что не сработало
Первая итерация embedding-индекса на all-MiniLM-L6 давала Recall@5 ~71% на русских текстах — слишком много пропущенных релевантных чанков. Переключились на bge-m3 с инструкционным prefix «Представь запрос студента:» (+9 пунктов Recall). Дополнительно: cold-start vLLM на Mac Studio M3 Ultra занимал ~90 с — добавили --enforce-eager и warm-up cron каждые 5 минут в рабочие часы.
Стек
- Llama 3.1 8B
- vLLM
- bge-m3
- Qdrant
- Mac Studio M3 Ultra
- Telegram Bot API