Субъективные суждения убивают AI-продукты. Пора это остановить
Представьте: ваша команда запускает AI-ассистента для поддержки клиентов. Он проходит все тесты на отдельных вопросах. BLEU-счет, ROUGE, даже человеческая оценка - все зеленое. Вы запускаете в продакшн, а через неделю получаете разгромный отзыв: "Ассистент как шизофреник - каждый ответ будто от другого человека".
Классические метрики оценки LLM мертвы. Они оценивают отдельные ответы, игнорируя главное - связность пути. Клиент приходит не за одним ответом, а за решением проблемы через диалог. И если на шаге 3 ассистент забывает, о чем говорили на шаге 1 - это провал, даже если каждый ответ технически корректен.
В 2026 году 73% провалов AI-продуктов связаны не с качеством отдельных ответов, а с развалом многошаговых сценариев. Компании теряют миллионы на переобучении моделей, не понимая настоящей проблемы.
CDP: три кита, на которых держится осмысленный диалог
CDP-метрики пришли из маркетинга в 2020-х, где измеряли customer journey. В 2024 году исследователи Stanford AI Lab адаптировали их для оценки LLM-сценариев. К 2026 году это стало стандартом для серьезных проектов.
| Метрика | Что измеряет | Проблема без нее | Идеальный показатель (0-1) |
|---|---|---|---|
| Continuity | Связность, отсутствие разрывов в логике | Ассистент "забывает" предыдущие шаги | 0.85+ |
| Deepening | Углубление в тему, а не поверхностные ответы | Диалог топчется на месте, не решая проблему | 0.70+ |
| Progression | Движение к цели, завершенность сценария | Бесконечные уточнения без результата | 0.80+ |
Звучит абстрактно? Давайте разберем на крови. Реальный кейс из моей практики.
Сценарий технической поддержки: как CDP-метрики показали то, что скрывали классические тесты
Клиент жаловался: "Ассистент помогает сбросить пароль, но когда дело доходит до двухфакторной аутентификации - начинает нести чушь". Классические метрики показывали 94% accuracy. Проблему нашли только с CDP.
# Упрощенный пример расчета Continuity
# Мы сравниваем, насколько ответ N ссылается на контекст ответов 1..N-1
def calculate_continuity(scenario_responses):
continuity_scores = []
for i in range(1, len(scenario_responses)):
current_response = scenario_responses[i]
previous_context = " ".join(scenario_responses[:i])
# Используем эмбеддинги для семантического сравнения
current_embedding = get_embedding(current_response)
context_embedding = get_embedding(previous_context)
# Косинусная близость показывает связность
similarity = cosine_similarity(current_embedding, context_embedding)
continuity_scores.append(similarity)
return np.mean(continuity_scores)
Оказалось, Continuity падала с 0.82 на первых шагах до 0.41 на шаге с 2FA. Модель буквально "теряла нить" при переходе к сложной теме. Проблема была не в знании 2FA, а в неспособности удерживать контекст многошагового сценария.
Deepening: как отличить глубокую помощь от словоблудия
Самая коварная метрика. LLM обожают говорить много и красиво, создавая иллюзию глубины. Но Deepening измеряет не объем текста, а прогресс в решении проблемы.
Пример плохого диалога (Deepening ~0.3):
- Пользователь: "Не запускается приложение"
- AI: "Попробуйте перезагрузить компьютер"
- Пользователь: "Не помогло"
- AI: "Проверьте, установлены ли обновления системы"
- Пользователь: "Все установлено"
- AI: "Возможно, проблема с антивирусом"
Диалог идет по кругу поверхностных советов. Технически каждый ответ корректен, но проблема не углубляется.
Пример хорошего диалога (Deepening ~0.78):
- Пользователь: "Не запускается приложение"
- AI: "Какая именно ошибка? Код или сообщение?" (уточнение)
- Пользователь: "Пишет 'недостаточно памяти'"
- AI: "Это RAM или диск? Проверьте в диспетчере задач" (конкретизация)
- Пользователь: "RAM на 95% занята процессом X"
- AI: "Процесс X известен утечкой памяти. Вот инструкция по очистке кэша" (решение)
Как считать Deepening без нейросетей-оценщиков
В 2026 году появились практические методы без дорогих LLM-as-a-judge:
def calculate_deepening(scenario_steps):
"""
Deepening = рост специфичности + уменьшение энтропии тем
"""
specificity_scores = []
topic_entropy = []
for i, step in enumerate(scenario_steps):
# Специфичность через плотность ключевых терминов
technical_terms = extract_technical_terms(step)
specificity = len(technical_terms) / max(1, len(step.split()))
specificity_scores.append(specificity)
# Энтропия тем - как "размазано" внимание
topics = classify_topics(step)
entropy = calculate_topic_entropy(topics)
topic_entropy.append(entropy)
# Deepening растет когда специфичность растет, а энтропия падает
specificity_trend = calculate_trend(specificity_scores)
entropy_trend = calculate_trend(topic_entropy)
deepening = (specificity_trend - entropy_trend + 1) / 2 # нормализуем к 0-1
return deepening
Главная ошибка: измерять Deepening через длину ответов. Некоторые LLM (особенно старые версии GPT-3.5) генерируют многословные ответы с низкой специфичностью. Deepening падает, хотя текст становится длиннее.
Progression: когда диалог должен закончиться, но не заканчивается
Вы знаете это чувство, когда общаетесь с поддержкой и понимаете - вас водят за нос? Диалог идет, вопросы задаются, но решения нет. Это провал Progression.
Progression измеряет движение к разрешению. Не к закрытию тикета (это может быть fake resolution), а к реальному решению проблемы пользователя.
Кейс из e-commerce:
- Пользователь: "Хочу вернуть товар"
- AI: "Опишите проблему" (шаг 1)
- Пользователь: "Не подошел размер"
- AI: "У вас есть чек?" (шаг 2)
- Пользователь: "Да"
- AI: "Товар в оригинальной упаковке?" (шаг 3)
- ... и так 8 шагов без прогресса
Progression такого диалога ~0.2. Каждый шаг технически уместен, но нет движения к цели - оформлению возврата.
Формула Progression, которая работает в 2026
Новейшие исследования (Q4 2025) показывают эффективность goal-oriented оценки:
def calculate_progression(scenario, user_goal):
"""
Progression = близость к цели на каждом шаге
"""
goal_embedding = get_embedding(user_goal) # Цель пользователя
progression_scores = []
accumulated_context = ""
for step in scenario:
accumulated_context += " " + step
# Анализируем, насколько текущее состояние близко к цели
context_embedding = get_embedding(accumulated_context)
goal_similarity = cosine_similarity(context_embedding, goal_embedding)
# Штрафуем за циклы и повторы
if is_repetitive(step, previous_steps):
goal_similarity *= 0.7
progression_scores.append(goal_similarity)
# Progression - это тренд роста близости к цели
progression_trend = calculate_trend(progression_scores)
final_proximity = progression_scores[-1]
return 0.6 * progression_trend + 0.4 * final_proximity
Практика: внедряем CDP-метрики за 4 недели
1 Неделя 1: Инструментарий и базовые измерения
Не нужно строить сложные системы. Начните с:
- DeepEval - библиотека с готовыми CDP-метриками (обновите до версии 0.12.0+, там исправлены критические базы в расчете Continuity)
- 20 реальных диалогов из логов поддержки (не синтетика!)
- ElasticSearch для хранения эмбеддингов, если нет бюджета на векторные БД
Первая задача: измерить текущее состояние. Не пытайтесь улучшить, просто зафиксируйте CDP-счет для каждого типа сценария.
2 Неделя 2: Анализ паттернов провалов
Сгруппируйте сценарии по проблемам:
| Паттерн | CDP-сигнатура | Частая причина |
|---|---|---|
| "Потеря нити" | Continuity < 0.5, остальные нормально | Слишком короткий контекст или плохие промпты |
| "Болтовня" | Deepening < 0.4, Progression низкий | Модель избегает конкретных ответов |
| "Бег по кругу" | Progression < 0.3, Continuity высокий | Отсутствие goal-oriented дизайна |
3 Неделя 3: Целевые улучшения
Не пытайтесь улучшить все метрики сразу. Выберите одну:
- Continuity низкая → внедрите PMR-промпты для явного удержания контекста
- Deepening низкий → добавьте step-by-step инструкции в системный промпт
- Progression низкий → внедрите явные checkpoints завершения сценария
4 Неделя 4: Автоматизация и мониторинг
Интегрируйте CDP в пайплайн тестирования. Критически важный шаг:
# Пример конфига для CI/CD пайплайна
testing:
cdp_thresholds:
continuity: 0.75
deepening: 0.65
progression: 0.70
# Сценарии для обязательного тестирования
required_scenarios:
- customer_support_return
- technical_troubleshooting
- product_recommendation
# Автоматический откат если CDP падает
auto_rollback: true
Типичные ошибки, которые сведут на нет все усилия
- Измерять CDP на синтетических данных. Реальные диалоги содержат ambiguity, interruptions, changing goals - то, что ломает LLM. Синтетика этого не имитирует.
- Усреднять CDP по всем сценариям. Support-диалог и creative writing имеют разные оптимальные значения. Deepening для технической поддержки должен быть выше, чем для генерации поэзии.
- Игнорировать бизнес-контекст. Progression=1.0 (быстрое завершение) плох для sales-бота, который должен углублять вовлеченность. Адаптируйте целевые значения.
- Забывать про интеграционное тестирование. CDP в изоляции бесполезен. Тестируйте в реалистичных условиях с реальной latency и ошибками сети.
Что будет дальше? CDP-метрики в 2027
Тренды, которые я наблюдаю (и которые стоит учесть уже сейчас):
- Мультимодальный CDP. Как измерять Continuity, когда диалог включает изображения, таблицы, код? Исследовательские лаборатории уже работают над cross-modal embeddings.
- Adaptive CDP targets. Оптимальные значения метрик будут динамически подстраиваться под тип пользователя, его expertise level, даже эмоциональное состояние.
- CDP для агентных систем. Когда один сценарий выполняется цепочкой специализированных моделей - как измерять связность всей цепочки?
Самый важный инсайт: CDP-метрики не заменят человеческую оценку. Они переводят субъективные ощущения ("диалог разваливается") в объективные числа ("Continuity упала на 40%"). Это язык, на котором могут говорить product, engineering и бизнес.
Начните с трех диалогов. Просто измерьте. Увидите patterns, которые месяцами ускользали от классических метрик. Это первый шаг от AI-игрушки к AI-инструменту, который реально решает проблемы.