Skip to content

Раздел 0: Введение

Проект: ADOLF — AI-Driven Operations Layer Framework
Модуль: Watcher
Версия: 4.0
Дата: Февраль 2026


0.1 Назначение модуля

Описание

Watcher — модуль системы ADOLF, предназначенный для автоматизированного сбора, обогащения и аналитической обработки данных о товарах конкурентов на маркетплейсах. Модуль обеспечивает непрерывную подпитку базы знаний ADOLF актуальной информацией о ценах, скидках, ассортименте и стратегиях конкурентов.

В отличие от предыдущих версий, Watcher v4.0 реализован как двухчастная система: автономный Collector на выделенном VPS собирает сырые данные через реальные браузеры на домашних ПК, а Analyzer на основном сервере ADOLF извлекает данные из базы знаний и формирует аналитику для отображения в Open WebUI.

Бизнес-цели

ЦельОписание
Мониторинг конкурентовРегулярный сбор каталогов продавцов с ценами, рейтингами, отзывами
Обогащение данныхДетальная информация по каждому SKU: характеристики, описания, варианты, изображения
Подпитка базы знанийАвтоматическая конвертация данных в Markdown и передача в модуль Knowledge (Qdrant)
Конкурентная аналитикаЦеновая, ассортиментная, трендовая аналитика и алерты на основе накопленных данных
Данные для других модулейПредоставление данных модулям Marketing, Scout, Content Factory

Эволюция модуля

ВерсияАрхитектураСтекСтатус
v2.0Офисные ПК + USB-модемы + VPSPython, FastAPI, PostgreSQL, CeleryЗаменена
v3.0Офисные ПК + FRP-туннели + VPSPython, FastAPI, PostgreSQL, CeleryЗаменена
v4.0Домашние ПК + FRP-туннели + VPS + основной серверNode.js (Collector) + Python/FastAPI (Analyzer)Актуальная

Ключевые отличия v4.0: полный переход Collector на Node.js, замена PostgreSQL на SQLite для локального хранения, Telegram-бот вместо Open WebUI как интерфейс управления Collector, добавление Knowledge Pipeline для интеграции с RAG-системой.


0.2 Двухчастная архитектура

Watcher v4.0 состоит из двух независимых подсистем, взаимодействующих через модуль Knowledge.

Collector (VPS, Node.js)

Автономная подсистема сбора данных. Работает на отдельном VPS, управляется через Telegram-бот и Web-интерфейс мониторинга. Не зависит от основного сервера ADOLF в процессе сбора.

Функции: сканирование каталогов продавцов, обогащение данных по SKU, хранение истории цен, конвертация результатов в Markdown, передача документов в Knowledge.

Analyzer (основной сервер, Python/FastAPI)

Аналитическая подсистема на основном сервере ADOLF. Извлекает данные о конкурентах из базы знаний (Qdrant), выполняет аналитическую обработку и предоставляет результаты через Open WebUI.

Функции: ценовая аналитика, ассортиментный анализ, конкурентное позиционирование, трендовая аналитика, формирование алертов.

Схема взаимодействия


0.3 Поддерживаемые маркетплейсы

ПриоритетМаркетплейсСканерОбогатительМетод обогащения
1Wildberriesscanner_wb.jsenricher_wb.jsHTTP API (без браузера)
2Ozonscanner_ozon.jsenricher_ozon.jsCDP (браузер)
3Яндекс.Маркетscanner_ymarket.jsenricher_ymarket.jsCDP (браузер)

Все сканеры используют Chrome через CDP (Chrome DevTools Protocol), подключаясь к домашним ПК по FRP-туннелям. Обогатитель Wildberries работает через HTTP-запросы к внутренним API маркетплейса, обогатители Ozon и Яндекс.Маркет требуют реального браузера из-за антибот-защиты.


0.4 Собираемые данные

Сканирование каталога (каждые 72 часа)

КатегорияПараметры
ИдентификацияSKU, URL, название, бренд, позиция в каталоге
ЦеныТекущая цена, старая цена, размер скидки (%, абс.)
РепутацияРейтинг, количество отзывов, количество заказов (если доступно)
СостояниеНаличие (in_stock), бейджи (Бестселлер и др.)
МедиаURL основного изображения

Обогащение данных (каждые 24 часа)

КатегорияПараметры
КонтентПолное описание, все характеристики, состав
МедиаВсе изображения, количество видео
ВариантыРазмеры/цвета с наличием и ценами
КатегоризацияКатегория, путь категории
ПродавецНазвание продавца, ОГРН (WB)
ОстаткиОбщий остаток (если доступно)
ОтзывыРаспределение оценок (1–5 звёзд)
ИсторияИстория изменения цен

Доступность полей по маркетплейсам

