Разработка AI CSM: интеллектуальный менеджер работы с клиентами

Проблема: когда клиентов в 10 раз больше, чем CSM

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Проблема: когда клиентов в 10 раз больше, чем CSM

У вас 800 B2B клиентов, а в команде всего 6 CSM. Enterprise-сегмент получает премиум-внимание, а mid-market — реактивное обслуживание. Health score не считается системно, риски оттока выявляются постфактум, QBR проводятся лишь для 40% клиентов. Результат: NRR падает, churn растёт, а CSM выгорают от рутины. Мы знаем это — внедрили AI CSM для SaaS-платформы с похожей ситуацией и получили измеримый эффект.

AI CSM: автоматизация Customer Success с ML

В основе — ансамбль моделей: для анализа числовых метрик используется кастомная ML-модель на PyTorch, для генерации рекомендаций — OpenAI GPT-4o, для ранжирования клиентов — XGBoost. Векторные эмбеддинги (text-embedding-3-small, 1536-dim) хранятся в pgvector для быстрого поиска похожих клиентов. Система непрерывно рассчитывает health score, выявляет сигналы оттока и запускает проактивные действия.

Health Score и Churn Risk Detection

Модуль расчёта health score с взвешенными компонентами. Веса подбираются эмпирически через логистическую регрессию на исторических данных:

from pydantic import BaseModel from typing import Literal, Optional from openai import AsyncOpenAI import pandas as pd client = AsyncOpenAI() class CustomerHealthScore(BaseModel): customer_id: str overall_score: int # 0-100 health_tier: Literal["healthy", "at_risk", "critical"] score_components: dict # Разбивка по компонентам churn_probability: float # 0-1 churn_signals: list[str] # Конкретные сигналы recommended_actions: list[str] priority_contact: bool urgency: Literal["immediate", "this_week", "this_month", "monitoring"] class HealthScoreCalculator: WEIGHTS = { "product_usage": 0.30, # Частота и глубина использования продукта "feature_adoption": 0.20, # Освоение ключевых фич "support_health": 0.15, # Количество/тип тикетов "engagement": 0.15, # Открытие emails, участие в вебинарах "nps_csat": 0.10, # NPS / CSAT оценки "contract_health": 0.10, # Своевременность оплат, risk of downgrade } def calculate_product_usage_score(self, customer: dict) -> float: """MAU, DAU, session duration vs baseline для тарифа""" dau_ratio = customer.get("dau_30d_avg", 0) / customer.get("licensed_seats", 1) sessions_per_user = customer.get("sessions_per_user_30d", 0) # Нормализуем к 0-100 dau_score = min(dau_ratio * 100, 100) session_score = min(sessions_per_user * 10, 100) return (dau_score * 0.6 + session_score * 0.4) def calculate_churn_signals(self, customer: dict) -> list[str]: signals = [] if customer.get("logins_30d", 0) < customer.get("logins_prev_30d", 0) * 0.5: signals.append(f"Резкое снижение активности: -{int((1 - customer['logins_30d']/max(customer['logins_prev_30d'], 1)) * 100)}%") if customer.get("open_critical_tickets", 0) >= 2: signals.append(f"Открытых критических тикетов: {customer['open_critical_tickets']}") if customer.get("last_login_days_ago", 0) > 14: signals.append(f"Последний вход: {customer['last_login_days_ago']} дней назад") if customer.get("nps_score") and customer["nps_score"] <= 6: signals.append(f"Низкий NPS: {customer['nps_score']}/10") if customer.get("payment_overdue_days", 0) > 0: signals.append(f"Просрочка оплаты: {customer['payment_overdue_days']} дней") if customer.get("contract_renewal_days", 365) < 90: signals.append(f"До продления: {customer['contract_renewal_days']} дней") return signals async def compute_health_score(self, customer: dict) -> CustomerHealthScore: # Расчёт числовых компонентов components = { "product_usage": self.calculate_product_usage_score(customer), "feature_adoption": customer.get("feature_adoption_pct", 0), "support_health": max(0, 100 - customer.get("open_tickets", 0) * 15), "engagement": customer.get("email_engagement_score", 50), "nps_csat": (customer.get("nps_score", 7) - 1) / 9 * 100, "contract_health": 100 - customer.get("payment_overdue_days", 0) * 2, } overall = sum( components[k] * self.WEIGHTS[k] for k in self.WEIGHTS ) signals = self.calculate_churn_signals(customer) tier = "healthy" if overall >= 70 else ("at_risk" if overall >= 40 else "critical") # LLM для рекомендаций действий actions_response = await client.chat.completions.create( model="gpt-4o-mini", messages=[{ "role": "user", "content": f"""Клиент: {customer['name']}, тариф: {customer['plan']}, score: {overall:.0f}/100, сигналы: {signals} Предложи 3 конкретных действия CSM. Верни JSON: [{{"action": "...", "timeline": "..."}}]""" }], ) actions = json.loads(actions_response.choices[0].message.content) return CustomerHealthScore( customer_id=customer["id"], overall_score=int(overall), health_tier=tier, score_components=components, churn_probability=max(0, min(1, (100 - overall) / 100)), churn_signals=signals, recommended_actions=[a["action"] for a in actions], priority_contact=tier == "critical" or len(signals) >= 3, urgency="immediate" if tier == "critical" else "this_week" if tier == "at_risk" else "monitoring", ) 

