Перейти к содержанию

Следование роли (Role Adherence)

Метрика Role Adherence оценивает, насколько хорошо AI поддерживает назначенную роль/персону на протяжении всего диалога. Это важно для чат-ботов с определённым характером, тоном общения или специализацией -- любое выпадение из роли может нарушить пользовательский опыт.

Как это работает

Оценка проходит в три этапа:

  1. Извлечение роли (Role Extraction) -- определяет описание роли из настроек диалога (поле chatbot_role)
  2. Оценка по ходам (Turn Evaluation) -- генерирует вердикт для каждого хода диалога, проверяя, соответствует ли ответ назначенной роли
  3. Агрегация оценок (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