Архивный кейс · VK parser и контентный pipeline

WTG

Что где лежит в коде, как запускается и что проверялось.
Версия 21841487f524 · подготовлено 8 сентября 2026

О проекте

Нужно было объединить сбор контента из VK, обработку изображений и текстов и операторскую проверку в одном наблюдаемом процессе. Каждая стадия должна оставлять проверяемый результат и поддерживать повтор без потери исходных данных.

WTG — VK parser и контентный pipeline. Система собирает публикации и связанные материалы через VK API и Playwright, сохраняет raw evidence, ставит OCR и классификацию в очередь и выводит результат оператору для проверки, разметки и решения о публикации. Страница фиксирует интерфейс, архитектуру, code-map и измерения проекта.

Что отличает реализацию

Raw evidence хранится отдельно от производных данных. Очереди разделяют сбор, OCR, классификацию и редакционное решение; оператор видит источник и промежуточные результаты до публикации. Code-map связывает экран и API с модулем, таблицами и проверками, поэтому изменение можно проследить по всей цепочке.

Состав прикладного кода

Python content pipeline 60.7%Python / VK / Playwright 19.4%FastAPI / operator UI 12.6%Alembic / PostgreSQL 4.8%Python / OCR 2.5%

Доли по размеру прикладных файлов Git в закреплённой версии. Каждый файл отнесён к одной подсистеме по правилам scripts/generate-stack-share.mjs; тесты, ассеты, зависимости и generated-файлы исключены. Округление — до 0,1%. Это состав кода, а не уровень владения технологиями.

  • Архивный кейс не содержит работающей демо-ссылки; поведение фиксируют обезличенные экраны, схемы и агрегированные измерения.
  • Статусы заданий и confidence не являются измерением точности OCR или моделей.
  • Legacy noVNC и недоступные разделы не выдаются за работающие.
  • Наблюдавшийся рост памяти web-процесса описан как факт замера; первопричина в коде не установлена.

Скриншоты, схемы и исходные материалы сохранены на языке оригинала; подписи и описание переведены.

Архитектура и схемы

  • Сбор и долгая обработка вынесены в задания с lease/heartbeat.
  • OCR отделён от web и имеет самостоятельные очередь, статусы и попытки.
  • Исходная публикация, промежуточные решения и итоговые материалы имеют разные роли.
  • Публичный архив содержит обезличенные изображения, документацию и агрегированные измерения без пользовательских идентификаторов.
Архитектура наблюдаемого контура WTG
Архитектура наблюдаемого контура WTG · Mermaid ↓
Модель данных VK parser и pipeline
Модель данных VK parser и pipeline · Mermaid ↓
Последовательность обработки публикации
Последовательность обработки публикации · Mermaid ↓
Целевая схема разделения обработчиков из проектной документации
Целевая схема разделения обработчиков из проектной документации · Mermaid ↓

Code-map: файлы и связи

Карта привязана к версии 21841487f524. В таблице — экран или API, связанный модуль и данные.

ФункцияЭкран / APIМодульДанные / проверка
Авторизацияaccountsservices/auth.py, vk_user_token.pyauth_accounts, account_communities; browser/API состояния рассматриваются раздельно
Создание и исполнение заданийschedules, processingservices/admin_control.py, cli/admin_worker.pyadmin_jobs, admin_job_step_logs; claim, heartbeat, retry, stale cleanup
Планирование APIschedules, group-poolservices/api_posts_schedule.pyapi_schedule_steps, api_group_pool_items; поколение расписания, очередь, cooldown
Сборgroups, postsservices/crawler.py, vk_parsers.pycommunities, posts, post_media; источник, повторное чтение, нормализация
Профиль и маркетgroups tabs, marketcommunity_profile.py, community_market.py, community_services.pyпрофиль, товары, услуги; фильтры и привязка к группе
Быстрый отборgroup-poolfast_screen_pool.py, fast_wall_probe.pyfast_screen_pool_states, fast_screen_pool_checks; lease, due rows, retention
Pipelinepipelineservices/content_pipeline.pycontent_pipeline_runs/posts/items; этапы и сохранённые результаты
OCRprocessing, post detailsocr.py, ocr_jobs.py, cli/ocr_worker.py, cli/ocr_sidecar.pyocr_jobs, post_media; completed/failed, attempts, timeout
Канонические материалыresultspublication_materials.py, publication-intelligencepublication_decisions/materials/media; связь решения с исходником и версия
Разметка и teacherlabels, processingpublication_teacher.pyteacher runs/results/applications; разметка, расхождения, применение
Логиlogs, file-logsweb/app.py, helpers file logsadmin_job_logs, step logs, files; событийные и файловые следы
ВыдачаTelegram / MAXотдельные bot repositoriescanonical output + bot tables; downstream использует подготовленные данные

Как работать с картой

  1. Перед изменением найти функцию и пройти связи до API, состояния и хранилища.
  2. Проверить входы, ошибки, повторные события и зависимые сценарии.
  3. После изменения обновить карту и затронутые схемы вместе с кодом.
  4. Выполнить связанные проверки и привязать новые материалы к версии исходников.

Сценарии и API

  1. Просмотрите обезличенные расписания, группы, pipeline и материалы.
  2. Сопоставьте экран со строкой code-map и схемой данных.
  3. Откройте агрегаты очередей и истории, прочитайте дату и ограничения замера.

Проверка опубликованной версии

CI: prod-deploy ↗ · 61c78116 · исторический запуск другой версии · 2026-06-16T11:57:17Z

CI: prod-deploy ↗ · 1299a357 · исторический запуск другой версии · 2026-06-16T11:45:01Z

  • Обезличивание 30 снимков проверено по индексам материалов и полноразмерным изображениям.
  • Code-map сопоставлен с экранными маршрутами, API, модулями, таблицами и проверками версии 2184148.
  • Агрегаты очередей, OCR, публикационных материалов и размеров таблиц сохранены без пользовательских записей.

Эти проверки относятся к указанной версии. Коммерческие показатели и качество моделей на независимой выборке здесь не измерялись.

Измерения

collection history
collection history · Исходные данные ↓
container logs
container logs · Исходные данные ↓
cpu samples
cpu samples · Исходные данные ↓
material types
material types · Исходные данные ↓
ocr status
ocr status · Исходные данные ↓
table storage
table storage · Исходные данные ↓
  • Сохранено 30 содержательных кадров фактического интерфейса.
  • Дата, сценарий и версия указаны у каждого кадра.
  • Зафиксировано 527 718 публикаций и 29 092 OCR-задания; это разные сущности и не показатели качества.

Запуск и эксплуатация

Checkout на сервере и опубликованный аудитированный репозиторий имеют разные SHA. Источник каждого вида evidence указан отдельно; соответствие старого image содержимому checkout не утверждается.

Стек

Python / FastAPI / JinjaОперационная админка, JSON API и orchestration.
PostgreSQL / SQLAlchemy / AlembicПубликации, задания, версии решений, материалы и миграции.
PaddleOCRОтдельный OCR sidecar и worker.
Docker / Nginx / systemdПрежнее размещение семи служб и фоновые задания.

Материалы и исходники

Разработка и накопление материалов: июнь–июль 2026. Архивный кейс подготовлен 8 сентября 2026.

Архив материалов на языке оригинала.