Strands Evals SDK: автоматический анализ сбоев AI-агентов | AiManual
AiManual Logo Ai / Manual.
21 Июн 2026 Гайд

Автоматическое обнаружение сбоев AI-агентов и анализ первопричин с Strands Evals SDK

Пошаговое руководство по использованию Strands Evals SDK для детекции ошибок и root cause analysis в трейсах AI-агентов. Экономьте часы отладки в production.

Реклама
partv1

Добро пожаловать в анархию: ваш AI-агент сломал production, а вы даже не знаете, почему

Типичный вечер DevOps: CI/CD провалился, алерт разрывает слак, но в логах — каша из тысяч токенов, вложенных вызовов инструментов и бессмысленных повторных попыток. Ваш AI-агент, который должен был автоматизировать деплой, вместо этого создал 50 инстансов MongoDB и забыл удалить тестовую БД. Знакомо?

Проблема в том, что современные AI-агенты — это черные ящики с петлями обратной связи. Они вызывают функции, передают контекст между LLM-запросами, иногда галлюцинируют параметры API. Трейсы выполнения (execution traces) разрастаются до гигантских размеров, и вручную найти точку отказа — как иголку в стоге сена. Мы уже видели, чем это заканчивается: AI-агент атаковал разработчика на GitHub — и это не фейк, а реальные кейсы, когда автономный код выходил из-под контроля.

Объяснение: почему ручной анализ не работает — трейсы агентов содержат шаги с разными LLM-запросами и вызовами инструментов. Ошибка может быть не в последнем шаге, а в неверном параметре, переданном на третьем шаге. Без автоматизированного инструмента вы будете тратить часы на перебор.

Именно для этого появился Strands Evals SDK — библиотека, которая встраивается в ваш пайплайн и автоматически детектирует аномалии в трейсах агентов, а затем выполняет root cause analysis (RCA) с рекомендациями по исправлению. Если вы уже знакомы с экосистемой Strands (например, созданием мультиагентных систем с Llama 4 и Amazon Bedrock), то этот SDK станет вашим must-have в production.

Что за зверь Strands Evals SDK?

Это не очередной мониторинговый инструмент, который просто показывает графики latency. Strands Evals заточен под специфику AI-агентов:

  • Детекция сбоев — находит шаги, где агент зациклился, вызвал несуществующий инструмент, или вернул некорректный JSON.
  • Анализ первопричин — не просто говорит «тут ошибка», а показывает цепочку: «Ошибка в вызове инструмента X из-за неверного параметра Y, который был передан на шаге 2».
  • Рекомендации по фиксу — часто генерирует конкретное исправление: «Замените параметр 'region' на 'us-east-1' или добавьте fallback в промпт».

SDK работает на уровне трейсов — вы просто передаете ему массив шагов (каждый с типом, входом, выходом, ошибкой), и он возвращает структурированный отчёт. Никакой магии, только детерминированные проверки + LLM-анализ для сложных кейсов.

Как это выглядит в коде (без лишних слов)

Допустим, ваш агент выполняет задачу: «создать S3 bucket и загрузить файл». Вот как может выглядеть трейс (упрощённо):

trace = [
    {"step": 1, "type": "llm_call", "input": "create bucket in us-west-2", "output": "{\"action\": \"create_bucket\", \"params\": {\"bucket\": \"my-bucket\", \"region\": \"us-west-2\"}}"},
    {"step": 2, "type": "tool_call", "name": "create_bucket", "input": {"bucket": "my-bucket", "region": "us-west-2"}, "output": {"success": True, "location": "https://s3-us-west-2.amazonaws.com/my-bucket"}},
    {"step": 3, "type": "llm_call", "input": "upload file to my-bucket", "output": "{\"action\": \"upload_file\", \"params\": {\"path\": \"/data/file.txt\", \"bucket\": \"my-bucket\"}}"},
    {"step": 4, "type": "tool_call", "name": "upload_file", "input": {"path": "/data/file.txt", "bucket": "my-bucket"}, "output": {"error": "NotFoundError: bucket 'my-bucket' does not exist"}}
]

На четвёртом шаге — ошибка. Но почему bucket не существует? Вручную надо вспоминать: может, регион не совпал? может, bucket удалили? Агент думает, что bucket есть. Strands Evals пробежится по трейсу и скажет: «Ошибка в шаге 4: инструмент upload_file получил несуществующий bucket. Первопричина — шаг 3: LLM не передала region в параметры, хотя в шаге 1 bucket создавался с region. Рекомендация: включить в промпт напоминание передавать все параметры из предыдущих шагов».

Красота? Давайте настроим.

Установка и первая калибровка

1Подготовка окружения

Требуется Python 3.10+ и pip. Убедитесь, что у вас установлена последняя версия на 21.06.2026:

pip install strands-evals --upgrade

Предупреждение: На старых версиях (< 0.8.0) был баг с кешированием результатов RCA. Обязательно обновитесь, иначе получите устаревший анализ.

2Создаём Evaluator

SDK предоставляет класс TraceEvaluator. Вы можете настроить, какие проверки включить (быстрые детерминированные или глубокие LLM-based). Пример:

from strands_evals import TraceEvaluator, EvalConfig

config = EvalConfig(
    detect_loops=True,          # поиск циклов из повторяющихся шагов
    detect_missing_context=True, # проверка, что все нужные параметры переданы
    deep_llm_analysis=False,     # для быстрых пайплайнов можно выключить
    max_steps_to_analyze=100
)
evaluator = TraceEvaluator(config=config)

3Запускаем анализ

