▶️ Дивіться відеоурок (15 хвилин)
Ми вже створили повноцінну AI-платформу: Agents, tools, knowledge base, streaming chat, failover та middleware. Тепер час розібратися з найскладнішим — тестуванням. Робити реальні запити до OpenAI під час тестів неможливо: це повільно, дорого, а результати щоразу змінюються, що руйнує ваші assertions.
У цьому епізоді ми протестуємо всю систему за допомогою Pest без жодного звернення до API. Використовуємо систему faking в SDK — вона працює за тим же принципом, що і faking для mail, notifications чи queues у Laravel. Ви заздалегідь визначаєте відповіді та перевіряєте, чи були відправлені правильні prompts.
Розпочнемо з невеликого рефакторингу: перенесемо middleware у простір імен AI/middleware. Потім напишемо тести для перевірки логіки agent, роботи з контекстом діалогу та отримання детермінованих відповідей. Завдяки preventStrayPrompts ми заблокуємо випадкові виклики AI у процесах, де вони не потрібні (наприклад, при створенні тікета).
Також протестуємо черги: перевіримо, чи потрапляє TicketClassifier у чергу при валідному запиті. Custom tools протестуємо на реальних записах у базі даних, попутно виправивши помилку у factory, яку виявив тест.
Ми проведемо feature-test для chat endpoint (автентифікація, валідація, взаємодія з agent), а також перевіримо vector store та seeding бази знань, імітуючи створення сховища, завантаження документів та генерацію embeddings.
У результаті всі 12 AI-тестів виконуються миттєво без звернень до зовнішніх API. Їх можна запускати при кожному коміті, не турбуючись про витрати чи нестабільність результатів.
У наступному епізоді зосередимося на безпеці: захистимо agent від prompt injection та навчимося фільтрувати повідомлення за допомогою локальної LLM перед тим, як вони потраплять до OpenAI. Це дозволить економити на заблокованих запитах.