Настроить chaos testing для AI-агента
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Настроить chaos testing для AI-агента
1. Цель задачи
Научиться проектировать и проводить chaos-тесты для LLM-агента, чтобы проверить его способность к graceful degradation при внезапных ошибках API, задержках и отказах. Вы должны внедрить механизмы хаотического воздействия на внешние зависимости агента (LLM API, векторная БД, база знаний), замерить метрики деградации и убедиться, что агент не падает, а корректно обрабатывает ошибки (retry, fallback, логирование).
Ключевой результат Воспроизводимый набор chaos-экспериментов, подтверждающий, что агент сохраняет работоспособность при типовых сбоях.
2. Исходные данные
Перед началом необходимо иметь:
| Что нужно | Откуда взять |
|---|---|
| Работающий AI-агент (LLM + инструменты) | Собственный pet-проект (напр. LangGraph, CrewAI, AutoGPT) или готовый шаблон из предыдущих задач |
| Тестовые сценарии запросов (10–15) | Набор пользовательских промптов, покрывающих основные функции агента |
| Инструмент chaos testing | Toxiproxy / Chaos Toolkit / или самописный эмулятор на Python |
| Мониторинг (логи, метрики) | Prometheus + Grafana / просто stdout с таймстемпами |
Если нет реального инструмента chaos testing — симулируем:
- Написать Python‑класс ChaosProxy, который перехватывает HTTP‑вызовы агента и добавляет:
- Завернуть вызовы LLM и других API через этот прокси (с помощью requests или httpx с middleware)
- Для каждого теста запускать агента в изолированном процессе с разными параметрами хаоса
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| AI-агент | LangGraph / CrewAI / Python + OpenAI SDK | Цель тестирования |
| Chaos-прокси | Python (asyncio, httpx), Toxiproxy (если доступен) | Эмуляция сбоев |
| LLM API | OpenAI / Anthropic / локальная модель | Зависимость агента |
| Контроль выполнения | pytest + фикстуры | Запуск тестов и проверка graceful degradation |
| Логирование | structlog / print + json | Сбор событий и статусов |
| Метрики | Prometheus client (опционально) / просто CSV | Latency, success rate, error rate |
4. Этапы выполнения
Этап 1: Подготовка тестового агента и сценариев (1–2 часа)
Действия
- Выберите существующего агента (или соберите простого: принимает вопрос, вызывает LLM, возвращает ответ). Агент должен иметь минимум 2 внешних вызова (LLM + поиск/векторная БД).
- Подготовьте 10–15 тестовых запросов (нормальных, пограничных). Сохраните в JSON/YAML.
- Создайте замерочную обёртку: фиксируйте время выполнения, статус ответа (OK/ERROR), количество ретраев.
Ожидаемый результат этапа Рабочий агент + набор тестовых кейсов + измерительная обёртка.
Этап 2: Реализация chaos-прокси (2–3 часа)
Действия
- Создайте модуль
chaos_proxy.pyс классом ChaosProxy:class ChaosProxy: def __init__(self, delay_range=(0.2, 2.0), error_rate=0.3, timeout_prob=0.1): self.delay_range = delay_range self.error_rate = error_rate self.timeout_prob = timeout_prob async def request(self, method, url, **kwargs): # 1. добавить случайную задержку # 2. с вероятностью error_rate вернуть HTTPError (5xx) # 3. с вероятностью timeout_prob – таймаут (asyncio.TimeoutError) # 4. иначе пропустить вызов как есть - Интегрируйте прокси с агентом: замените прямые вызовы LLM API на proxy.request(...) или используйте перехватчик httpx.AsyncClient с mount на
all://. - Напишите функцию run_chaos_test(agent, chaos_config), которая запускает агента на всех тестовых запросах и собирает статистику.
Ожидаемый результат этапа Работающий прокси, способный вносить хаос, и скрипт для запуска тестов.
Этап 3: Проведение chaos-экспериментов (2–3 часа)
Действия
- Определите базовую линию (baseline) – запуск агента без хаоса. Зафиксируйте
success_rate=100%, среднее время ответа. - Проведите серию экспериментов с разными уровнями хаоса:
- Эксперимент A низкий уровень (error_rate=0.1, delay=0.5‑1.5 сек)
- Эксперимент B средний (error_rate=0.3, delay=1‑3 сек, timeout_prob=0.1)
- Эксперимент C высокий (error_rate=0.6, delay=3‑6 сек, timeout_prob=0.3)
- Для каждого эксперимента выполните по 10 прогонов каждого тестового запроса (итого 150–200 запусков). Записывайте:
- успех/неудача запроса
- количество ретраев
- итоговое время ответа
- факт graceful degradation (агент вернул осмысленный fallback, а не exception)
- Постройте таблицу результатов:
| Эксперимент | Success rate | Avg latency (сек) | % fallback | Max retries |
|---|---|---|---|---|
| Baseline | 100% | 0.8 | 0% | 0 |
| A | 98% | 1.2 | 2% | 2 |
| B | 85% | 2.8 | 15% | 4 |
| C | 60% | 5.1 | 35% | 6 |
Ожидаемый результат этапа Заполненная таблица и осознание порогов graceful degradation.
Этап 4: Анализ и улучшение graceful degradation (1–2 часа)
Действия
- Проанализируйте, при каком уровне хаоса агент перестаёт справляться (success rate < 80% или более 30% fallback).
- Внедрите улучшения в агента:
- экспоненциальный backoff при ретраях
- fallback-ответ (“извините, сервис временно недоступен”)
- кэширование предыдущих успешных ответов
- мониторинг health-check перед вызовом
- Повторите эксперименты B и C с улучшенным агентом. Сравните метрики.
Ожидаемый результат этапа Код улучшенного агента и сравнительная таблица “до/после”.
Этап 5: Оформление отчёта (1 час)
Действия
- Напишите краткий chaos testing report (в README.md) со структурой:
- Цель
- Описание эксперимента
- Результаты (таблицы, графики)
- Выводы: при каких условиях агент деградирует приемлемо, а где требуется доработка
- Рекомендации для production
- Приложите код прокси, скрипты тестов, лог-файлы.
Ожидаемый результат этапа Единый артефакт, который можно воспроизвести и показать команде.
5. Критерии приемки (Definition of Done)
- Реализован chaos-прокси, имитирующий задержки, ошибки 5xx и таймауты с настраиваемыми вероятностями.
- Прокси интегрирован с агентом (заменён клиент HTTP).
- Проведён baseline-замер (0% хаос) – success_rate 100%.
- Проведены минимум 3 эксперимента с увеличивающимся уровнем хаоса.
- Для каждого эксперимента собраны метрики: success rate, avg latency, % fallback, max retries.
- Внесены улучшения в агента (retry с backoff, fallback сообщение).
- Сравнение “до/после” показывает прирост success rate минимум на 10 процентных пунктов на высоком уровне хаоса.
- Создан отчёт (README) с описанием эксперимента и таблицами результатов.
- Код прокси и тестов опубликован в Git-репозитории с инструкцией по запуску.
- Все тесты проходят без падений интерпретатора Python (ловятся все исключения).
6. Ожидаемый результат
Основной артефакт – репозиторий с:
chaos_proxy.py– реализация chaos-проксиagent.py– код агента (исходный и улучшенный)test_chaos.py– pytest-скрипт, запускающий экспериментыexperiments/results.csv– сырые данные замеровchaos_testing_report.md– отчёт с таблицами и выводами
Опциональные результаты:
- Графики (latency distribution, success rate vs chaos level)
- Демонстрация graceful degradation в логах (логи fallback-сообщений)
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Агент не имеет отдельного HTTP-клиента или использует нестандартный протокол | Модифицировать код агента, добавив слой абстракции для вызовов (например, через httpx.AsyncClient, который можно заменить mock/proxy) |
| Трудно воспроизвести deterministic хаос из-за случайностей | Зафиксировать random.seed для каждого эксперимента, документировать seed |
| Ретраи агента не ловятся стандартными инструментами | Встроить счётчик ретраев в прокси (свойство retry_count на запрос) или логировать на стороне агента |
| Ограничение по времени выполнения – агент может зависнуть на большом хаосе | Установить глобальный таймаут (например, 30 сек) и принудительно прерывать запрос, считая его “неуспешным” |
| Нет доступа к реальному LLM API (дорогой) | Использовать локальную LLM (например, Ollama) или симулировать LLM простой функцией с задержкой |
8. Бюджет времени (оценка)
| Этап | Время |
|---|---|
| Этап 1: Подготовка агента и сценариев | 1–2 ч |
| Этап 2: Реализация chaos-прокси | 2–3 ч |
| Этап 3: Проведение chaos-экспериментов | 2–3 ч |
| Этап 4: Анализ и улучшение agent | 1–2 ч |
| Этап 5: Оформление отчёта | 1 ч |
| Итого | 7–11 ч |
Примечание: При первом выполнении рекомендуется заложить до 12 часов, включая изучение документации и отладку.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 42 | Graceful degradation в LLM-системах |
| 89 | Retry policies и exponential backoff |
| 131 | Мониторинг latency и ошибок в агентах |
| 177 | Integration testing для AI-агентов |
| 204 | Fallback-стратегии при недоступности API |
| 288 | Chaos engineering: принципы и инструменты |
| 315 | HTTP-клиенты и timeout handling в Python |
| 401 | A/B тестирование надёжности агентов |
| 522 | Логирование и трейсинг в распределённых системах |
| 689 | Оценка пользовательского опыта при сбоях |
10. Чек-лист самопроверки
- Я понимаю, что такое graceful degradation и как его измерять (success rate, fallback rate).
- Я заменил все внешние вызовы агента на вызовы через chaos-прокси.
- Я зафиксировал baseline без хаоса и убедился, что success_rate = 100%.
- Я провёл минимум три эксперимента с разным уровнем хаоса и записал результаты.
- Я внёс улучшения в агента (backoff, fallback) и повторно протестировал на высоком уровне хаоса.
- Я оформил отчёт с таблицами и выводами, код загружен в Git.