Ідея за 30 секунд
Тестування AI-агентів відрізняється від класичного тестування програм, бо поведінка агента залежить не лише від коду, а й від LLM, контексту, інструментів і послідовності кроків.
Тому в production зазвичай використовують багаторівневу стратегію тестування: unit-тести, evaluation-набори, regression-порівняння з baseline і replay реальних трейсів.
Такий підхід допомагає знаходити помилки до релізу і контролювати деградацію системи з часом.
Проблема
Класичні підходи до тестування погано працюють для AI-агентів. У звичайному коді однаковий вхід майже завжди дає однаковий результат. У системах з LLM поведінка може змінюватися залежно від:
- формулювання промпту;
- версії моделі;
- контексту;
- результатів інструментів.
Через це локальні тести часто проходять, але в production агент може:
- піти в зайві кроки й роздути token cost;
- обрати неправильний інструмент у складному сценарії;
- почати поводитися нестабільно після зміни версії моделі або промпту.
Без структурованої стратегії тестування такі проблеми зазвичай знаходять уже після релізу.
Основна концепція / модель
Стратегія тестування агентів будується як кілька рівнів перевірки, а не один тип тестів. Кожен рівень ловить свій клас ризиків у поведінці системи.
| Метод | Що перевіряє | Коли використовувати |
|---|---|---|
| Unit testing | Локальну логіку агента: вибір інструмента, схему виходу, базові runtime-правила | На кожну зміну коду, промпту або policy-правил |
| Golden datasets | Стабільний набір кейсів для відтворюваних eval-прогонів | Коли потрібні порівнювані результати між baseline і candidate |
| Eval harness | Поведінку системи в стандартизованому eval-пайплайні | Перед релізом і для release validation |
| Regression testing | Різницю (diff) між версіями на тих самих evaluation і replay-кейсах | Після зміни моделі, промпту, інструментів або policy |
| Replay & debugging | Production-інциденти і failure traces для аналізу збоїв | Коли треба відтворити інцидент і знайти причину деградації |
Чим вищий рівень перевірки, тим дорожчий прогін і тим рідше його зазвичай запускають.
Як це працює
У production агентних системах тестування зазвичай організоване як release pipeline: зміни в коді, промптах, версії моделі або інструментах проходять через unit-тести, evaluation-набори, regression-порівняння з baseline і replay реальних сценаріїв.
Як проходить зміна через pipeline
- Change — будь-яка зміна в коді, промпті, версії моделі або інструментах запускає новий прогін.
- Unit — перевіряється локальна логіка: вибір інструменту, обробка результату, базові runtime-правила.
- Eval — агент проходить evaluation-набори сценаріїв, а якість міряється метриками на кшталт
tool correctnessіtask completion. - Regression — результати кандидата порівнюються з baseline, щоб виявити небажані зміни поведінки.
- Gate — CI блокує реліз, якщо просідають ключові метрики або ламаються критичні сценарії.
- Replay — replay використовують і до релізу (на збережених трейсах у staging), і після релізу (для моніторингу деградації).
Test pyramid для агентів
У багатьох командах тестування агентів організовують як піраміду:

