Оценка качества, тестирование и наблюдаемость агентов
Зачем это нужно именно агентам
В предыдущих статьях курса мы построили каркас агентной системы:
архитектурные паттерны и базовый цикл планирование → действие → проверка → обновление состояния
план, память и контекстный пакет как способ управлять многошаговостью
инструменты как контракты, интеграции, политики доступа и нормализация результатовСледующий шаг до внедрения — сделать агента измеримым и отлаживаемым. Для этого нужны три слоя:
оценка качества: как понять, что агент решает задачу правильно и стабильно
тестирование: как не ломать поведение при изменениях промпта, модели, инструментов и политики
наблюдаемость: как видеть, что происходит внутри цикла шагов, и быстро находить причины сбоевГлавная идея: в продакшене вам нужно контролировать не только финальный текст ответа, но и процесс: план, выбор инструментов, результаты вызовов, обновление состояния, проверки и остановку.
Что значит «качество агента»
Качество агентной системы почти всегда многокритериальное. Обычно оно раскладывается на несколько измеримых осей.
Результативность
Успех задачи: достигнут ли критерий успеха (например, тикет создан, данные обновлены, ответ соответствует политике).
Точность фактов: не придумывает ли агент факты, корректно ли использует найденные источники.
Формат: соответствует ли результат требуемой схеме (JSON, шаблон письма, поля формы).Эффективность
Задержка: время до первого полезного ответа и до завершения задачи.
Стоимость: количество шагов, токены, число вызовов инструментов, объём retrieval.
Стабильность: одинаково ли агент работает на похожих кейсах и при небольших вариациях входа.Безопасность и комплаенс
Политики действий: не делает ли агент запрещённых операций.
Конфиденциальность: не утекли ли секреты и персональные данные в логи или ответ.
Устойчивость к инъекциям: не подчиняется ли агент вредоносным инструкциям из документов или внешних источников.Полезная практика — заранее зафиксировать, какие метрики считаются must-have, а какие nice-to-have, иначе вы получите вечный спор «качество выросло или упало».
Артефакты, которые нужно уметь оценивать
У агента есть несколько уровней результата, и тесты должны покрывать их все.
| Уровень | Что оцениваем | Типичная проверка |
|---|---|---|
| Финальный результат | соответствует ли цели и формату | валидатор схемы, бизнес-правила, проверка ссылок |
| Шаги и решения | не блуждает ли агент, корректно ли выбирает инструменты | проверка траектории: шаги, ретраи, причины ошибок |
| Инструменты | корректны ли контракты и обработка ошибок | контрактные тесты, идемпотентность, ретраи |
| Контекст и память | не «засоряется» ли контекст, не пишется ли мусор в память | политика записи, TTL, проверка источников |
| Наблюдаемость | можно ли дебажить по логам и трассам | наличие trace_id, step_id, структурные события |
Оценка качества: офлайн и онлайн
Офлайн-оценка (до продакшена)
Офлайн-оценка отвечает на вопрос: на типовых кейсах агент работает лучше/хуже после изменений?
Что обычно делают:
Набор эталонных сценариев (golden set): реальные или синтетические кейсы с ожидаемыми результатами.
Чёткие рубрики: критерии, по которым ставится оценка (формат, полнота, корректность действий, безопасность).
Автоматические проверки там, где возможно: валидаторы, тесты, сравнение со схемой.Что важно учесть для агентов:
тестируйте не только финальный ответ, но и траекторию действий
отдельно проверяйте ситуации, где инструменты возвращают ошибки, таймауты, частичные данные
фиксируйте версии: промпт, модель, схемы инструментов, политики, конфигурации retrievalЕсли вы используете автоматического «судью» на базе модели, относитесь к этому как к эвристике и старайтесь сочетать:
детерминированные проверки (схемы, правила)
проверку по источникам (цитирование/ссылки на документы)
выборочную ручную валидацию сложных кейсовСистематический обзор подходов к оценке языковых моделей (полезно как ориентир для рубрик и измерений): Holistic Evaluation of Language Models (HELM).
Онлайн-оценка (в продакшене)
Онлайн-оценка отвечает на вопрос: что реально происходит у пользователей и почему?
Типовые практики:
Поведенческие метрики: процент успешных завершений, среднее число шагов, доля ретраев, доля отказов по политике.
Качество по прокси: доля обращений к оператору, повторные обращения, отмены действий.
Выборочный аудит: сэмплирование сессий и ручной разбор траекторий.
A/B-тесты: сравнение версий агента по выбранным метрикам, если бизнес-процесс это допускает.Ключевой момент: онлайн-метрики должны быть привязаны к вашей схеме состояния и логам инструментов, иначе вы увидите только «плохо», но не поймёте где ломается цикл.
Стратегия тестирования: «пирамида» для агентов
Удобно мыслить тестированием как слоями — от дешёвых и быстрых к дорогим и реалистичным.
Тесты инструментов (самые дешёвые и обязательные)
Это продолжение статьи про инструменты и контракты.
Покрывайте тестами:
валидацию входов по JSON Schema или аналогичной схеме
нормализацию выхода (возвращаем факты, а не «простыню»)
модель ошибок (error_code, retryable, детали)
идемпотентность для операций с побочными эффектами
маскирование секретов в логахЕсли у вас описан API, полезны контрактные проверки через спецификацию: OpenAPI Specification.
Юнит-тесты агентной логики вокруг модели
В продакшен-агенте много кода, который не является моделью:
сборка контекстного пакета
применение политик (что разрешено)
маршрутизация инструментов и ретраи
обновление состояния и правила остановкиЭто должно тестироваться детерминированно, без вызова LLM.
Интеграционные тесты агента с моками инструментов
Чтобы проверить многошаговость, но не зависеть от внешних систем:
подменяйте инструменты моками, которые возвращают заранее заданные ответы
прогоняйте сценарии, где ответы меняются по ходу шагов
проверяйте, что агент корректно обновляет состояние и пересобирает планПлюс такого подхода: вы тестируете траектории и обработку ошибок стабильно и быстро.
End-to-end тесты с реальными системами (дорого и ограниченно)
Оставьте небольшой набор E2E на тестовом окружении:
минимальный happy path
1–2 критичных негативных кейса (например, rate limit, отказ по правам)Главная цель E2E — убедиться, что интеграции, авторизация и политики действительно работают вместе.
Тестирование поведения модели: регрессии, недетерминизм, «дрейф»
В отличие от обычного софта, поведение LLM недетерминировано и может меняться при обновлении модели, параметров или retrieval.
Практики, которые помогают:
Регрессионные наборы с допусками
Вместо «строго совпало слово в слово» используйте:
проверку структуры (валидный JSON, нужные поля)
проверку ключевых фактов (наличие обязательных утверждений)
проверку запрещённых вещей (не упомянуты секреты, нет запрещённых действий)Тестирование траекторий, а не только ответа
Фиксируйте ожидания вида:
«для этого кейса агент обязан вызвать kb.search не более 2 раз»
«при ошибке RATE_LIMIT агент должен подождать/запросить повтор, а не создавать дубликат»
«для операции с побочным эффектом должен быть idempotency_key»Это напрямую связано с материалами про план и инструменты.
Версионирование всего, что влияет на результат
Чтобы результат был воспроизводимым при разборе инцидентов, логируйте:
версию промпта и системных инструкций
версию схем инструментов
конфигурацию retrieval (индекс, top-k, фильтры)
модель и параметры генерацииНегативные тесты и red teaming
Для агентных систем особенно важны негативные сценарии:
prompt injection из документов и веб-страниц
попытка заставить агента обойти политику действий
утечки секретов через логиКак чеклист по типовым уязвимостям API-интеграций полезен: OWASP API Security Top 10.
Наблюдаемость: что логировать и как дебажить
Наблюдаемость нужна, чтобы отвечать на вопросы:
почему агент сделал именно эти шаги
где случилась ошибка: модель, инструмент, политика, контекст, память
почему выросли стоимость и задержкаТри сигнала наблюдаемости
Классическая модель:
логи: событийная история (что произошло)
метрики: агрегированные числа (сколько и как часто)
трейсы: связанный путь запроса через шаги и сервисыОдин из стандартов для распределённой трассировки и метрик: OpenTelemetry.
События, которые стоит логировать на каждом шаге
Чтобы это работало системно, договоритесь о едином событии шага (step event). Минимальный набор полей:
trace_id: идентификатор сессии/запроса
step_id: номер или UUID шага
goal: краткая цель (из состояния)
plan_step: текущий шаг плана и статус
tool_name: имя инструмента или none
tool_input_summary: нормализованная выжимка входов (без секретов)
tool_result_summary: нормализованный результат или код ошибки
state_diff: какие факты добавлены/изменены
stop_reason: почему остановились (успех, лимит, ошибка, политика)
timing_ms: длительность шага и инструмента
cost: число токенов и/или стоимость шага, если доступноЭта схема напрямую продолжает принцип из прошлых статей: в состоянии и контексте хранить факты и решения, а сырые детали — в журналах.
Метрики, которые обычно дают максимальную пользу
| Метрика | Что показывает | Что делать при деградации |
|---|---|---|
| Success rate | доля успешных завершений | разбор траекторий неуспеха по классам |
| Steps per task | насколько агент «блуждает» | улучшить планирование, лимиты, подсказки выбора инструментов |
| Tool error rate | стабильность интеграций | ретраи, таймауты, фасад, деградационные режимы |
| Retry rate | качество обработки ошибок | различать retryable/не retryable, улучшить классификацию ошибок |
| Cost per task | стоимость решения | уменьшить retrieval, нормализовать ответы инструментов, резать контекст |
| Policy deny rate | частота отказов политикой | проверить UX, уточнение прав, ошибки маршрутизации |
Дебаг-процедура: от симптома к причине
Полезно иметь фиксированный порядок разбора инцидента.
Найдите сессии с плохим результатом по метрикам.
Откройте трейсы и восстановите траекторию шагов.
Определите класс сбоя:
1. неверная цель/критерии успеха
2. плохой план или остановка
3. неправильный выбор инструмента
4. ошибка инструмента или интеграции
5. плохой контекст (лишнее/нехватка)
6. загрязнение памяти
7. блокировка политикой
Для класса сбоя добавьте тест или мониторинг, чтобы он ловился раньше.!Как наблюдаемость «прикрепляется» к каждому шагу агентного цикла и превращается в дашборды и разбор инцидентов
Как связать оценку качества, тесты и наблюдаемость в единый контур
Самая рабочая модель — сделать так, чтобы одна и та же телеметрия использовалась и в тестах, и в продакшене.
Практический протокол:
Определите «схему шага» для логов (как выше) и используйте её везде.
Соберите golden set сценариев и прогоняйте агента в тестовом рантайме.
Для каждого прогона сохраняйте:
1. финальный результат
2. траекторию шагов
3. нормализованные вызовы инструментов
Стройте отчёт по метрикам качества и по метрикам процесса (шаги, стоимость, ошибки).
Перед релизом делайте регрессию на golden set.
В продакшене включайте сэмплирование трейсов и выборочный аудит тех же типов сценариев.Так вы превращаете «агент ответил странно» в конкретное: на шаге p2 неверно выбран инструмент из-за неоднозначного описания или retrieval вернул нерелевантный фрагмент, и это видно по источникам.
Практический итог
Качество агента — это не только точность текста, но и успешность действий, стоимость, задержка, безопасность и стабильность.
Тестируйте агент «пирамидой»: инструменты и агентная логика детерминированно, затем интеграции с моками, затем небольшой набор E2E.
Оценивайте и регрессируйте не только финальный ответ, но и траекторию шагов.
Наблюдаемость должна быть встроена в каждый шаг: структурные события, метрики и трейсы с trace_id и step_id.
Лучший результат даёт единый контур: телеметрия → офлайн-оценка → регрессии → продакшен-мониторинг → улучшения.