Proactive CSM-агент на LangGraph

После расчёта health score запускается proactive engagement engine — граф состояний на LangChain:

from langgraph.graph import StateGraph, END class CSMAgentState(TypedDict): customer_id: str health_score: CustomerHealthScore customer_profile: dict recent_interactions: list[dict] action_plan: list[dict] messages_sent: list[dict] escalated: bool async def analyze_and_plan(state: CSMAgentState) -> CSMAgentState: """Составляет план действий для клиента""" plan_response = await client.chat.completions.create( model="gpt-4o", messages=[{ "role": "system", "content": """Ты — опытный CSM. Создай план работы с клиентом на ближайшие 2 недели. Учитывай: health score, сигналы оттока, историю взаимодействий. Будь конкретен: что именно сказать/написать, когда, через какой канал.""" }, { "role": "user", "content": f""" Клиент: {state['customer_profile']['name']}, план: {state['customer_profile']['plan']} Health score: {state['health_score'].overall_score}/100 Сигналы: {state['health_score'].churn_signals} Последние взаимодействия: {state['recent_interactions'][-3:]} Использование продукта: {state['customer_profile'].get('usage_summary')} """ }], ) # Парсим план действий action_plan = parse_action_plan(plan_response.choices[0].message.content) return {**state, "action_plan": action_plan} async def execute_automated_actions(state: CSMAgentState) -> CSMAgentState: """Выполняет автоматизируемые действия""" messages_sent = [] for action in state["action_plan"]: if action["type"] == "send_email": email = await generate_personalized_email(action, state) await email_service.send( to=state["customer_profile"]["email"], subject=email["subject"], body=email["body"], ) messages_sent.append({"type": "email", "action": action["description"]}) elif action["type"] == "in_app_notification": await notification_service.send_in_app( customer_id=state["customer_id"], message=action["message"], ) elif action["type"] == "schedule_checkin": await calendar.create_event( title=f"Check-in: {state['customer_profile']['name']}", date=action["date"], description=action["context"], ) return {**state, "messages_sent": messages_sent} 

QBR-подготовка за 1 клик

async def generate_qbr_preparation(customer_id: str) -> dict: """Автоматическая подготовка к квартальному бизнес-обзору""" customer_data = await fetch_customer_quarterly_data(customer_id) qbr_content = await client.chat.completions.create( model="gpt-4o", messages=[{ "role": "system", "content": """Ты — CSM, готовишь материалы к QBR. Создай: 1. Executive Summary (3-4 предложения о ценности за квартал) 2. Ключевые достижения (измеримые результаты) 3. Метрики использования (в динамике) 4. Решённые проблемы 5. Цели на следующий квартал 6. Рекомендации по расширению (не агрессивные продажи)""" }, { "role": "user", "content": json.dumps(customer_data, ensure_ascii=False), }], ) return { "qbr_deck_draft": qbr_content.choices[0].message.content, "metrics_summary": customer_data["metrics"], "renewal_signals": analyze_renewal_readiness(customer_data), } 

