Как за сутки выявить "боли" клиентов в чат-боте с помощью AI: Разбираем десятки тысяч сессий

потоки данных превращаются в диаграммы
потоки данных превращаются в диаграммы

Введение: быстрый анализ обращений — ключ к пониманию клиента

Многие компании, использующие чат-ботов на основе ИИ, сталкиваются с проблемой: как эффективно анализировать огромные объемы диалогов? Ручной анализ десятков тысяч сессий нереален. Эта статья – практическое руководство для тех, кто хочет быстро (меньше чем за сутки!) и качественно разобраться в проблемах, с которыми сталкиваются клиенты при общении с чат-ботом. Подход, описанный здесь, не требует глубоких технических знаний, но предполагает базовое понимание Python и работы с LLM (большими языковыми моделями) через API.

Глоссарий: говорим на одном языке

Прежде чем погрузиться в детали, давайте определимся с терминами:

  • LLM (Large Language Model) – большая языковая модель (например, GPT-4o, DeepSeek, LLaMA 3, Gemini 1.5 Pro).
  • Промпт (Prompt) – текстовая инструкция/команда для LLM.
  • Саммаризация (Summarization) – краткое изложение сути текста, выделение главного.
  • Агрегация (Aggregation) – группировка схожих данных.
  • Ранжирование (Ranking) – упорядочивание данных по определенному признаку.
  • Чат-бот – программа-собеседник, отвечающая на вопросы пользователя по сценарию или с помощью генеративной модели.
  • CSI (Customer Satisfaction Index) - индекс удовлетворённости клиентов

Исходные данные: что нам понадобится

Для анализа нам потребуются только реплики клиента в рамках одной сессии чат-бота. Реплики бота не учитываем – практика показала, что это самый эффективный подход. Ответы бота могут создавать дополнительный шум при классификации. Но многое зависит от выбранной LLM модели.

Важно: Если ваша система собирает оценки CSI, используйте их! Сформируйте выборку сессий с низкими оценками – это поможет сфокусироваться на самых проблемных диалогах.

Целевой столбец данных для анализа должен содержать все реплики клиента в рамках одной сессии, объединенные в одну строку. Каждая реплика отделена от остальных ';'

Классификация: наводим порядок в хаосе

Чтобы структурировать информацию, разделим все обращения на несколько высокоуровневых классов. Классы зависят от специфики вашего бизнеса. Вот примеры:

  • "Проблемы": Запросы, связанные с возникшими трудностями.
  • "Продукты и услуги": Вопросы по использованию продуктов/услуг.
  • "Информация": Запросы на получение информации.
  • "Услуга_1" : Запросы связанные с использованием данной услуги.

Можно детализировать классы, выделив отдельные услуги. Главное – чтобы классы были понятными и охватывали все типы обращений. Помните, классам необходимо будет дать четкое и понятное определение в промпте. Если есть сомнения, добавьте класс "Другое" – туда попадет все, что не вошло в основные категории.

Пошаговый алгоритм анализа: от данных к инсайтам

Предлагаемый подход состоит из нескольких этапов:

  • Классификация: LLM относит каждый диалог к одному или нескольким классам.
  • Саммаризация: LLM кратко формулирует суть каждого диалога.
  • Агрегация: Объединяем похожие саммари внутри каждого класса, отсекая редкие случаи (например, менее N вхождений).
  • Ранжирование и анализ выбросов: Сортируем саммари внутри класса по частоте встречаемости. Ищем аномально частые запросы.
  • Визуализация: Строим диаграмму для наглядного представления результатов.
  • (Опционально) Детализация: При необходимости углубляемся в анализ отдельных диалогов или групп саммари.

Возможные трудности: будьте готовы

Многозначность: Один диалог может затрагивать несколько тем. LLM может отнести его к нескольким классам. Это нужно учитывать при обработке результатов.

