AI-агент, якого я випустив, пройшов 23 юніт-тести, але вже за годину після запуску він вигадав функцію продукту та назвав ціну втричі нижчу за реальну. Коли користувач вказав на це, бот наполіг на своєму, розмова закінчилася, і я втратив клієнта. Ця помилка довела, що набір детермінованих юніт-тестів не може гарантувати надійність агента.
Чому юніт-тестів недостатньо для AI-агентів
Юніт-тести працюють для традиційного коду, тому що однакові вхідні дані завжди дають однаковий результат. «2 + 2 = 4» — це гарантія, яку можна перевірити простим порівнянням на рівність. Однак агент на базі LLM змінює свою відповідь залежно від промпту, навколишнього контексту та стану будь-яких зовнішніх інструментів, які він викликає. Тест, який перевіряє точну відповідність рядків, пропускає галюцинації, зміну тону або порушення guardrails. Тиха помилка, яка коштувала мені клієнта, показує, що потрібно оцінювати всю взаємодію, а не лише окремі функції.
Створення системи оцінювання (evaluation harness) перед написанням коду функціоналу
Я змінив порядок розробки: спочатку спроектував чотирирівневу систему оцінювання, а вже потім написав агента. Система виконує 131 тест за один прохід, коштує приблизно три центи за запуск і завершується приблизно за одинадцять хвилин. Я призначаю кожному тесту найменшу модель, яка здатна з ним впоратися, залишаючи більші та дорожчі моделі для випадків, коли вони дійсно приносять користь.
Рівень 1 — Функціональність інструментів
Перший рядок оборони перевіряє, чи може агент правильно викликати свої інструменти. Тести охоплюють успішні пошуки, навмисно некоректні запити та симуляцію збоїв API. Оскільки використання інструментів є переважно детермінованим — або запит сформовано правильно, або API повертає помилку — достатньо простих тверджень (assertions) на Python. Виявлення некоректного запиту на цьому етапі запобігає плутанині на подальших етапах.
Рівень 2 — Дотримання інструкцій
Далі система перевіряє, чи дотримується агент встановлених guardrails. Менша LLM виступає в ролі оцінювача, перевіряючи відповідь агента на відповідність правилам: дотримання ролі, уникнення заборонених тем та генерація необхідної JSON-схеми. Цей рівень виявляє семантичне дрейфування, яке пропускають юніт-тести, наприклад, перехід у небажану роль або витік внутрішніх промптів.
Рівень 3 — Орієнтована на ціль поведінка
Третій рівень є найважливішим. Він перевіряє, чи справді агент досягає своєї мети. Для бота з генерації лідів це означає підтвердження того, що він ставить правильні кваліфікаційні запитання та передає діалог людині, коли це доречно. Тут я використовую модель, орієнтовану на міркування (reasoning-oriented model), оскільки вона може оцінити загальний потік взаємодії, не завищуючи витрат. Якщо бот не досягає своєї мети — навіть якщо він пройшов перші два рівні — він позначається як такий, що потребує переробки.
Рівень 4 — Продуктивність
Нарешті, система фіксує затримку (latency) та швидкість генерації токенів. Повільні відповіді погіршують досвід користувача, особливо в чатах у реальному часі. Відстежуючи ці метрики разом із функціональною коректністю, я гарантую, що агент є одночасно точним і швидким.
Способи економії витрат
Цифра 0,03 долара за запуск — це не маркетинговий хід; вона досягається шляхом підбору розміру моделі відповідно до складності тесту. Детерміновані перевірки інструментів виконуються на найдешевшому середовищі виконання, перевірка дотримання інструкцій використовує легку модель, і лише оцінювання цілей залучає потужнішу, хоча й дорожчу модель. Такий багаторівневий підхід дозволяє тримати загальні витрати достатньо низькими, щоб запускати повний набір тестів при кожній зміні коду.
Компроміс: швидкість проти безпеки
Впровадження системи оцінювання додало труднощів на початковому етапі. Цикли розробки подовжилися, а терміни запуску змістилися.
На що звернути увагу далі
- Оцінювачі на базі моделей: У міру вдосконалення LLM оцінювач на 2-му рівні зможе стати більш витонченим, зменшуючи кількість хибнопозитивних результатів і водночас виявляючи тонкі порушення політики.
Висновок
Якщо ви створюєте AI-агентів для продакшену, багаторівнева система оцінювання не є опціональною — вона є фундаментальною. Завдяки тому, що ви закладаєте витрати на комплексне тестування на самому початку — 0,03 долара за запуск, одинадцять хвилин на набір тестів — ви захищаєте себе від тих «тихих» помилок, які юніт-тести просто не здатні виявити.
