Как определять тематику сайтов-доноров с помощью Hermes и Crawl4AI

Настраиваем Hermes и Crawl4AI для определения тематики сайтов-доноров по тексту и скриншотам. Разбираем промпты, Vision-модели и бюджетную DeepSeek V4 Flash Vision Exp

Hermes и Crawl4AI

При анализе ссылочного профиля тематику донора часто определяют по домену, заголовку страницы или нескольким словам из текста. На чистых отраслевых сайтах этого иногда достаточно. Проблемы начинаются с региональными порталами, каталогами, бывшими СМИ, дроп-доменами и площадками, на которых рядом существуют новости, казино, займы и гостевые статьи обо всем сразу.

Такую проверку можно частично автоматизировать в Hermes. Crawl4AI загружает страницу, извлекает содержимое и при необходимости делает скриншот. Затем текстовая модель анализирует заголовки, основной текст и служебные признаки, а Vision-модель оценивает визуальную сторону: шапку, рубрикатор, рекламу, шаблон публикации и общую направленность сайта.

Результатом должна быть не одна безусловная метка, а структурированная оценка с доказательствами и уровнем уверенности.

Зачем анализировать и текст, и внешний вид

Тематика страницы и тематика домена — разные сущности. Статья о банковских картах может быть опубликована на финансовом сайте, в городском СМИ, на универсальном статейнике или на восстановленном домене бывшего театра. Если посмотреть только текст статьи, все четыре донора можно ошибочно отнести к финансам.

Текстовая модель хорошо работает с содержимым, которое удалось извлечь:

  • title, description и H1;
  • заголовки разделов;
  • основной текст страницы;
  • анкоры внутренних ссылок;
  • названия рубрик и хлебные крошки;
  • сведения о проекте, редакции или компании;
  • повторяющиеся коммерческие и спамные формулировки.

Vision-модель добавляет другой слой наблюдений:

  • чему посвящены логотип, шапка и главное меню;
  • какие рубрики занимают заметное место;
  • похожа ли страница на редакционный материал, каталог или сетку под размещение ссылок;
  • сколько места занимают реклама и партнерские блоки;
  • согласуется ли визуальная оболочка сайта с содержанием публикации;
  • не перекрывает ли реальный контент заглушка, форма входа или антибот-защита.

Скриншот не заменяет HTML. Модель может не разобрать мелкий текст на длинной странице или переоценить дизайн. Но вместе два представления уменьшают число грубых ошибок.

Как устроена схема

Рабочий процесс можно разделить на пять этапов:

  1. Hermes получает список URL и правила классификации.
  2. Crawl4AI открывает страницу как браузер, ждет динамический контент и возвращает HTML, Markdown, ссылки и скриншот.
  3. Текстовая модель извлекает признаки и предлагает тематику страницы и домена.
  4. Vision-модель независимо анализирует снимок страницы.
  5. Hermes сопоставляет два ответа, отмечает противоречия и сохраняет результат в таблицу или JSON.

Crawl4AI здесь отвечает за получение страницы, а не за окончательное SEO-решение. Он умеет обрабатывать динамические страницы, выполнять JavaScript, извлекать основной контент и создавать скриншоты. Для списка URL доступна пакетная обработка через arun_many(), но параллельность нужно ограничивать с учетом памяти компьютера и нагрузки на проверяемые сайты. Это соответствует рекомендациям документации Crawl4AI.

Подключить Crawl4AI к Hermes можно несколькими способами: через MCP-сервер, собственный инструмент или локальный скрипт-обертку, который Hermes запускает из терминала. Конкретный способ зависит от версии и окружения. Поэтому наличие установленного Python-пакета Crawl4AI само по себе еще не означает, что Hermes получил отдельный инструмент для его вызова.

Какие данные собирать по каждому донору

Для первичной классификации я бы сохранял не только итоговую категорию, но и исходные сигналы:

ПолеЧто в нем хранить
requested_urlИсходный адрес из списка
final_urlАдрес после перенаправлений
status_codeИтоговый HTTP-статус
titleЗаголовок документа
h1Основной заголовок страницы
page_topicТематика конкретной страницы
site_topicПредполагаемая тематика всего сайта
site_typeСМИ, корпоративный сайт, каталог, блог, форум, статейник и т. п.
commercial_signalsПартнерские материалы, витрины, формы заказа, большое число исходящих ссылок
text_evidenceКороткие текстовые основания классификации
visual_evidenceНаблюдения по скриншоту
confidenceУверенность модели от 0 до 1
needs_reviewНужна ли ручная проверка
errorПричина, по которой страницу не удалось оценить