Вариативность саммари: Даже при высокой стабильности результатов, саммари одного и того же запроса могут незначительно отличаться (порядок слов, склонения). Это может усложнить агрегацию. Решение – ручная проверка и объединение похожих саммари в постобработке.

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

Пример промпта: как "объяснить" задачу LLM

Вот пример промпта, который можно использовать для LLM (классы даны для примера, замените на свои):

Ты анализируешь реплики клиента. Клиент обращается со своим запросам к Компании, предоставляющей услуги (например, телекоммуникационные, коммунальные или интернет-услуги), реплики разделены ';'. Клиент остался недоволен общением с Компанией. Твои задачи: 1. Классифицировать запрос на основании данных классов в наиболее близкий по смыслу: 'Операции' - совершение операций, связанных с услугами: подключение, отключение, изменение тарифа; 'Проблемы с начислениями' - запросы, связанные с вопросами по счетам, начислениям, задолженностям или оплате; 'Проблемы с оборудованием' - запросы, связанные с неисправностью предоставленного оборудования (роутера, приставки и т.д.); 'Проблемы с доступом' - запросы, связанные с проблемами доступа к услугам (интернету, телевидению и т.д.); 'Технические проблемы' - запросы, связанные с неполадками, не относящиеся к оборудованию или доступу; 'Обслуживание'- помощь в настройке услуг или трудности в их использовании; 'Консультация' - получение информации об услугах, тарифах или состоянии счета; 2. Кратко указать суть основного запроса клиента, с которой он обратился, используй от 4 до 9 слов и только нижний регистр. Без вводных слов, исключительно ключевые слова обращения. При определении сути используй формат действие объект. Формат твоего ответа только одно сообщение: Класс;Суть обращения. Тебе запрещено упоминать в ответе слова "Класс" и "Суть обращения", также не даешь никаких дополнительных комментариев. Строго следуешь формату ответа. Реплики клиента: {dialog}

Важно: Если вы используете LLM через API с ролевой моделью (system, user, assistant), последнюю строку диалога (Реплики клиента: {dialog}) лучше передавать в роли "user". Если нет, то всё кладите в system.

Обработка результатов: превращаем данные в таблицу

После обработки данных с помощью LLM вы получите пары "Класс;Саммари". В некоторых случаях в одной ячейке может быть несколько таких пар. Позже поиском по этой колонке вы сможете находить нужные вам диалоги, среди популярных саммари.

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

  • Первый Столбец: Саммари/Проблема.
  • Остальные столбцы: Классы.
  • Ячейки на пересечении: Количество вхождений данного саммари в данном классе.
Пример таблицы для построения диаграммы
Пример таблицы для построения диаграммы

Эта таблица – основа для построения диаграммы или ранжирования саммари по частоте встречаемости.

Если вы все сделали правильно, то сможете построить точечную диаграмму на примере ниже. Где по оси ординат у вас количество вхождений данной проблемы по оси абсцисс классы, которые вы выделили. Точка показывает порядковый номер данной проблемы в списке.

Так мы видим, какие вопросы заботят клиентов больше и к каким классам они относятся.

Таблица болей клиентов
Таблица болей клиентов

Заключение: быстрый старт для анализа клиентского опыта

Описанный подход позволяет получить общее представление о проблемах и запросах клиентов в чат-боте. Это – первый шаг к более глубокому пониманию клиентского опыта. Если нужна детализация, то во-первых, можно вычитывать диалоги частотных саммари, во-вторых, можно использовать LLM для более подробного анализа отдельных диалогов (об этом – в следующей статье!).

А можно ли взять модель с очень большим контекстным окном и просто написать такой промпт и передать ей все диалоги? Такое вполне возможно, но скорее всего большое количество информации потеряется и вы получите некое обобщение и не сможете вычитать диалоги, которые вас интересуют.

Хотите узнать больше?

Если у вас есть вопросы, есть предложения, нужны подробности или notebook с примером кода, свяжитесь со мной: LinkedIn.

Начать дискуссию