Захожу в панель и вижу: конкурент опустил цену на наш основной товар на 12%. Три дня назад. Я узнал об этом от клиента, который спрашивал, почему у нас дороже. Проблема не в том, что у меня не было инструментов. Проблема в том, что инструменты были ручные — и рука просто не дошла. Поэтому я сел и сделал AI-агента, который мониторит цены сам и дёргает меня только когда что-то реально изменилось.
Это не пост про идеальную архитектуру. Это разбор того, что я понаделал, что сработало и куда убил время.
Зачем тут AI, если есть парсинг
Классический ответ: ставь cron-задачу, раз в час стучишься на страницу, сохраняешь цену в базу, сравниваешь. Работает. Но выдаёт простыню данных, в которой ты сам не разберёшься.
AI-агент в этом контексте решает другую задачу — он берёт сырые данные и делает из них смысл. Не просто «цена изменилась», а «цена изменилась, потому что у конкурента акция до 15 числа, а ещё они обновили карточку товара и теперь предлагают бесплатную доставку». То есть агент не следит за цифрами — он понимает контекст.
Конкретно агент умеет:
- Парсить страницы конкурентов и обходить защиту от ботов
- Определять, что именно изменилось: цена, наличие, скидка, комплектация
- Классифицировать тип изменения — акция, корректировка, ошибка парсинга
- Писать мне в Telegram короткое уведомление с выводом, а не таблицей чисел
Архитектура — без сложностей
Я долго думал про Kafka, микросервисы и прочую красоту. Потом вспомнил, что мне нужно решение для малого бизнеса, а не для enterprise-команды. Поэтому собрал на трёх компонентах:
Скрапер → Очередь задач → LLM-обработчик → Уведомление
Скрапер ходит по списку URL и складывает HTML в очередь. Обработчик берёт HTML, отправляет в LLM с промптом «вытащи цену, название, наличие, любые активные акции». Результат пишется в базу, а если цена сдвинулась больше чем на порог — шлётся уведомление.
Никакой магии. Один скрипт на Python, один LLM API, один экземпляр Redis для очереди (если хочешь простоту — можно вообще без него, просто цикл по очереди).
Как это работает — код и промпт
Скрапер я взял готовый: playwright для страниц с JS-рендерингом, httpx для простых. Главная боль — защита от ботов. Cloudflare, Datadome, PerimeterX. Я сначала попробовал stealth-плагин к playwright, потом подключил ScrapingBee как fallback. В итоге работает в 80% случаев. Оставшиеся 20% — страницы, где проще человеку зайти руками.
Промпт для LLM — сердце системы. Мой выглядит примерно так:
Ты — аналитик e-commerce. Из HTML-страницы извлеки:
1. Название товара
2. Текущую цену (число, валюта)
3. Была ли скидка (старая цена, если есть)
4. Есть ли в наличии
5. Любые активные акции, бонусы, подарки
Верни ответ в JSON. Если данных нет — верни null, не придумывай.
Этот промпт я менял три раза. Сначала он возвращал естественный текст. Потом понял, что хочу структуру. Ещё раз переписал, когда агент начал hallucinate цену на товар, которого на странице не было — оказалось, он «домыслил» данные из заголовка.
Где убил время и что получил
Где убил время: на парсинге страницы одного крупного маркетплейса. Там цена формируется JavaScript'ом, который подгружается после основного контента. Я два дня разбирался с прокси и headless-браузером, пока не понял, что у маркетплейса есть API для партнёров с нормальным JSON. Подключил за час.
Что получил: за неделю агент поймал четыре изменения цен конкурентов. Два из них — акции, которые я бы пропустил. Один раз конкурент реально снизил цену на 8% — я успел ответить до того, как от нас ушёл клиент.
Что я понял
AI-агент для мониторинга — это не про AI. Это про автоматизацию рутины с умным фильтром. Парсинг сам по себе был и раньше. LLM добавил именно слой понимания: не «цена стала 999₽», а «цена стала 999₽, потому что скидка 15% до пятницы, базовая цена не изменилась». Без этой интерпретации я бы тратил по 15 минут на каждое уведомление, разбираясь, что произошло.
Если у тебя до 50 товаров в отслеживании — агент окупится за месяц. Если больше — тем более.
Один нюанс: не делай проверку слишком частой. Конкуренты замечают ботов, а часть маркетплейсов начинает подсовывать CAPTCHA. Я остановился на раз в 4 часа — этого хватает, чтобы не пропустить изменение и не нарваться на бан.
Могу поделиться готовым скриптом — пишите.
