Успешность задач (Task Success Rate)¶
Метрика Task Success Rate оценивает, успешно ли AI-ассистент помог пользователю достичь его цели. Работает как с одноходовыми, так и с многоходовыми диалогами, автоматически определяя цель пользователя и генерируя критерии успеха.
Как это работает¶
Оценка проходит в четыре этапа:
- Определение цели (Goal Inference) -- анализирует диалог, чтобы понять, чего хотел пользователь
- Генерация критериев (Criteria Generation) -- формирует конкретные критерии успеха (минимум 1-2)
- Вынесение вердиктов (Verdict Generation) -- оценивает каждый критерий по 5-уровневой шкале
- Агрегация оценок (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 -- более снисходительно