ПолеWBOzonYM
SKU, название, бренд
Цена, старая цена, скидка
Рейтинг, отзывы
Количество заказов?
Категория
Описание, характеристики
Изображения
Варианты (размеры/цвета)
Остатки на складах~~~
ОГРН продавца
Количество вопросов

— доступно, ~ — частично/через API, — недоступно, ? — требует проверки.

Отсутствующие поля сохраняются как null в едином формате данных.


0.5 Knowledge Pipeline

Поток данных в базу знаний

По завершении обогащения Collector конвертирует JSON-результат в структурированный Markdown-документ и передаёт его по локальной сети (между VPS) в директорию модуля Knowledge. Далее Knowledge индексирует документ в Qdrant для использования RAG-системой.

Формат Markdown-документа

Каждый документ, передаваемый в Knowledge, содержит YAML-заголовок для классификации и маршрутизации в RAG-системе:

yaml
---
title: "Конкурент: Seller Name (Wildberries)"
category: competitive_intelligence
subcategory: enriched_catalog
marketplace: wildberries
seller_id: "1025130"
seller_name: "Seller Name"
enrichment_date: "2026-02-12"
total_products: 142
brand_id: all
access_level: manager
source: watcher_collector
---

Данные, поступающие в Knowledge

Тип документаПериодичностьСодержание
Обогащённый каталог24 часаПолные данные по всем SKU продавца
Ценовые изменения24 часаDiff между текущим и предыдущим обогащением
Сводка по продавцу72 часаАгрегированные метрики: ассортимент, средние цены, рейтинги

0.6 Аналитические возможности

Analyzer извлекает данные из Knowledge и формирует следующие виды аналитики.

Ценовая аналитика

МетрикаОписание
Динамика цен по SKUГрафики изменения цен конкурентов во времени
Средняя скидка продавцаАнализ скидочной политики конкурента
Частота изменения ценКак часто конкурент корректирует цены
Ценовые стратегииВыявление паттернов: завышение old_price, сезонные скидки
Ценовое позиционированиеСравнение цен конкурентов с нашими товарами по категориям

Ассортиментная аналитика

МетрикаОписание
Скорость обновленияКоличество новых/удалённых SKU за период
Глубина ассортиментаРаспределение товаров по категориям
ABC-анализРанжирование по рейтингу/отзывам как прокси продаж
Бестселлеры и аутсайдерыТовары с максимальным/минимальным рейтингом и отзывами
Размерные линейкиАнализ доступных размеров и наличия

Конкурентное позиционирование

МетрикаОписание
Пересечение ассортиментаОбщие бренды и похожие товары с нашим каталогом
Сравнение рейтинговРейтинги конкурентов vs наши в одинаковых категориях
Анализ контентаКачество описаний и характеристик карточек конкурентов
Анализ отзывовРаспределение оценок, выявление слабых мест конкурентов

Трендовая аналитика

МетрикаОписание
Сезонные паттерныЦиклические изменения цен и ассортимента
Рост/падение отзывовКосвенный индикатор динамики продаж
Новые категорииВыход конкурента в новые товарные ниши
Динамика наличияТренды по остаткам и доступности размеров

Алерты

СобытиеОписание
Резкое снижение ценыКонкурент снизил цену на аналог нашего товара
Новый товар в категорииКонкурент вывел товар в нашей категории
Бейдж «Бестселлер»Товар конкурента получил бейдж
Массовый вывод товаровВозможная ликвидация остатков
Значительный рост отзывовКосвенный признак роста продаж

0.7 Технологический стек

Collector (VPS)

КомпонентТехнология
RuntimeNode.js
База данныхSQLite (WAL-режим)
Браузерная автоматизацияPlaywright CDP
УправлениеTelegram Bot API
HTTP APINative http.createServer (без фреймворков)
Web-мониторингNode.js + WebSocket
ТуннелиFRP (frps/frpc)
UI-фреймворкTailwind CSS + Lucide Icons + shadcn/ui tokens
Процесс-менеджментsystemd
Reverse proxyNginx + Let's Encrypt SSL

Analyzer (основной сервер)

КомпонентТехнология
APIFastAPI (Python)
База знанийQdrant (через модуль Knowledge)
ОчередьRedis + Celery
AIGPT-5 mini (рутинная аналитика), Claude Opus 4.5 (глубокий анализ)
ИнтерфейсOpen WebUI

Коммуникация между частями

КаналПротоколНаправление
Knowledge PipelineФайловая передача по сети (VPS → основной сервер)Collector → Knowledge
Формат передачиMarkdown с YAML-заголовком
ИндексацияQdrant vector DBKnowledge → Analyzer

0.8 Ролевая модель

Collector (Telegram-бот)