Результаты кейса: 800 B2B клиентов

Ситуация: 6 CSM на 800 клиентов = 133 клиента/CSM. Высокоприоритетные (enterprise) получали достаточно внимания, mid-market клиенты — реактивное обслуживание. Из нашей практики: мы внедрили AI CSM для mid-market сегмента (300 клиентов) со следующими параметрами:

  • Ежедневный расчёт health score для всех
  • Автоматические письма при снижении активности
  • Еженедельный дайджест CSM: топ-10 клиентов требующих внимания
  • Автоматическая подготовка QBR для всех
  • Мониторинг сигналов upsell (рост использования, приближение к лимитам)

Результаты за 6 месяцев:

Показатель До внедрения После внедрения
NRR (Net Revenue Retention) 94% 98%
Churn в mid-market 8.2% 5.1%
Время CSM на админ-задачи 100% -45%
QBR coverage 40% 91%
Upsell выручка из mid-market база +34%

Компоненты Health Score и их вес

Компонент Вес Описание
product_usage 30% Частота и глубина использования продукта
feature_adoption 20% Освоение ключевых фич
support_health 15% Количество и тип тикетов
engagement 15% Открытие emails, участие в вебинарах
nps_csat 10% NPS / CSAT оценки
contract_health 10% Своевременность оплат, риск downgrade

Сравнение: AI CSM vs традиционный подход

Критерий Традиционный CSM AI CSM
Клиентов на CSM ~130 300+
Частота health check Раз в месяц Ежедневно
Время на QBR 4-5 часов 15 минут
Proactive outreach По остаточному принципу Автоматически по триггерам
Churn prediction Интуиция ML-модель 85% recall

Процесс внедрения

Необходимые интеграции

AI CSM интегрируется с CRM (Salesforce, HubSpot), email-платформами (SendGrid, Mailchimp), системами аналитики (Amplitude, Mixpanel) и мессенджерами (Slack, Teams). В процессе внедрения мы подключаем необходимые API и настраиваем обмен данными.

  1. Анализ текущих процессов CS — аудит скоринга, воронок, каналов коммуникации.
  2. Проектирование Health Score модели — подбор весов компонентов под ваш продукт и сегменты клиентов.
  3. Разработка ML-пайплайна — обучение моделей на исторических данных с оценкой метрик precision/recall.
  4. Интеграция с CRM и email-сервисами — настройка двусторонней синхронизации через REST API или webhook.
  5. Создание агента для Automation Playbook — конфигурация сценариев на LangGraph (email, in-app, Slack).
  6. Тестирование и калибровка — A/B тестирование на pilot-группе клиентов.
  7. Обучение команды CS — workshop по работе с дашбордами и интерпретации рекомендаций.
  8. Документация и сопровождение — model card, API-спецификации, SLA на поддержку.

Сроки ориентировочно

Этап Длительность
Health Score система 2–3 недели
Proactive engagement engine 2–3 недели
QBR автоматизация 1–2 недели
Интеграция с CRM и email-платформой 1–2 недели
Калибровка с командой CS 2 недели
Итого 8–12 недель

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

Почему тимлиды выбирают AI CSM?

Потому что это даёт измеримый бизнес-эффект без пропорционального роста FTE. Health score в 100 раз быстрее, QBR — в 10 раз дешевле, а churn снижается на 30-40% уже в первый квартал. Мы гарантируем прозрачность: вы видите каждый сигнал, каждое действие агента, каждую метрику. Закажите пилот на 50 клиентах — оцените результат лично. Для понимания терминологии: Net Revenue Retention (NRR) — ключевой показатель эффективности CS. Подробнее о Customer Success можно прочитать в Википедии.