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

Детекция ошибок инструментов (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 за одну оценку.