Regression тут не окремий шар, а спосіб порівняння нової версії з baseline на тих самих evaluation і replay тестах.
- Unit tests — швидкі і дешеві, запускаються часто.
- Evaluation — повільніші, але перевіряють поведінку агента.
- Replay — найдорожчі, але показують реальні production-сценарії.
Реалізація
На практиці це зазвичай виглядає як кілька автоматичних перевірок у pipeline. Приклади нижче схематичні: вони показують логіку перевірок і не прив'язані до конкретного framework API.
1. Unit тест логіки агента
Перевіряємо, чи агент обирає правильний інструмент.
def test_tool_selection():
tools = FakeTools(price_api_response={"symbol": "BTC", "price": 65000})
agent = Agent(tools=tools)
result = agent.run("What is the price of BTC?")
assert result.selected_tool == "crypto_price_api"
assert result.output["symbol"] == "BTC"
У реальних unit-тестах виклики зовнішніх інструментів зазвичай stub/mock-ять, щоб перевіряти логіку агента, а не мережеві залежності.
2. Evaluation на наборі сценаріїв
Агент запускається на наборі тестових запитів.
test_cases = [
{"input": "Find BTC price", "expected_tool": "crypto_price_api"},
{"input": "Search latest AI news", "expected_tool": "web_search"}
]
for case in test_cases:
result = agent.run(case["input"])
assert result.tool == case["expected_tool"]
Якість evaluation оцінюють за метриками якості, стабільності та вартості (детальний перелік див. у секції Метрики тестування агентів). Для відкритих або складних задач результати часто додатково перевіряють через LLM-as-a-judge. У production під час evaluation також відстежують token cost, latency і кількість кроків агента, щоб нові версії не ставали дорожчими, повільнішими або надмірно багатокроковими.
Сам evaluation-набір теж варто версіонувати, інакше з часом стає незрозуміло, чи змінилася поведінка агента, чи сам набір сценаріїв.
3. Regression тест після змін
Коли змінюється модель або промпт, запускається той самий evaluation-набір.
run_eval_suite(model="baseline-model")
run_eval_suite(model="candidate-model")
Якщо результати значно відрізняються, зміни потрібно перевірити перед релізом.
У практиці також порівнюють candidate з baseline на replay-наборах, не лише на синтетичних evaluation-кейсах.
4. Replay production сценаріїв
Production-запити зберігають і використовують як до релізу (staging replay), так і після релізу (post-release replay). Багато команд автоматично зберігають failure traces і додають їх у regression dataset.
for trace in production_traces:
result = agent.run(trace.input)
evaluate(result, trace.expected_behavior)
Такий підхід дозволяє перевіряти поведінку агента на реальних сценаріях, а не лише на синтетичних тестах.
5. Що зазвичай блокує реліз у CI
У практиці агентні тести часто ділять на детерміновані (локальна логіка, маршрутизація, формат виходу) і недетерміновані (якість відповіді, повнота, адекватність міркувань), для яких використовують eval-метрики або LLM-as-a-judge.
У CI зазвичай блокують реліз, якщо падають критичні сценарії, просідає task success rate, росте hallucination rate або різко збільшуються latency і token cost.
Типові помилки
Тестування лише промптів
Команда перевіряє кілька ручних прикладів і вважає зміну безпечною, але це не покриває поведінку агента в реальному циклі виконання.
Типова причина: немає системного evaluation-процесу з чіткими метриками.
У production це часто переходить у дрейф AI-агента після релізу.
Відсутність evaluation-наборів сценаріїв
Без контрольного набору сценаріїв складно об'єктивно порівнювати baseline і candidate.
Типова причина: не сформовано еталонні набори даних (golden datasets).
Наслідок: якість відповіді стає нестабільною, а регресії знаходять запізно.
Немає regression-перевірок
Після зміни моделі або промпту система може формально "працювати", але давати інший профіль поведінки.
Типова причина: не запускається регулярне regression-тестування.
У production це зазвичай видно як непомітний спочатку дрейф AI-агента.
Нефіксована версія моделі
LLM-провайдери іноді оновлюють моделі без зміни загальної назви.
Якщо версія не зафіксована (наприклад, gpt-4o-2024-08-06), результати можуть змінюватися між прогонами.
Типова причина: використовується alias моделі (gpt-4o, sonnet) без version pinning.
У production системах зазвичай фіксують конкретну версію моделі або snapshot-версію.
Відсутність replay-тестів
Інцидент у production стається один раз, але команда не може стабільно відтворити його локально.
Типова причина: не зберігаються failure traces і не використовується replay і дебаг агентів.
Наслідок: одна й та сама помилка повертається після наступних релізів.
Тестування лише happy-path сценаріїв
Evaluation-набори містять лише "чисті" запити, тоді як у реальності запити часто неповні, неоднозначні або приходять на фоні часткових збоїв.
Типова причина: немає сценаріїв із помилками інструментів і деградацією залежностей.
У production це часто виглядає як збій інструмента або частковий збій.
Метрики тестування агентів
| Метрика | Що показує |
|---|---|
| Tool accuracy | правильність вибору інструменту |
| Task success rate | завершення задачі |
| Hallucination rate | частота неправильних фактів |
| Token cost | витрати на виконання |
| Latency | час виконання задачі |
| Reasoning steps | кількість кроків агента |
Обмеження підходу
Багаторівневе тестування не прибирає недетермінованість повністю, бо LLM-системи поводяться не повністю детерміновано. Воно лише зменшує ризик і робить зміни поведінки помітними раніше.
Evaluation і replay також дорогі: вони збільшують час прогонів, навантаження на CI і витрати на моделі.
Тому в реальних командах повний набір перевірок часто ділять на швидкі pre-merge тести і важчі nightly або pre-release прогони.
Коротко
- Для AI-агентів недостатньо одного типу тестів.
- Unit-тести перевіряють локальну логіку.
- Evaluation і regression контролюють якість поведінки після змін.
- Replay допомагає відтворювати реальні production-збої.
FAQ
Q: Чи достатньо лише unit-тестів для агентів?
A: Ні. Unit-тести добре ловлять локальні помилки, але поведінкові ризики закривають evaluation, regression і replay.
Q: Що таке evaluation для агентів?
A: Це запуск агента на наборі тестових сценаріїв і оцінка результатів за ключовими метриками якості, стабільності та вартості.
Q: Коли потрібно запускати regression-тести?
A: Після будь-яких змін, які можуть вплинути на поведінку агента: оновлення моделі, зміна промптів, нові інструменти або зміни у runtime логіці.
Q: Навіщо використовувати replay production-трейсів?
A: Replay дозволяє відтворити реальні production-запити і перевірити, чи система поводиться так само після змін. Це допомагає знаходити збої, які складно відтворити синтетичними тестами.
Що далі
Якщо хочете зібрати цю стратегію в робочий pipeline, почніть з Unit Testing, потім підключіть Golden Datasets, а запуск і оцінку прогонів стандартизуйте через Eval Harness. Така послідовність дає швидкий зворотний зв'язок у розробці і стабільну перевірку якості в CI.
Коли оновлюєте модель, промпти або інструменти, ключовим стає Regression Testing. А якщо проблема вже проявилася у production, найкраще спрацьовує Replay and Debugging: відтворюєте реальний трейс і перевіряєте, де саме змінилася поведінка агента.
Для multi-agent систем із Orchestrator Agent додавайте окремі тести на порядок кроків, залежності між гілками і часткові відмови. У таких сценаріях найчастіше вилітають класичні production-ризики: Infinite Loop, Tool Spam і Cascading Failures.