result = evaluator.evaluate(trace)
print(result.summary())
# Output:
# Error detected at step 4: bucket not found
# Root cause: step 3 - LLM failed to include 'region' in upload_file call
# Fix suggestion: add context reminder in prompt for step 3

Готово. Вы только что сэкономили себе час дебага.

Под капотом: как SDK понимает, что не так?

Здесь два слоя. Первый — детерминированные эвристики. SDK проверяет:

  • Повторяется ли один и тот же вызов подряд (цикл ошибок).
  • Есть ли вызов инструмента, который не был объявлен в конфиге агента.
  • Изменяется ли формат вывода шагов (например, вдруг вместо JSON — plain text).

Второй слой — LLM-анализ для сложных кейсов. Если эвристики не справились, SDK отправляет контекст трейса (обезличенный, если вы настроили privacy) в специальную модель Strands, которая обучена на тысячах сценариев отладки. Она возвращает структурированную причину. Кстати, именно этот механизм позволяет SDK отличать простой таймаут от «агент не знал, какой регион использовать».

Если вы хотите глубже понять, как защитить свои данные от утечек при использовании таких LLM-анализов, обязательно прочитайте статью "Безопасность AI-агентов: как защитить данные от утечек и инъекций через промпты". Там показано, как настроить privacy-фильтры, чтобы SDK не отправлял чувствительные данные.

Разбор полётов: интерпретируем отчёт

Метод evaluate() возвращает объект EvalResult с полями:

ПолеОписание
has_errorbool — есть ли критическая ошибка
errorsсписок объектов EvalError с деталями
root_causesсписок строк с первопричинами (если удалось определить)
fix_suggestionsрекомендации по исправлению
trace_summaryкраткое описание каждого шага с пометками

Пример более полного отчёта:

result = evaluator.evaluate(trace_with_error)
for error in result.errors:
    print(f"Шаг {error.step}: {error.message}")
    print(f"Первопричина: {result.root_causes[0]}")
    print(f"Рекомендация: {result.fix_suggestions[0]}")

Обратите внимание: если SDK не может определить первопричину (например, слишком мало данных), поле root_causes будет пустым. В таком случае стоит включить deep_llm_analysis=True и передать больше контекста — например, конфигурацию агента.

Нюансы и грабли: как НЕ надо использовать SDK

За полтора года реального использования я накопил список того, что реально бесит и как этого избежать:

  1. Не передавайте сырые трейсы со всеми стеками. SDK анализирует только шаги агента, а не все логи окружения. Если вы скормите ему 10 000 строк лога базы данных, он просто выбросит исключение по таймауту. Используйте preprocess_trace() для фильтрации.
  2. Не игнорируйте warnings. SDK может сказать «возможна проблема с контекстом, но недостаточно данных». Если вы нажмёте «пропустить», в production эта проблема проявится как «агент дважды вызвал delete_instance». Поверьте, я так обжёгся.
  3. Версии моделей имеют значение. На 21.06.2026 последняя версия SDK 1.2.0 работает оптимально с Llama 4 и GPT-5. Если вы используете более старые LLM, точность RCA падает на 20%.

Ещё один частый кейс: агент может осознанно повторять шаг после ошибки — это не баг, а ретрай. SDK по умолчанию считает повтор в пределах 3 шагов нормой. Если вам нужно другое пороговое значение, передайте параметр max_retry_steps.

💡
Совет: Встраивайте TraceEvaluator прямо в ваш CI/CD пайплайн после прогона тестов. Это даст вам immediate feedback на пулл-реквест, а не после деплоя. В статье AgentShield описано, как откатывать изменения в один клик — вместе с Evals SDK получится защита уровня 80 lvl.

Часто задаваемые вопросы

Можно ли использовать Strands Evals SDK в реальном времени (online)?

Да, но с оговорками. Для online-режима есть отдельная версия strands-evals-streaming, которая анализирует фрагменты трейса по мере поступления. Однако полный RCA выполняется только после завершения трейса или по таймауту.

Сколько это стоит?

SDK бесплатен для open-source проектов (лицензия MIT). Для enterprise есть платная версия с расширенным набором детекторов и SLA. Цены — на сайте Strands, но, спойлер, для небольших команд можно обойтись бесплатной версией.

Как SDK влияет на производительность агента?

Анализ выполняется асинхронно и не блокирует работу агента. Обычно < оценки занимают 50-200 мс для трейсов до 50 шагов. При глубоком LLM-анализе может быть до 2 секунд — это стоит учитывать при высокой нагрузке.

Можно ли интегрировать с AutoGen или CrewAI?

Да, для этого есть адаптеры. В статье AutoGen vs CrewAI я сравнил этих монстров — с Evals SDK вы сможете отлаживать любого из них.

Финальный нетривиальный совет (не пропускайте)

Многие гонятся за 100% точностью детекции. Не делайте так. Гораздо важнее скорость обнаружения. Лучше получить 2 ложных срабатывания и поймать реальный баг на 5 минут раньше, чем сидеть с идеально настроенным детектором, который молчит, а production падает. Strands Evals SDK позволяет настроить чувствительность — я рекомендую начать с агрессивных настроек (aggressive_mode=True) и постепенно их ослаблять, когда привыкнете к паттернам.

И помните: AI-агенты не станут идеальными завтра, но инструменты для их отладки — уже сегодня. Не дайте вашему агенту устроить «армагеддон» в проде, как это было с тем злополучным контрибьютором на GitHub. Используйте автоматический RCA и спите спокойно.

Подписаться на канал