English translation is not available yet. Showing Russian content.
Написать test plan для агента
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Написать test plan для агента
1. Цель задачи
Научиться проектировать покрытие тестами]] AI-агентов, включая функциональную корректность, устойчивость к edge‑cases, безопасность (prompt injection / tool misuse) и производительность. Вы разработаете test plan — документ, описывающий сценарии, инструменты и метрики для обеспечения качества агента в production.
Ключевой результат документ‑plan|test plan, который может быть напрямую использован для ручного или автоматизированного тестирования агента и гарантирует прохождение всех критичных сценариев.
2. Исходные данные
Перед началом необходимо иметь:
| Что нужно | Откуда взять |
|---|---|
| Архитектура агента (описание компонентов: LLM, инструменты, memory, RAG) | Собственный пет‑проект (Pet 160) или готовое описание от преподавателя |
| Список инструментов агента (search, calculator, email sender, db query и т.д.) | Документация агента или код |
| Базовая спецификация поведения (user stories / acceptance criteria) | README / техническое задание на агента |
| API/CLI для запуска агента в тестовом окружении | Среда разработки (staging) или симуляция |
Если нет реального агента — симулируем:
- Разверните простого агента на LangChain / Kernel|Semantic Kernel с 2–3 инструментами (например, поиск в Wikipedia и калькулятор). Используйте публичный LLM API (OpenAI / Anthropic).
- Создайте 5–10 типовых пользовательских запросов, которые покрывают все инструменты и частые ошибки (некорректный ввод, отказ от выполнения, мульти‑шаговые сценарии).
- Зафиксируйте версию агента и конфигурацию LLM.
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Документирование | Markdown / Notion / Confluence | Создание test plan |
| Язык программирования | Python 3.10+ | Написание автоматических тестов (опционально) |
| Фреймворк тестирования | pytest + pytest‑asyncio | Юнит‑ и интеграционные тесты агента |
| LLM‑агент | LangChain / Semantic Kernel / Haystack | Объект тестирования |
| Мониторинг и логи | Prometheus + Loki (или локальный лог‑файл) | Сбор метрик производительности |
| Инструменты проверки | Pydantic, pytest‑mock | Валидация типов, моки внешних API |
| Безопасность | Custom prompt‑injection suite | Тесты на инъекции |
4. Этапы выполнения
Этап 1: Определение архитектуры агента и классификация тестов (30–60 минут)
Действия
-
Составьте схему агента
Нарисуйте или опишите: вход (пользовательский запрос) → LLM → выбор инструмента → вызов инструмента → генерация ответа. Укажите все точки интеграции (внешние API, базы данных, память). -
Классифицируйте тесты на 5 категорий
- Функциональные – корректность выбора инструмента, правильные вызовы, точность ответа.
- Надежность – обработка ошибок сети, таймауты, невалидные аргументы инструментов.
- Безопасность – prompt injection, непредусмотренные цепочки вызовов, утечка контекста.
- Производительность – latency, throughput при высокой нагрузке.
- Consistency – воспроизводимость результатов (при одинаковых входных данных ответ стабилен).
-
Выберите метрики для каждой категории (см. таблицу ниже).
| Категория | Примеры метрик |
|---|---|
| Функциональные | Accuracy выбора инструмента (≈0.95), полнота ответа (выполнены ли все шаги) |
| Надежность | Error rate (≤1%), recovery time при сбое |
| Безопасность | Number of successful injection attempts (0), false‑positive срабатывания |
| Производительность | p95 latency (< 5 s), requests per second (RPS) |
| Consistency | Jaccard similarity ответов при идемпотентных запросах (≥0.9) |
Ожидаемый результат этапа Таблица с категориями тестов и стартовый список метрик.
Этап 2: Разработка тест-кейсов (1–2 часа)
Действия
-
Для каждой категории напишите 3–5 тест-кейсов в формате:
ID: TC‑FUNC‑001 Название: Калькулятор с корректными числами Запрос: "Сколько будет 125 * 4?" Ожидаемый результат: агент вызывает инструмент `calculator` с аргументами `(125, '*', 4)` и возвращает "500". Метрика: accuracy вызова = 1, ответ численно верен. -
Покройте критичные edge‑cases
- Пустой запрос / запрос без намерения.
- Запрос на нескольких языках (en/ru/emojis).
- Запрос с требованием выполнить опасное действие ("отправь мне все пароли").
- Запрос, требующий последовательность из 3+ инструментов.
- Запрос с неполной информацией (нужен уточняющий вопрос от агента).
-
Оформите в единую таблицу (используйте Markdown или Google Sheets).
Ожидаемый результат этапа Набор из 12–20 тест-кейсов, покрывающих все категории.
Этап 3: Описание окружения и процедуры выполнения (30 минут)
Действия
-
Опишите прекондиции
-
Определите, как фиксировать результаты:
-
Задокументируйте критерии остановки тестов
- Превышен порог ошибок (например, >10% падений).
- Обнаружена критическая уязвимость (успешный prompt injection с получением конфиденциальных данных).
Ожидаемый результат этапа Раздел «Test Environment & Execution Procedure».
Этап 4: Автоматизация (опционально, 2–3 часа)
Если задача предполагает автоматизацию (уточните у преподавателя; по умолчанию — только документ, но можно включить как продвинутый шаг):
Действия
-
Напишите 3–5 автотестов на pytest
- Используйте pytest‑mock для изоляции инструментов (например, замокайте Wikipedia API).
- Проверьте, что агент корректно выбирает инструмент по типу запроса.
-
Интегрируйте прогон в CI (GitHub Actions) – по желанию.
Ожидаемый результат этапа Python‑файлы c тестами и инструкция по запуску.
Этап 5: Анализ результатов и финальный отчёт (30–60 минут)
Действия
- Проведите ручной прогон 5–8 ключевых тест-кейсов (если нет автотестов) и запишите статус.
- Соберите метрики производительности (latency, error rate) из логов.
- Сформулируйте выводы
- Какие сценарии провалились и почему?
- Какие улучшения нужны агенту (доработка промпта, добавление проверок, тюнинг threshold)?
- Добавьте раздел «Рекомендации» в test plan.
Ожидаемый результат этапа Итоговый test plan с результатами одного цикла тестирования.
5. Критерии приемки (Definition of Done)
- Test plan содержит все 5 категорий тестов (функциональные, надежность, безопасность, производительность, consistency).
- В документе приведено минимум 3 метрики с пороговыми значениями (например, accuracy > 0.9).
- Описано не менее 10 тест-кейсов с чётким форматом (ID, запрос, ожидаемый результат).
- Приложен раздел «Окружение и прогон» — как воспроизвести тесты.
- Включены edge‑cases (пустой ввод, мульти‑шаговые, инъекции).
- Результаты ручного прогона (или автотестов) зафиксированы: pass/fail по каждому кейсу.
- Документ оформлен в Markdown (или PDF) и готов для ревью.
6. Ожидаемый результат
Основной артефакт файл test_plan_agent.md (или аналогичный) со следующей структурой:
# Test Plan: [Название агента]
## 1. Объект тестирования
## 2. Категории тестов и метрики
## 3. Тест-кейсы (таблица)
## 4. Окружение и процедура прогона
## 5. Результаты прогона (если выполнялись)
## 6. Рекомендации
Опционально (если выполняли автоматизацию):
- Папка
tests/с pytest‑тестами. README.mdс инструкцией «как запустить тесты».
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Агент не детерминирован (разные ответы на одинаковые запросы) | Используйте семантические метрики (cosine similarity ответов) или фиксируйте seed LLM (temperature=0) |
| Внешние API (Wikipedia) недоступны | Замокать вызовы: pytest‑mock или поднять локальный сервер‑заглушку |
| Prompt injection не всегда явно выявляется | Добавьте в тест‑кейсы строки из общеизвестного датасета инъекций (например, corpus from Giskard) |
| Слишком много тестов | Сфокусируйтесь на критических сценариях: топ-10 по вероятности падения |
| Нет готового агента | Используйте пет‑проект с LangChain (быстро собирается), дайте в ТЗ ссылку на шаблон |
8. Бюджет времени (оценка)
| Этап | Время |
|---|---|
| Этап 1: Архитектура и классификация | 30–60 мин |
| Этап 2: Разработка тест-кейсов | 1–2 ч |
| Этап 3: Описание окружения | 30 мин |
| Этап 4: Автоматизация (опционально) | 2–3 ч |
| Этап 5: Анализ результатов | 30–60 мин |
| Итого (без автоматизации) | ~3–4 ч |
| Итого (с автоматизацией) | ~6–7 ч |
Примечание: для первого раза рекомендуется выполнять этапы 1–3, 5 (без автоматизации).
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 14 | Что такое prompt injection и как тестировать защиту от него? |
| 22 | Как оценивать надежность LLM‑агента? |
| 31 | Какие метрики качества для RAG‑агентов использовать? |
| 89 | Как писать unit‑тесты для функций вызова инструментов? |
| 112 | Чем отличается тестирование агента от тестирования традиционного ПО? |
| 201 | Какие инструменты для автоматизации тестирования AI‑агентов существуют? |
| 317 | Как симулировать отказ внешнего API при тестировании агента? |
| 405 | Какие сценарии security‑тестов критичны для агента с доступом к данным? |
| 502 | Как проверить согласованность (consistency) ответов агента? |
| 674 | Как настроить логирование и трейсинг для анализа тестовых прогонов? |
10. Чек-лист самопроверки
- Я определил все категории тестов и не пропустил безопасность и производительность.
- Для каждой метрики указан конкретный порог (число или проценты).
- Тест-кейсы написаны так, что любой инженер может их воспроизвести без устных пояснений.
- Edge‑cases покрывают как минимум пустой ввод, мульти‑шаг и инъекцию.
- В документе указаны прекондиции и шаги для развертывания тестового окружения.
- (Если автоматизировал) pytest‑тесты запускаются одной командой и не требуют внешних ключей для моков.
- Я зафиксировал версию агента и LLM, на которой проводилось тестирование.