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

Успешность задач (Task Success Rate)

Метрика Task Success Rate оценивает, успешно ли AI-ассистент помог пользователю достичь его цели. Работает как с одноходовыми, так и с многоходовыми диалогами, автоматически определяя цель пользователя и генерируя критерии успеха.

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

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

  1. Определение цели (Goal Inference) -- анализирует диалог, чтобы понять, чего хотел пользователь
  2. Генерация критериев (Criteria Generation) -- формирует конкретные критерии успеха (минимум 1-2)
  3. Вынесение вердиктов (Verdict Generation) -- оценивает каждый критерий по 5-уровневой шкале
  4. Агрегация оценок (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 Строгость агрегации (меньше = строже)

Обязательные поля

Поле Обязательно
input Да
actual_output Да

Использование

Одноходовой сценарий

В простейшем случае вы оцениваете один обмен репликами между пользователем и ассистентом:

from eval_lib import TaskSuccessRateMetric, EvalTestCase, evaluate
import asyncio

test_case = EvalTestCase(
    input="Help me write a regex to match email addresses.",
    actual_output="Here's a regex for email matching: `[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}`. This handles most standard email formats."
)

metric = TaskSuccessRateMetric(model="gpt-4o", threshold=0.7)
results = asyncio.run(evaluate([test_case], [metric]))

Многоходовой (диалоговый) сценарий

Для оценки многоходовых диалогов используется ConversationalEvalTestCase. Метрика учитывает всю траекторию диалога, включая то, как ассистент уточнял требования и постепенно выполнял задачу:

from eval_lib import (
    ConversationalEvalTestCase,
    EvalTestCase,
    evaluate_conversations,
    TaskSuccessRateMetric,
)

conversation = ConversationalEvalTestCase(
    turns=[
        EvalTestCase(
            input="I need to set up a CI/CD pipeline for my Node.js project.",
            actual_output="I can help with that! Are you using GitHub Actions, GitLab CI, or another platform?"
        ),
        EvalTestCase(
            input="GitHub Actions.",
            actual_output="Here's a workflow file for your Node.js project: [provides complete .github/workflows/ci.yml with test, lint, and deploy steps]"
        ),
        EvalTestCase(
            input="Can you add caching for node_modules?",
            actual_output="Sure! Add this caching step: [provides cache action configuration with hash-based key]"
        ),
    ]
)

metric = TaskSuccessRateMetric(model="gpt-4o", threshold=0.7)
results = asyncio.run(evaluate_conversations([conversation], [metric]))

Стоимость

4 вызова LLM API за одну оценку.

Рекомендации

  • Используйте совместно с Tool Correctness для агентов, которые решают задачи с помощью инструментов -- это позволит оценить и результат, и процесс
  • Для многоходовых диалогов метрика учитывает всю траекторию разговора, а не только последний ход
  • Установите более низкий порог (0.5) для сложных, открытых задач, где идеальное выполнение маловероятно
  • Параметр temperature контролирует строгость агрегации: значение 0.1 сильно штрафует за невыполненные критерии, а 1.0 -- более снисходительно