Естественность диалога (Conversational Flow Rate)¶
Метрика Conversational Flow Rate оценивает, насколько естественным и связным получается многоходовый диалог. Она штрафует за лишние уточнения, повторные вопросы, игнорирование сигналов пользователя и уходы в сторону от темы.
Как это работает¶
Один целостный (holistic) вызов LLM оценивает диалог как единое целое по few-shot рубрике и возвращает один вердикт по 5-уровневой шкале (fully/mostly/partial/minor/none).
Flow рассматривается как свойство всей последовательности, а не как среднее по ходам. Один сильно сломанный ход, который пускает под откос остальной разговор, опускает вердикт, даже если другие ходы в порядке. Поздние ходы весят больше ранних, если они расходятся, -- важнее всего итоговое состояние разговора.
Рубрика явно учитывает, насколько ассистент:
- напрямую отвечает на сигналы пользователя,
- избегает лишних уточнений,
- сохраняет связность с предыдущими ходами,
- и не уходит в неуместные отступления.
Вердикт отображается в оценку:
| Вердикт | Оценка |
|---|---|
fully | 1.0 |
mostly | 0.9 |
partial | 0.7 |
minor | 0.3 |
none | 0.0 |
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | обязательный | LLM модель: "gpt-4o", "anthropic:claude-3-5-sonnet-latest", "google:gemini-2.0-flash", "ollama:llama3" или CustomLLMClient |
threshold | float | 0.7 | Минимальная оценка для прохождения |
verbose | bool | False | Цветной вывод в консоль |
Обязательные поля¶
Работает только с ConversationalEvalTestCase.
| Поле | Обязательно |
|---|---|
turns (каждый ход с input и actual_output) | Да |
Использование¶
from eval_lib import (
ConversationalFlowRateMetric,
ConversationalEvalTestCase,
EvalTestCase,
evaluate_conversations,
)
import asyncio
metric = ConversationalFlowRateMetric(model="gpt-4o", threshold=0.7)
conversation = ConversationalEvalTestCase(
turns=[
EvalTestCase(
input="Мне нужно сбросить пароль",
actual_output="Помогу. Подтвердите, пожалуйста, email, привязанный к аккаунту.",
),
EvalTestCase(
input="user@example.com",
actual_output="Ссылка для сброса пароля отправлена на user@example.com. Проверьте почту.",
),
]
)
results = asyncio.run(evaluate_conversations([conversation], [metric]))
Стоимость¶
1 вызов LLM API за одну оценку.
Рекомендации¶
- Используйте в паре с Repetitive Pattern Detection: циклы тоже ломают flow, но по другим причинам, и эти две метрики покрывают разные типы сбоев.
- Смотрите
evaluation_log["key_issues"]-- вместе с вердиктом возвращается список главных проблем, найденных LLM. Обычно фикс агента стоит начинать именно с них. - Поскольку вердикт целостный, одного сильно сломанного хода достаточно, чтобы опустить оценку до
none. Используйте эту метрику, когда хотите ловить катастрофические сбои flow, а не измерять средний уровень качества ходов.