Оценка и отладка: метрики, тесты, наблюдаемость
В предыдущих статьях курса мы разобрали, что AI-агент действует циклом восприятие → решение → действие → проверка, использует ReAct, планирование, инструменты, память и RAG, а затем — как это реализовать через промпты, функции и интеграции.
Эта статья отвечает на главный практический вопрос: как понять, что агент работает хорошо, и как быстро исправлять ошибки. Для этого нужны три слоя:
метрики: что считается “хорошо” в числах
тесты: как ловить регрессии до продакшна
наблюдаемость: как понять, что произошло в конкретном запуске!Общая карта того, как метрики, тесты и наблюдаемость замыкают цикл улучшения агента
Зачем оценка и отладка агентам нужны больше, чем чат-ботам
Чат-бот чаще всего “просто отвечает”. Агент делает действия и проходит много шагов. Поэтому ошибка может быть:
тихой: агент уверенно пишет неправду
дорогой: делает много вызовов модели и инструментов
опасной: выполняет нежелательное действие
сложной для воспроизведения: ошибка проявляется только при определённом порядке шаговПрактический вывод: качество агента — это не только “хороший текст”, а управляемое поведение системы.
Что именно мы оцениваем
Чтобы не путаться, разделим качество агента на измеримые области. Это поможет связать проблемы с конкретными компонентами из прошлых статей.
| Область качества | Что это значит простыми словами | Обычно связано с | Пример проблемы |
|---|---|---|---|
| Полезность | агент решает задачу пользователя | планирование, ReAct | “не дошёл до результата” |
| Достоверность | утверждения опираются на источники или данные | RAG, инструменты | “уверенно придумал факт” |
| Надёжность инструментов | вызовы функций корректные, ошибки обрабатываются | инструменты, валидация | “не тот формат параметров” |
| Стоимость и скорость | агент не тратит лишние шаги и токены | планирование, лимиты | “ходит по кругу” |
| Безопасность | агент соблюдает запреты и требует подтверждение | политика, права | “отправил наружу то, что нельзя” |
| Воспроизводимость | можно повторить запуск и понять причину | наблюдаемость | “неясно, почему так решил” |
Метрики: минимальный набор для продакшн-агента
Метрика — это число, которое можно регулярно считать и сравнивать: по версиям промпта, инструментов, базы знаний, модели.
Важно: не пытайтесь “одной метрикой” измерить всё. Лучше иметь небольшой набор, где каждая метрика отвечает за свой риск.
Метрики результата
Успешность задачи
- Что измеряем: долю запусков, где результат соответствует критерию готовности.
- Как считаем: через проверяемые условия (формат, обязательные поля, факт выполнения действия) и выборочную проверку человеком.
- Зачем: это главный индикатор, что агент вообще достигает цели.
Процент “нужно вмешательство человека”
- Что измеряем: долю случаев, где агент не смог завершить задачу без помощи.
- Зачем: помогает понять, где агент “упирается” в неопределённость, нехватку данных или слабые инструменты.
Процент эскалаций по безопасности
- Что измеряем: сколько раз сработали блокировки, approvals, запреты.
- Зачем: если значение растёт, либо пользователи часто просят запретное, либо агент неправильно трактует политику.
Метрики процесса (как агент шёл к результату)
Число шагов агента на задачу
- Что измеряем: сколько итераций “решение → действие → наблюдение” понадобилось.
- Зачем: это быстрый индикатор “зацикливаний” и неэффективного планирования.
Доля успешных вызовов инструментов
- Что измеряем: сколько вызовов завершились без ошибок и дали ожидаемый тип результата.
- Зачем: отделяет “модель ошиблась” от “инструмент сломался” и помогает приоритизировать работу.
Повторные вызовы одного и того же инструмента
- Что измеряем: сколько раз агент вызывает один инструмент с очень похожими параметрами.
- Зачем: частый признак того, что агент не понимает ответ инструмента или не умеет извлекать нужные поля.
Метрики RAG (если используете базу знаний)
Покрытие источниками
- Что измеряем: долю ответов, где агент привёл ссылки на найденные документы, когда это требовалось политикой.
- Зачем: снижает риск “правдоподобных выдумок”.
Качество извлечения
- Что измеряем: насколько часто среди топ-N найденных фрагментов есть действительно нужный.
- Как измерять проще всего: ручная разметка небольшого набора запросов и сравнение по версиям индекса.
Метрики стоимости и производительности
Задержка (latency)
- Что измеряем: время от входа до результата и время каждого шага.
- Зачем: помогает находить “узкие места” в инструментах и RAG.
Стоимость
- Что измеряем: токены, число вызовов модели, число вызовов инструментов.
- Зачем: качество без контроля стоимости редко проходит в реальный бизнес.
Как не получить “метрики, которые ничего не значат”
Привязывайте метрики к критерию готовности из постановки задачи.
Разделяйте метрики результата и процесса.
Версионируйте всё, что влияет на поведение: промпт, инструменты, индекс RAG, модель.Тесты: как ловить ошибки до продакшна
Тестирование агента отличается от тестирования обычного кода: у вас есть вероятностная модель, внешние источники данных и многошаговое поведение. Поэтому лучше комбинировать несколько типов тестов.
Уровень инструментов: тесты, которые должны быть почти как в обычной разработке
Инструменты — это “руки” агента. Если они ненадёжны, агент будет выглядеть плохим, даже если модель сильная.
Юнит-тесты инструментов
- проверка валидации входов
- проверка типов выходов
- проверка обработки ошибок
Контрактные тесты
- гарантируют, что схема инструмента не изменилась неожиданно
- особенно важны, если инструментами пользуются несколько агентов
Тесты прав и ограничений
- агент не может вызвать “опасный” инструмент без нужного режима или подтверждения
Уровень промпта и формата: тесты предсказуемости
Тесты формата ответа
- если агент должен вернуть
JSON, проверяйте это валидатором
- если должен заполнить шаблон, проверяйте наличие всех разделов
Регрессионные сценарии (golden set)
- небольшой набор типовых кейсов, на которых вы сравниваете поведение между версиями
- важно хранить не только “ожидаемый текст”, но и ожидаемые свойства: какие инструменты вызваны, какие источники использованы
Тесты запретов
- набор входов, которые пытаются “уговорить” агента нарушить политику
- ожидаемый результат: отказ, запрос подтверждения или безопасная альтернатива
Полезный ориентир по типовым рискам LLM-приложений — OWASP.
OWASP Top 10 for LLM ApplicationsУровень поведения агента: сценарные тесты многошагового цикла
Сценарный тест — это имитация реального процесса: вход → несколько шагов → итог.
Подготовьте “среду теста”
- стаб-функции инструментов (возвращают фиксированные ответы)
- фиксированный набор документов RAG
Опишите ожидаемые свойства
- агент должен построить план
- агент должен сделать не больше X шагов
- агент должен вызвать конкретный инструмент при конкретном условии
Прогоняйте сценарии при каждом изменении
- промпта
- инструментов
- базы знаний
- модели
Как тестировать то, что “не всегда детерминировано”
Тестируйте не только текст, а инварианты:
- “должен быть указан источник”
- “не должно быть внешней отправки без approval”
- “должны быть заполнены поля A, B, C”
Используйте “режим сухого прогона”
- агент показывает план и предполагаемые вызовы инструментов
- система ничего реально не изменяет
Разделяйте тесты на быстрые и дорогие
- быстрые: формат, инструменты, запреты
- дорогие: длинные сценарии, ручная оценка
Наблюдаемость: как понять, что произошло в конкретном запуске
Наблюдаемость — это способность ответить на вопросы:
что агент видел?
почему он выбрал это действие?
какие инструменты вызывал и что они вернули?
на каком шаге сломался?Минимальные сущности, которые нужно логировать
Идентификатор задачи
Версии
- версия промпта или политики
- версия кода инструментов
- версия индекса RAG или набора документов
- модель и параметры (если применимо)
План
- исходный план и изменения плана
Каждый шаг агента
- входные данные шага
- выбранное действие
- результат инструмента или ошибка
RAG-контекст
- какие документы и фрагменты подставлены
- ссылки, даты, версии документов
Причина остановки
- “готово”
- “достигнут лимит шагов”
- “нужно подтверждение”
- “ошибка инструмента”
Логи, метрики, трассировка: простое объяснение
Логи: подробные записи что произошло (хорошо для отладки отдельных кейсов).
Метрики: числа как часто и насколько (хорошо для мониторинга трендов).
Трассировка (tracing): “цепочка шагов” запроса через компоненты (хорошо для многошаговых агентов и интеграций).Если вы строите систему с несколькими сервисами, полезно смотреть в сторону стандартов наблюдаемости.
OpenTelemetryСтруктурированные логи: что это и почему важно
Структурированный лог — это лог, который записан как набор полей, а не как “просто строка текста”. Тогда вы можете фильтровать и агрегировать.
Пример полей, которые обычно окупаются:
| Поле | Зачем |
|---|---|
| task_id | связать все шаги в одну историю |
| prompt_version | понимать, после какого изменения начались проблемы |
| step_index | видеть, где именно ломается |
| tool_name | быстро находить проблемный инструмент |
| tool_status | отделять ошибки инструмента от ошибок рассуждения |
| rag_docs | проверять, какие источники реально использовались |
| stop_reason | ловить зацикливания и “ранние остановки” |
Отладка: практический алгоритм, когда агент ведёт себя плохо
Ниже — простой порядок действий, который связывает всё из курса: промпт, инструменты, RAG, планирование, безопасность.
Шаг за шагом
Воспроизведите запуск
- возьмите
task_id
- убедитесь, что версии промпта, инструментов и RAG совпадают
Проверьте критерий готовности
- иногда “ошибка” оказывается тем, что критерий результата не был чётко определён
Посмотрите план и его изменения
- типичный баг: план есть, но агент его не соблюдает
- типичный баг: план не пересобирается, когда пришли новые данные
Разберите цепочку вызовов инструментов
- корректные ли параметры
- понятны ли ошибки
- не нужен ли инструмент “поменьше и построже” вместо “универсального”
Если есть RAG — проверьте источники
- были ли подставлены релевантные фрагменты
- нет ли противоречащих документов
- не слишком ли большие фрагменты попадают в контекст
Проверьте политику и безопасности
- было ли место, где нужен approval
- не слишком ли широкие права у агента
Исправьте причину и добавьте тест
- каждое исправление должно увеличивать набор тестов, чтобы ошибка не вернулась
Типовые “симптомы” и что чинить
| Симптом | Частая причина | Что сделать |
|---|---|---|
| Агент “ходит кругами” | нет критерия остановки, слабое планирование | лимит шагов, явный план, проверка прогресса |
| Агент уверенно ошибается | нет проверок по источникам | RAG с цитированием, инструмент проверки факта |
| Агент часто ломает формат | промпт не фиксирует формат, нет валидатора | жёсткий формат + автоматическая валидация |
| Много ошибок инструментов | слабая схема параметров, нет валидации | строгие контракты, понятные ошибки |
| Непредсказуемые результаты | нет версионирования и логов | фиксировать версии, логировать контекст |
| Долго отвечает | слишком много шагов или медленные инструменты | профилирование шагов, кэш, оптимизация RAG |
Мини-чек-лист перед запуском в продакшн
Определён критерий готовности результата.
Настроены метрики результата, процесса, стоимости и безопасности.
Есть набор регрессионных сценариев.
Инструменты покрыты юнит- и контрактными тестами.
Включены структурированные логи, есть task_id и версии.
Для рискованных действий включён approval.
Есть лимиты: шаги, токены, время.Полезные материалы
OWASP Top 10 for LLM Applications
OpenTelemetry
ReAct: Synergizing Reasoning and Acting in Language ModelsИтоги
Метрики, тесты и наблюдаемость превращают агента из “демо, которое иногда работает” в инженерную систему.
Метрики показывают, что именно улучшилось или ухудшилось после изменений.
Тесты ловят регрессии в инструментах, промптах, RAG и политике до продакшна.
Наблюдаемость позволяет воспроизвести запуск, увидеть шаги ReAct, вызовы инструментов, источники RAG и причину остановки.В связке с материалами курса это замыкает полный цикл разработки: архитектура → реализация → контроль качества → улучшения.