Как LLM с RAG интегрируют в экосистему ML-моделей поддержки: кейс Лемана Тех

Как LLM с RAG интегрируют в экосистему ML-моделей поддержки: кейс Лемана Тех

С ростом числа обращений в Service Desk классические ML-решения перестали справляться со всеми сценариями. В Лемана Тех решили эту проблему, постепенно развивая ML-экосистему и интегрируя большие языковые модели с RAG для более человекообразных ответов и интеллектуальной эскалации к специалистам.

Масштаб и задачи поддержки

В Лемана Тех работает более 40 тысяч сотрудников. Ежемесячно в поддержку поступает около 100 000 обращений. Компания обслуживает 11 дарксторов, 6 распределительных центров, 112 магазинов и более 500 бизнес-систем. Обращения варьируются от технических сбоев до запросов на доступ к системам.

Вся работа с обращениями строится на ITSM (IT Service Management) — подходе, направленном на быстрое восстановление IT-услуг и минимизацию потерь для бизнеса.

Типы обращений

  1. Инциденты — незапланированные сбои или ухудшение качества услуг. Требуют анализа и устранения причины.
  2. Запросы на обслуживание — стандартные запросы: информация, доступ, консультации. Выполняются по шаблону без анализа.

Обращения проходят через четыре линии поддержки (L1–L4). Чем выше уровень, тем дороже и квалифицированнее специалист. Регламент допускает задержку до 60 минут на реакцию — но цель в том, чтобы сократить её до минимума.

Цифровой путь обращения

Пользователь может подать обращение через почту, портал самообслуживания, ITSM-систему или по телефону. После регистрации запрос проходит несколько этапов:

  • Классификатор нулевого уровня определяет бизнес-систему.
  • Классификатор первого уровня — конкретную операцию.
  • Классификатор автоматических решений — проверяет, можно ли закрыть обращение по инструкции.

Если обращение не подлежит автоматизации, оно попадает в чат с RAG-ботом, который ищет ответ в базе знаний. Если и он не справляется — запрос сразу эскалируется эксперту.

Эволюция ML-моделей

Развитие систем классификации прошло несколько этапов:

Подход с бустингами
Начали с Light GBM — выбрали его за низкое потребление памяти и высокую точность. Текст обрабатывали: удаляли стоп-слова, применяли стемминг, векторизовали через tf-idf. Категориальные признаки (должность, офис, время) кодировали one-hot. Результат: F1-макро = 0,86.

Подход с LSTM
Пробовали рекуррентные сети: LSTM, GRU, Seq2Seq. Задача сложная — более 500 классов и 2500 субклассов. Обучение занимало несколько суток на NVIDIA Tesla V100, метрика — ниже, чем у бустинга. В прод не пошла.

Подход с трансформерами
Использовали BERT, RoBERTa, RuBERT, Electra. Предобработка — нормализация, сохранение пунктуации. Лучшая метрика — 0,85, но обучение на A100 длилось до 25 часов. Профита для бизнеса не хватило.

Yandex Foundation Models
Тестили на ограниченном датасете (до 50 000 строк, 100 классов). Пришлось объединять редкие классы. Результат не считали релевантным — отклонили.

LoRA и SFT на открытых LLM
Дообучали адаптеры для Llama 2, Llama 3 и SayaGemma. Промпт: «Найди связь между обращением, классом и операцией». Лучший результат — F1 = 0,81. Для бизнеса — недостаточно.

Текущая архитектура

Сейчас используется гибридная модель на основе BERT с дополнительными признаками:

  • На вход — текст обращения (после очистки от HTML, стоп-слов и автора).
  • Категориальные признаки: должность, место работы (one-hot).
  • Временные признаки: время и день подачи (кодируются через sin/cos).

Из BERT берётся pooled_output, который объединяется с признаками через additive attention. Это позволяет модели учитывать взаимосвязь между текстом и контекстом — например, что у сотрудника из центрального офиса не может сломаться фискальный принтер, если он не занимается продажами.

Классификатор автоматических решений

Задача — определить, можно ли закрыть обращение по инструкции. Используется логистическая регрессия, но с важным нюансом: не все шаблонные ответы подходят для автоматизации.

Например, «сбросил пароль — пришлите инструкцию» повторяется тысячи раз, но требует участия сотрудника. А «заполните форму по ссылке» — решается пользователем самостоятельно.

Чтобы отличить одно от другого, применяется LLM — Qwen2.5 (14B). Она анализирует шаблон и отвечает: «Может ли пользователь решить это сам?». На основе таких выводов формируется обучающая выборка.

Процесс запускается раз в месяц. Сама модель логистической регрессии работает быстро, легко конвертируется в ONNX и почти не нагружает инференс.

Умный бот с RAG

Цель — разгрузить дорогих L4-специалистов от рутинных вопросов по MLOps (Kubeflow, Jenkins и т.п.).

Архитектура:

  • Классификатор маршрутизирует запросы в класс «MLOps_support».
  • Включается RAG: Qwen2.5 (8B, квантованная под CPU) + кастомный эмбеддер.
  • Если ответ найден — пользователь получает его за 60 секунд.
  • Если нет — тикет автоматически создаётся в Tracker и отправляется эксперту.

Это быстрее, чем стандартные 20–60 минут ожидания.

Критерии эскалации

  • Низкий confidence score (< 0,7).
  • Пользователь ввёл команду /switch_to_human или /not_helpful.

Команда /not_helpful помогает собирать обратную связь для дообучения. /switch_to_human фиксируется, но не даёт понимания причины — пользователь может просто предпочитать общаться с людьми.

Обучение кастомного эмбеддера

Цель — повысить точность поиска в доменной области (MLOps). Использовали multilingual-e5-large, дообучили на Triplet Loss (margin=1.0).

Данные: более 10 000 триплетов (вопрос, релевантный чанк, нерелевантный чанк).

Пример:

  • Anchor: «как дебажить run pipeline в kubeflow?»
  • Positive: чанк с логами и шагами диагностики
  • Negative: инструкция по настройке PVC

Результаты обучения

Параметры: 3 эпохи, lr=1e-5, batch_size=1, GPU RTX 4090 или A100.

  • Hit Rate@3: 92% (против 68% у базовой e5-large).
  • Время инференса: 0,15 сек на запрос.

Пример:

  • Запрос: «Ошибка ImagePullBackOff в Kubeflow»
  • Ответ: «Решение: 1) Проверьте registry creds... 2) Убедитесь...»
  • Схожесть: 0,87 (было 0,52 до обучения)

Итоги и выводы

Сравнение подходов:

  • tf-idf + one-hot + бустинги: F1 = 0,86, обучение — 5 часов на V100.
  • Рекуррентные сети: F1 = 0,83, 25 часов на V100.
  • BERT/RoBERTa: F1 ≤ 0,85, до 25 часов на A100.
  • Трансформер с attention к фичам: F1 = 0,89, 12 часов на A100.
  • Кастомный e5-large: Hit@3 = 92%, 10 часов на RTX 4090.

Результаты внедрения:

  • Доля автоматизированной классификации выросла с 55% до 76%.
  • Точность — до 92% при пороговой фильтрации.
  • Скорость решения — в 20 раз быстрее для успешных кейсов.

Вывод: не стоит везде применять LLM. Для некоторых задач лучше подходят классические алгоритмы. Важно строить гибридную систему, где каждая технология используется по назначению.

Читать оригинал