Детекция ошибок инструментов (Tool Error Detection)¶
Метрика Tool Error Detection выявляет ошибки в паттернах использования инструментов/функций AI-агентом. В отличие от метрики Tool Correctness, которая проверяет какие инструменты были вызваны, эта метрика анализирует как они были использованы -- правильность параметров, порядок вызовов, обработку ошибок и другие аспекты.
Типы обнаруживаемых ошибок¶
| Тип ошибки | Описание |
|---|---|
parameter_error | Неправильные типы данных, отсутствующие обязательные параметры, невалидные значения |
invalid_function | Вызов несуществующих или недоступных функций |
sequence_error | Вызов инструментов в неправильном порядке (например, бронирование до поиска) |
result_ignored | Игнорирование результатов инструмента или его сообщений об ошибках |
repeated_failure | Повторение одной и той же ошибки несколько раз |
error_handling | Некорректная обработка ошибок, ложные заявления об успехе |
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | обязательный | Любая модель: "gpt-4o", "anthropic:claude-3-5-sonnet-latest", "google:gemini-2.0-flash", "ollama:llama3" или CustomLLMClient |
threshold | float | 0.7 | Минимальный порог уверенности |
error_types | list[str] | все типы | Какие типы ошибок проверять |
verbose | bool | False | Включить подробное логирование |
Обязательные поля¶
| Поле | Обязательно |
|---|---|
input | Да |
actual_output | Да |
Метрика восстанавливает историю вызовов инструментов из actual_output. Если в тесткейсе дополнительно передан структурированный tool_calls или поле context — они используются как есть; иначе как текстовый fallback берётся expected_output.
Использование¶
from eval_lib import ToolsErrorMetric, EvalTestCase, evaluate
import asyncio
test_case = EvalTestCase(
input="Get the user's order history and calculate the total spent.",
actual_output="The user has spent $1,500 total across 12 orders.",
tools_called=["get_user_orders", "calculate_total"],
reasoning="Called get_user_orders which returned 12 orders, then calculate_total to sum them up."
)
metric = ToolsErrorMetric(
model="gpt-4o",
threshold=0.7,
error_types=["parameter_error", "sequence_error", "result_ignored"]
)
results = asyncio.run(evaluate([test_case], [metric]))
Проверка только определённых типов ошибок¶
Вы можете ограничить проверку конкретными типами ошибок, если вас интересуют только они:
# Only check for parameter and sequence errors
metric = ToolsErrorMetric(
model="gpt-4o",
threshold=0.7,
error_types=["parameter_error", "sequence_error"]
)
Формат результата¶
Лог оценки отражает то, что вернул LLM-судья, плюс служебные поля метрики:
result.evaluation_log = {
"detected": True,
"confidence": 0.85,
"reason": "calculate_total был вызван до того, как get_user_orders вернул данные",
"error_types": ["sequence_error"],
"errors": [
{
"type": "sequence_error",
"description": "calculate_total был вызван до того, как get_user_orders вернул данные",
}
],
"error_severity": "medium",
"user_input": "...",
"tool_history": "...",
"ai_response": "...",
"error_types_filter": ["parameter_error", "sequence_error", "result_ignored"],
"score": 0.85,
"threshold": 0.7,
"success": False,
}
Важно:
confidence-- одно общее значение, а не отдельное для каждой ошибки.- Элементы
errorsсодержат толькоtypeиdescription. scoreравенconfidenceприdetected=True, иначе0.0.
Стоимость¶
1 вызов LLM API за одну оценку.