Корректность инструментов (Tool Correctness)¶
Метрика Tool Correctness оценивает, вызвал ли AI-агент правильные инструменты/функции для обработки запроса пользователя. Это чисто алгоритмическая метрика, которая не требует обращений к LLM, что делает её бесплатной и мгновенной.
Как это работает¶
Метрика поддерживает три режима оценки, каждый из которых подходит для разных сценариев:
Неточное совпадение (по умолчанию)¶
Вычисляет долю ожидаемых инструментов, которые были фактически вызваны, независимо от порядка вызовов или наличия дополнительных инструментов. Это наиболее мягкий режим: если агент вызвал все нужные инструменты плюс несколько дополнительных, оценка всё равно будет максимальной.
Точное совпадение (Exact Match)¶
Требует точного совпадения набора вызванных инструментов с ожидаемым -- без лишних инструментов и без пропущенных. Используйте этот режим, когда важно, чтобы агент не совершал ненужных действий.
Проверка порядка (Ordering Check)¶
Использует алгоритм наибольшей общей подпоследовательности (Longest Common Subsequence, LCS) для оценки того, были ли инструменты вызваны в правильном порядке, с взвешенной оценкой. Полезно, когда последовательность операций имеет значение (например, сначала поиск, потом бронирование).
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
threshold | float | 0.5 | Минимальная оценка для прохождения |
exact_match | bool | False | Требовать точное совпадение набора инструментов |
check_ordering | bool | False | Оценивать порядок вызова инструментов |
Обязательные поля¶
| Поле | Обязательно |
|---|---|
tools_called | Да |
expected_tools | Да |
Использование¶
from eval_lib import ToolCorrectnessMetric, EvalTestCase, evaluate
import asyncio
test_case = EvalTestCase(
input="Search for hotels in Paris and book the cheapest one.",
actual_output="I found and booked Hotel Le Marais for $120/night.",
tools_called=["search_hotels", "sort_by_price", "book_hotel"],
expected_tools=["search_hotels", "book_hotel"],
)
# Non-exact: passes (all expected tools were called)
metric = ToolCorrectnessMetric(threshold=0.5)
# Exact: fails (extra tool "sort_by_price" was called)
metric_exact = ToolCorrectnessMetric(threshold=0.5, exact_match=True)
# With ordering: checks if search happened before booking
metric_ordered = ToolCorrectnessMetric(threshold=0.5, check_ordering=True)
results = asyncio.run(evaluate([test_case], [metric]))
Примеры оценки¶
Ниже приведены конкретные примеры расчёта оценки в каждом режиме.
Неточное совпадение¶
expected_tools = ["search", "book"]
tools_called = ["search", "validate", "book"]
# Score: 1.0 (all expected tools found)
tools_called = ["search"]
# Score: 0.5 (1 of 2 expected tools found)
tools_called = ["validate"]
# Score: 0.0 (none of expected tools found)
В этом режиме оценка рассчитывается как отношение найденных ожидаемых инструментов к общему числу ожидаемых. Дополнительные инструменты не штрафуются.
Точное совпадение¶
expected_tools = ["search", "book"]
tools_called = ["search", "book"]
# Score: 1.0 (exact match)
tools_called = ["search", "validate", "book"]
# Score: 0.0 (extra tool present)
В режиме точного совпадения любой лишний или пропущенный инструмент приводит к нулевой оценке.
Стоимость¶
0 вызовов LLM API -- чисто алгоритмическое сравнение. Эта метрика полностью бесплатна и выполняется мгновенно.