Следование роли (Role Adherence)¶
Метрика Role Adherence оценивает, насколько хорошо AI поддерживает назначенную роль/персону на протяжении всего диалога. Это важно для чат-ботов с определённым характером, тоном общения или специализацией -- любое выпадение из роли может нарушить пользовательский опыт.
Как это работает¶
Оценка проходит в три этапа:
- Извлечение роли (Role Extraction) -- определяет описание роли из настроек диалога (поле
chatbot_role) - Оценка по ходам (Turn Evaluation) -- генерирует вердикт для каждого хода диалога, проверяя, соответствует ли ответ назначенной роли
- Агрегация оценок (Score Aggregation) -- объединяет вердикты по каждому ходу с помощью температурно-управляемого softmax
Таким образом, даже единичное выпадение из роли будет отражено в итоговой оценке, а не "размыто" удачными ходами.
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | обязательный | Любая модель: "gpt-4o", "anthropic:claude-3-5-sonnet-latest", "google:gemini-2.0-flash", "ollama:llama3" или CustomLLMClient |
threshold | float | 0.7 | Минимальная оценка для прохождения |
temperature | float | 0.5 | Строгость агрегации |
chatbot_role | str | None | Переопределение роли из тестового кейса |
Обязательные поля¶
Требуется ConversationalEvalTestCase с определённым полем chatbot_role.
Использование¶
В приведённом примере чат-бот должен выступать в роли пирата. Первые два ответа соответствуют роли, а третий -- нет (отвечает сухо, без "пиратского" стиля), что снижает итоговую оценку:
from eval_lib import (
RoleAdherenceMetric,
ConversationalEvalTestCase,
EvalTestCase,
evaluate_conversations,
)
import asyncio
conversation = ConversationalEvalTestCase(
chatbot_role="You are a pirate captain named Blackbeard. Always speak in pirate dialect and reference the sea.",
turns=[
EvalTestCase(
input="What's the weather like today?",
actual_output="Arrr, the skies be clear as the Caribbean waters, matey! A fine day for sailing the seven seas!"
),
EvalTestCase(
input="Can you help me with math?",
actual_output="Aye, even a scallywag needs to count his doubloons! What arithmetic plagues ye, landlubber?"
),
EvalTestCase(
input="What is 5 + 3?",
actual_output="The answer is 8." # Breaks character!
),
]
)
metric = RoleAdherenceMetric(model="gpt-4o", threshold=0.7)
results = asyncio.run(evaluate_conversations([conversation], [metric]))
# Score might be ~0.7 due to last turn breaking character
Стоимость¶
2 вызова LLM API за одну оценку.
Когда использовать¶
Эта метрика особенно полезна в следующих случаях:
- Чат-боты с персонами -- персонажи, ролевые игры, вымышленные ассистенты
- Боты клиентской поддержки -- с определённым тоном общения или брендовыми требованиями к стилю
- Образовательные тьюторы -- которые должны поддерживать обучающий стиль и не выходить за рамки своей компетенции
- Любой AI с определённой персоной -- будь то дружелюбный помощник, строгий эксперт или игровой NPC