Если ты смотрел вирусные демонстрационные ролики открытой библиотеки Browser Use, у тебя легко могло сложиться впечатление, что эра ручного интернет-серфинга подошла к концу. В коротких видео агент уверенно открывает браузер, находит дешевый авиабилет, вбивает имя пассажира и бодро рапортует об успехе. На синтетических тестовых сайтах показатель завершения задач стабильно держится на уровне 90–95%. Кажется, что еще чуть-чуть — и мы сможем полностью делегировать покупку товаров и бронирование отелей автономным ботам.
Но между уютной демонстрационной песочницей и диким коммерческим вебом лежит непреодолимая пропасть. Чтобы измерить реальную устойчивость агентов, исследователи из Университета Карнеги — Меллона (CMU) совместно с создателями Browser Use запустили масштабный стресс-тест в новом бенчмарке Odysseys 2.
Результаты оказались обескураживающими: при выходе на реальные боевые сайты успешность флагманских моделей рухнула до скромных 44,5%, а у открытых локальных сеток упала ниже 30%. Аналитик Джулиан Голди подробно препарировал узкие места технологии. О том, как инженеры борются за скорость веб-агентов, мы уже рассказывали в разборе Спекулятивное ускорение веб-агентов: как BrowserUse UltraFast выполняет задачи за три секунды.
Иллюзия победы: главный баг автономных покупок
Первая и самая пугающая проблема, вскрытая бенчмарком, получила название False Completion Bug — ложное сообщение об успехе.
Представь ситуацию: ты поручил агенту найти на маркетплейсе беспроводную клавиатуру дешевле 5 000 рублей и оформить доставку. Агент бодро кликает по страницам, открывает карточку товара, нажимает кнопку, закрывает всплывающее модальное окно и гордо выводит в консоль: SUCCESS: Task finished. Item added to cart.
Ты открываешь браузер, заходишь в профиль — а корзина абсолютно пуста! Оказывается, клик пришелся на закрытие рекламного баннера или предложение оформить подписку на скидки. Модель приняла исчезновение всплывающего окна за подтверждение добавления в корзину и завершила сценарий. На этот критический сбой приходится 29% всех провалов в Odysseys 2. Для реального бизнеса такой агент опаснее сломанного кассового аппарата, ведь он создает ложное ощущение выполненной работы.
Четыре стены: где застревает нейросеть
Почему модели, обладающие колоссальной эрудицией, становятся беспомощными на обычном коммерческом сайте? Статистика Odysseys 2 раскладывает причины сбоев по полочкам:
- Модальные окна и оверлеи (38% всех сбоев). Всплывающее уведомление о согласии на сбор куки (Cookie Banner), форма подписки на рассылку или предложение включить геолокацию накладывают поверх страницы невидимый затемненный слой. Агент видит координаты целевой кнопки в коде DOM и пытается кликнуть по ним, но системное событие перехватывается прозрачным overlay-слоем. Модель зацикливается, повторяя клик по 20 раз подряд, пока не исчерпает лимит шагов.
- Антифрод и капчи (19% сбоев). Современные системы защиты вроде Cloudflare Turnstile или reCAPTCHA v3 анализируют не только IP-адрес, но и микродинамику движения курсора. Прямолинейные механические перемещения мыши и мгновенный ввод символов через автоматизацию Playwright детектируются за полсекунды. Агент намертво упирается в экран проверки.
- Бесконечный скролл и виртуализация списков (14% сбоев). На современных витринах длинные списки товаров рендерятся динамически: как только карточка уходит за пределы видимости, браузер удаляет ее из DOM-дерева ради экономии памяти. Агент скроллит страницу вниз, теряет ранее найденные варианты и начинает поиск заново, попадая в бесконечный цикл.
О том, как нестандартное поведение браузерных движков ломает автоматизацию, читай в статье Ситуативные отношения браузеров: когда движки единодушны вопреки спецификации.
Паттерн самопроверки: спасение через верификацию
Чтобы вытащить агентов из этой ловушки, разработчики переходят от слепого выполнения шагов к архитектуре с обязательными контрольными точками рефлексии (Self-Reflection Checkpoints).
Вот как выглядит минимальный рабочий скрипт устойчивого агента на Python с включенной пост-валидацией:
import asyncio
from browser_use import Agent, Controller
from langchain_anthropic import ChatAnthropic
async def run_verified_agent(task_prompt: str):
# Инициализируем модель с мультимодальным зрением
llm = ChatAnthropic(model_name="claude-3-5-sonnet-20241022", temperature=0.1)
controller = Controller()
agent = Agent(
task=task_prompt,
llm=llm,
controller=controller,
use_vision=True, # Скриншоты для страховки DOM-элементов
max_actions_per_step=2,
validate_output=True # Обязательная самопроверка финального состояния
)
history = await agent.run(max_steps=20)
return history
if __name__ == "__main__":
task = (
"Зайди на тестовый магазин, найди беспроводную мышь, "
"добавь в корзину и подтверди, что счетчик корзины изменился на 1."
)
asyncio.run(run_verified_agent(task))
А для гарантированного отсечения ложных рапортов перед завершением процесса вызывается отдельная функция жесткой валидации состояния страницы:
def verify_cart_state(page_text: str, target_url: str) -> bool:
# 1. Проверяем смену URL на страницу оформления или корзины
if "cart" not in target_url and "checkout" not in target_url:
print("[Валидация] Ошибка: итоговый URL не ведет в корзину!")
return False
# 2. Ищем явные маркеры успешного действия в тексте DOM
success_markers = ["Товар добавлен", "В корзине 1 товар", "Items (1)"]
has_marker = any(marker.lower() in page_text.lower() for marker in success_markers)
if not has_marker:
print("[Валидация] Ошибка: маркеры добавления товара не найдены.")
return False
print("[Валидация] Успех: состояние корзины подтверждено.")
return True
Трезвые выводы для разработчиков
Бенчмарк Odysseys 2 наглядно показал: эпоха наивного веб-скрейпинга подошла к концу. Автономный агент в интернете — это не просто вызов LLM в цикле. Это сложнейшая инженерная система, требующая гибридного зрения, эмуляции человеческой биометрии движений и обязательных контрольных проверок на каждом шаге.
Пока технология не научится гарантированно преодолевать модальные окна и отсекать ложные рапорты, доверять ботам настоящую кредитную карту в реальных интернет-магазинах явно преждевременно.