Управление Collector осуществляется через Telegram-бот. Доступ ограничен ADMIN_CHAT_ID в конфигурации.

ФункцияДоступ
Добавление/удаление продавцовAdmin
Запуск сканирования и обогащенияAdmin
Мониторинг статуса системыAdmin
Настройка расписаний и параметровAdmin
Web-мониторинг (agent.adolf.su)Admin (auth по паролю)

Analyzer (Open WebUI)

ФункцияManagerSeniorDirectorAdmin
Просмотр цен конкурентов
Просмотр аналитики
Просмотр алертов
Сравнение с нашими товарами
Экспорт данных
Настройка порогов алертов

Фильтрация по брендам применяется в соответствии с ролевой моделью ADOLF Core.


0.9 Интеграции

Зависимости Collector

КомпонентНазначение
FRP ServerТуннели к домашним ПК
Chrome на домашних ПКБраузеры для CDP-подключения
Telegram Bot APIУправление и уведомления
Модуль KnowledgeПриём Markdown-документов

Зависимости Analyzer

Компонент ADOLFИспользование
Core MiddlewareАвторизация, роутинг API
Knowledge (Qdrant)Источник данных о конкурентах
CeleryФоновые задачи аналитики
RedisКэширование, очередь задач
Open WebUIПользовательский интерфейс

Потребители данных Watcher

МодульИспользование данных
MarketingЦеновые данные конкурентов для стратегии рекламных ставок
ScoutДанные для анализа ниш и прогнозирования
Content FactoryХарактеристики и описания конкурентов для SEO-оптимизации

0.10 Механизмы защиты от блокировок

МеханизмОписание
Домашние IPКаждый ПК использует собственный домашний IP-адрес
FRP-туннелиПодключение к ПК без проброса портов, через VPS
Эмуляция поведенияКривые Безье для мыши, коэффициент усталости, случайные отвлечения
ОркестрацияЧередование ПК по маркетплейсам и продавцам, штрафы за повторы
CooldownАвтоматическая пауза при нарушении правил чередования
CAPTCHA-обработкаОжидание до 2 минут, пропуск SKU с fallback-данными

Эмуляция поведения (human.js)

КомпонентОписание
bezierMoveДвижение мыши по кубической кривой Безье с перелётом и дрожанием
humanClickКлик со случайным смещением
smoothScrollСкролл порциями 200–450px с учётом усталости
humanTypeВвод текста с 12% вероятностью опечаток (QWERTY-соседи)
ОтвлеченияНаведение, просмотр карточки, выделение текста, поиск, правый клик, переключение вкладок
Коэффициент усталостиПрогрессивное замедление по мере сбора данных

0.11 Структура документации

РазделСодержаниеПодсистема
0. ВведениеОбзор, архитектура, цели (этот документ)Общая
1. АрхитектураКомпоненты, потоки данных, инфраструктураОбщая
2. Telegram-бот и планировщикbot.js, scheduler.js, команды, расписанияCollector
3. Оркестратор и исполнительorchestrator.js, runner.js, распределение задачCollector
4. Сканеры и обогатителиSKILL/, human.js, маркетплейс-спецификаCollector
5. База данных и REST APISQLite-схема, api.js, файловое хранилищеCollector
6. Analyzer и Open WebUIKnowledge Pipeline, дашборд, AI-чат, Celery, алертыAnalyzer
7. Мониторинг и развёртываниеcdp-pool.js, monitor/, config.js, systemd, FRP, nginxCollector
8. Задачи разработкиСтатус, backlog, технический долг, roadmapОбщая

0.12 Быстрый старт

Для администратора (Collector)

  1. Установите Chrome на домашних ПК, настройте FRP-клиент (frpc) для проброса CDP-порта
  2. На VPS: клонируйте репозиторий, выполните npm install
  3. Заполните .env (BOT_TOKEN, ADMIN_CHAT_ID)
  4. Запустите systemd-сервисы: cdp-pool, watcher-bot, watcher-api, watcher-monitor
  5. В Telegram отправьте боту WB1025130 для первого сканирования
  6. Откройте https://agent.adolf.su для мониторинга

Для менеджера (Analyzer)

  1. Откройте Open WebUI
  2. Задайте вопрос: «Покажи цены конкурента Seller Name на Wildberries»
  3. Для сравнения: «Сравни наши цены с конкурентом в категории Худи»
  4. Для алертов: «Какие конкуренты снизили цены за последнюю неделю?»

0.13 Репозитории

РепозиторийСодержание
Sign25/watcherCollector: исходный код, сканеры, обогатители, мониторинг
Sign25/DocsДокументация модуля (директория watcher/)

Документ подготовлен: Февраль 2026
Версия: 4.0
Статус: Черновик

Документация ADOLF Platform