Отдельные поля для страницы и сайта обязательны. Без них модель почти неизбежно начнет переносить тему одной гостевой публикации на весь домен.

Бюджетная модель для Hermes

Для такого сценария подходит deepseek/deepseek-v4-flash-vision-exp в OpenRouter. Это экспериментальная мультимодальная версия DeepSeek V4 Flash: она принимает текст и изображения, возвращает текст, поддерживает инструменты и структурированный вывод. По данным карточки модели OpenRouter, у неё контекст до 1 048 576 токенов. На момент подготовки статьи OpenRouter показывает цену от $0,2156 за миллион входных и $0,6468 за миллион выходных токенов, но тариф и доступные провайдеры могут измениться.

Модель удобна тем, что один идентификатор можно использовать и для анализа скриншотов, и для текстовых вспомогательных задач. В Hermes вспомогательные модели обслуживают Vision, извлечение веб-страниц, сжатие контекста, генерацию названий сессий, маршрутизацию MCP и другие фоновые операции. В актуальном интерфейсе модели можно назначить сразу всем auxiliary slots через действие All auxiliary tasks — это прямо предусмотрено документацией Hermes.

Практический плюс единой модели — предсказуемый бюджет и меньше настроек. Но есть три ограничения.

Во-первых, Vision Exp обозначена как экспериментальная. Ее поведение или доступность могут меняться.

Во-вторых, возможность выполнить задачу еще не означает, что модель лучше специализированной альтернативы. Генерация короткого названия, сжатие длинного диалога и анализ интерфейса имеют разные требования.

В-третьих, я бы не назначал бюджетную модель для автоматического одобрения потенциально опасных команд без отдельного теста. Ошибка в тематике донора ведет к ручной перепроверке, а ошибка в решении о безопасности команды имеет другой уровень последствий.

Поэтому разумный стартовый вариант — использовать DeepSeek V4 Flash Vision Exp для vision, web_extract, compression, title_generation и других некритичных вспомогательных задач, а затем расширять ее роль после проверки.

Как назначить модель вспомогательным задачам

Проще всего открыть раздел Models в панели Hermes, раскрыть auxiliary models, найти DeepSeek V4 Flash Vision Exp и выбрать Use as - All auxiliary tasks. Для отдельных задач модель можно назначить тем же способом по одной.

Если модель уже появлялась в статистике использования, карточка позволяет сделать это без ручного редактирования YAML. После изменения нужно начать новую сессию: открытые чаты продолжают использовать конфигурацию, с которой были запущены.

Для точечной настройки в ~/.hermes/config.yaml используется блок следующего вида:

auxiliary:
  vision:
    provider: openrouter
    model: deepseek/deepseek-v4-flash-vision-exp
    reasoning_effort: none

  web_extract:
    provider: openrouter
    model: deepseek/deepseek-v4-flash-vision-exp
    reasoning_effort: low

  compression:
    provider: openrouter
    model: deepseek/deepseek-v4-flash-vision-exp
    reasoning_effort: low

  title_generation:
    provider: openrouter
    model: deepseek/deepseek-v4-flash-vision-exp
    reasoning_effort: none

Это пример структуры, а не полный перечень полей конфигурации. Hermes хранит отдельную пару provider и model для каждой вспомогательной задачи. Точный набор слотов зависит от установленной версии, поэтому безопаснее сначала использовать интерфейс hermes model или панель Models, а затем проверить сгенерированный config.yaml.

Понадобится рабочий ключ OpenRouter. Если в аккаунте ограничен список разрешенных провайдеров, нужно убедиться, что хотя бы один из провайдеров выбранной модели доступен. Иначе модель будет видна в каталоге, но запрос завершится ошибкой маршрутизации.

Каким должен быть промпт классификации

Плохой запрос выглядит так: «Определи тематику сайта». Он не задает уровень классификации, не требует доказательств и провоцирует модель выбрать уверенный ответ даже по слабым данным.

Рабочий промпт должен определять:

  • закрытый или иерархический список тематик;
  • различие между страницей и доменом;
  • перечень доступных входных данных;
  • правила для смешанных и универсальных сайтов;
  • признаки, при которых вывод делать нельзя;
  • формат ответа;
  • порог ручной проверки.

Пример системной части:

Ты классифицируешь сайты-доноры для SEO-анализа.

Раздельно определи:
1. Тематику проверяемой страницы.
2. Основную тематику сайта или укажи «универсальная/смешанная».
3. Тип площадки.

Используй только переданные данные. Не определяй тематику всего домена
по одной статье, если навигация, главная страница и внутренние ссылки
этого не подтверждают.

