Назад до блогу

Чотири джерела нестабільності вебзавдань AI Agent та інженерні практики

Під час виконання вебзавдань Agent збої найчастіше виникають у чотирьох сферах: пошук елементів, очікування й тайм-аути, збереження стану та блокування з боку середовища. Ідемпотентні кроки, контрольовані повтори, збережений стан та ізоляція середовища для кожного завдання помітно стабілізують відсоток успішних виконань.

На початку роботи з вебавтоматизацією підхід зазвичай здається простим: описати процес і запустити скрипт. Логіка виглядає правильно, але завдання все одно час від часу завершуються помилкою, а стан акаунтів інколи поводиться незвично. Перша реакція — перевіряти код, однак глибший аналіз зазвичай зводить проблеми до чотирьох сфер.

AI Agent 网页任务不稳定的四类来源与工程做法的关键步骤与判断维度示意图

Зміна сторінки ламає пошук елементів

Більшість скриптів знаходять елементи за допомогою селекторів. Якщо селектор жорстко заданий, майже будь-яка зміна сторінки може зробити його непрацездатним: кнопка отримує іншу назву класу, у тексті змінюється одне слово, блок переходить із серверного рендерингу на асинхронне завантаження або елемент поміщають у новий контейнер. Під час A/B-тесту одна й та сама сторінка може навіть мати різну структуру для різних акаунтів.

Типові прояви — елемент не знаходиться, клік потрапляє не туди або натискається однойменний елемент керування в іншому місці. Такий збій не спричинений коливаннями мережі, тому кілька повторних спроб його не виправлять.

Практичний підхід — менше залежати від абсолютних шляхів. Краще використовувати атрибути доступності, стабільні бізнес-ID або відносні зв’язки між елементами; для одного типу сторінок варто підготувати резервні селектори й автоматично переходити на них, якщо основний перестав працювати. Якщо сторінка містить iframe або Shadow DOM, спочатку потрібно перейти до правильного контексту, інакше пошук не спрацює.

Очікування й тайм-аути задані в неправильному діапазоні

Якщо час очікування надто короткий, елемент можуть визнати недоступним ще до завершення рендерингу, і це виглядатиме як помилка скрипта. Якщо він надто довгий, тривалість одного завдання невиправдано зростає, пропускна здатність падає, а довгі тайм-аути можуть приховати справжню помилку.

Явні очікування надійніші за фіксований sleep: потрібно чекати конкретної умови, наприклад появи цільового елемента, відповіді на запит або зникнення анімації завантаження. Бюджети тайм-аутів слід налаштовувати пошарово — окремо для одного кроку, сторінки та всього завдання — і поступово звужувати, а не використовувати одне значення всюди.

Також важливо розрізняти очікування готовності сторінки до роботи та очікування формування бізнес-результату. У першому випадку зазвичай достатньо готовності DOM; у другому може знадобитися callback API або зміна тексту статусу на сторінці. Якщо чекати неправильного сигналу, операція може виглядати успішною, хоча дані фактично не були записані.

Прогрес губиться посередині багатокрокового завдання

Реєстрація, оформлення замовлення або публікація легко можуть містити понад десять кроків. Якщо процес переривається посередині через тайм-аут, збій браузера або перезапуск хоста, а стан зберігається лише в пам’яті, наступний запуск або починається спочатку, або повторно надсилає попередній крок.

Наслідки повторного виконання інколи важче діагностувати, ніж звичайний збій: одна й та сама операція виконується двічі, у вищій системі з’являється зайвий запис, а його джерело складно відстежити.

Рішення — дати кожному кроку точку збереження. Після завершення кожного кроку записуйте прогрес у постійне сховище разом з унікальним ідентифікатором завдання; після перезапуску продовжуйте з останньої успішної точки. Для цього не потрібен складний фреймворк — достатньо файлу або одного запису стану.

Блокування з боку середовища виглядає як помилка коду

Перші три категорії проблем виникають усередині завдання, але ще одна походить із середовища. Сайт може разом оцінювати характеристики браузера, поведінку доступу та мережеве походження трафіку. Якщо доступ здається підозрілим, сайт може повернути сторінку перевірки, порожній вміст або просто тайм-аут. У журналі завдання це майже не відрізняється від помилки виконання.

Поширені причини:

  • Географія вихідного IP, часовий пояс і мова не узгоджені
  • Усі завдання надсилають запити з одного браузерного середовища, тому щільність запитів за одиницю часу помітно вища, ніж у реальних користувачів
  • Середовище часто змінюється або акаунт багаторазово входить знову

Чотири заходи, що підвищують успішність

  1. Зробіть кожен крок ідемпотентним. Перед виконанням перевіряйте, чи вже виконана попередня умова, щоб повтор дії не створював додаткових побічних ефектів. Операції читання природно ідемпотентні; для операцій запису потрібен унікальний ідентифікатор або ключ дедуплікації.
  2. Класифікуйте збої. Тимчасові проблеми — елемент ще не відрендерився, мережа нестабільна, API повернув 5xx — можна повторювати з backoff. Детерміновані помилки — обмеження акаунта, неправильні параметри або відсутній цільовий ресурс — не зникнуть від нових спроб; їх слід завершувати, щоб вони не займали ресурс паралельного виконання.
  3. Регулярно зберігайте стан. Фіксуйте прогрес, проміжні результати та поточний крок, щоб після перезапуску завдання продовжувалося з місця зупинки, а не з першого кроку.
  4. Ізолюйте середовище виконання для кожного завдання. Кожному акаунту або завданню потрібне окреме браузерне середовище, у якому Cookies і локальне сховище не спільні, характеристики fingerprint розумно відрізняються, а часовий пояс і мова відповідають регіону вихідного IP.

Четвертий захід стає особливо важливим зі зростанням масштабу завдань. Коли десятки або сотні завдань виконуються паралельно, шар середовища задає верхню межу стабільності й визначає масштаб наслідків у разі проблеми. У таких сценаріях PurpleMark дає змогу створювати ізольовані середовища на вимогу та звільняти їх пакетно, надаючи кожному акаунту власне середовище, щоб стани різних завдань не впливали один на одного.

Цей матеріал призначений виключно для технічних досліджень і обміну практиками розробки. Використовуйте відповідні технології законно та з дотриманням вимог і дотримуйтеся умов використання цільової платформи.