Приведи до трех коротких текстовых и до трех визуальных оснований.
Если данных недостаточно, снизь confidence и установи needs_review=true.
Верни только JSON по заданной схеме.

Пример ответа:

{
  "page_topic": "финансы / банковские карты",
  "site_topic": "региональные новости",
  "site_type": "СМИ",
  "text_evidence": [
    "страница посвящена условиям кредитной карты",
    "в меню преобладают городские и региональные рубрики"
  ],
  "visual_evidence": [
    "в шапке указан городской новостной бренд",
    "макет соответствует новостной публикации"
  ],
  "confidence": 0.82,
  "needs_review": false
}

Категории лучше задать заранее. Если разрешить модели каждый раз придумывать формулировку, в выгрузке появятся «финансы», «финансовые услуги», «банки и кредитование» и «личные финансы» как четыре разных значения.

Как сократить расходы

Главная экономия появляется не от выбора самой дешевой модели, а от уменьшения числа бессмысленных вызовов.

Сначала правила, затем нейросеть

Не нужно отправлять в Vision-модель страницу с кодом 404, пустую заглушку или очевидный редирект. Сначала проверьте статус, итоговый URL, объем текста и наличие содержимого.

Не передавайте весь HTML

Для классификации обычно достаточно метаданных, H1, меню, заголовков, основного текста и выборки внутренних ссылок. Скрипты, стили, встроенные JSON и повторяющиеся элементы раздувают контекст, но редко улучшают ответ.

Используйте Vision только там, где он добавляет сигнал

Если текст и структура уверенно указывают на узкотематический сайт, анализ скриншота можно пропустить. Vision полезнее для смешанных площадок, страниц с небольшим объемом текста, подозрительных доменов и конфликтов между метаданными и содержимым.

Кэшируйте результат обхода

Повторная настройка промпта не должна каждый раз заново открывать сотни сайтов. Сохраненные Markdown, признаки и скриншоты позволяют прогонять классификацию повторно без нового браузерного обхода.

Ограничьте ответ схемой

Короткий JSON дешевле свободного эссе и проще проверяется автоматически. Доказательства нужны, но достаточно нескольких конкретных признаков.

Как проверить качество до массового запуска

Модель нельзя оценивать по пяти удачным примерам. Перед обработкой всей базы стоит вручную разметить выборку, в которой есть:

  • тематические сайты;
  • универсальные СМИ;
  • каталоги и агрегаторы;
  • форумы и пользовательские платформы;
  • статейники с разнородными публикациями;
  • дроп-домены;
  • страницы с редиректами и ошибками;
  • сайты, у которых тема статьи не совпадает с темой проекта.

Для начала достаточно 100-200 разнообразных URL. По ним можно посчитать долю совпадений по крупной тематике, отдельно разобрать ложную уверенность и определить порог needs_review.

Я бы проверял не только итоговую метку, но и три типа ошибок:

  1. Модель перенесла тему страницы на весь сайт.
  2. Модель поверила метатегам, хотя реальное содержимое им не соответствует.
  3. Модель уверенно классифицировала страницу, которую фактически не удалось загрузить.

После этого промпт и правила обхода можно зафиксировать версией. Если одновременно поменять модель, промпт и список категорий, сравнить результаты с предыдущим запуском будет невозможно.

Где заканчивается автоматизация

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

Поэтому итог Hermes лучше воспринимать как предварительную сегментацию:

  • уверенные тематические площадки переходят к следующему этапу проверки;
  • смешанные и спорные сайты попадают в ручную очередь;
  • ошибки загрузки проверяются повторно;
  • подозрительные несоответствия анализируются по истории домена и другим источникам.

Сильная сторона связки Hermes, Crawl4AI и мультимодальной модели не в том, что она заменяет специалиста. Она позволяет быстро разобрать большой список и сохранить основания, по которым каждый сайт попал в свою категорию.

Итог

Для определения тематики доноров недостаточно передать модели текст одной публикации. Надежнее разделить процесс: Crawl4AI получает технические данные, очищенный текст и скриншот; текстовая модель оценивает содержание; Vision-модель проверяет визуальный контекст; Hermes объединяет выводы и отправляет сомнительные случаи на ручную проверку.

deepseek/deepseek-v4-flash-vision-exp подходит для бюджетного запуска такой схемы. Благодаря поддержке текста и изображений ее можно использовать во всех auxiliary models Hermes и не собирать отдельный набор моделей для каждой фоновой задачи. Но начинать лучше с некритичных слотов, измерять качество на своей выборке и помнить, что экспериментальная модель и чужая верстка могут измениться.

Источники